Slide 1

Slide 1 text

!TZP 5PLZV3VCZ,BJHJ 5FTUJOH 8FSDLFSQMVHJO XJUICBUT

Slide 2

Slide 2 text

͓࿳ͼ

Slide 3

Slide 3 text

͓஌Βͤ ౦ژ3VCZ๨೥ձ 4BU ๺ւಓ্໺޿খ࿏ళ ߴڮձ௕ͱ೥Λ࿑͓͏

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

8FSDLFSQMVHJOʹ CBUTͰ ςετΛॻ͘

Slide 6

Slide 6 text

8FSLFSͱ͸ 5IF0QFOEFMJWFSZQMBUGPSN ϓϥΠϕʔτϦϙδτϦͷ$*͕ແྉ QMVHJOΛ3VCZ΍#BTIͰ࡞੒ νϟοτʹ$*ͷ݁ՌΛ௨஌

Slide 7

Slide 7 text

CBUTͱ͸ʁ #BTI"VUPNBUFE5FTUJOH4ZTUFN SCFOW SVCZCVJMEͰར༻

Slide 8

Slide 8 text

γΣϧεΫϦϓτͷ ςετͷ࿩Ͱ͢

Slide 9

Slide 9 text

JEPCBUBOPUJGZ

Slide 10

Slide 10 text

JEPCBUBOPUJGZ ೥݄WϦϦʔε JEPCBUBʹ$*ͷ݁ՌΛ௨஌ CVJMEEFQMPZʹରԠ ͍͢͝؆୯ͳ4IFMM4DSJQU

Slide 11

Slide 11 text

1MVHJOͷલఏ৚݅ XFSDLFSͷ؀ڥม਺ ݸ͘Β͍ XFSDLFSͷGVODUJPO QMVHJOͷ؀ڥม਺

Slide 12

Slide 12 text

1MVHJOͷ΍ͬͯΔ͜ͱ ඞਢͷ؀ڥม਺ΛνΣοΫ 50,&/ ؀ڥม਺͔Β৘ใऩूͯ͠จݴ࡞੒ CVJMEͷ੒൱ DVSMͰ1045

Slide 13

Slide 13 text

1MVHJOΛςετ͢Δૂ͍ લఏ৚݅Λίʔυʹ͍ͨ͠ લఏ৚݅Λίʔυʹ͍ͨ͠ લఏ৚݅Λίʔυʹ͍ͨ͠ લఏ৚݅Λίʔυʹ͍ͨ͠ ύϥϝʔλΛม͑ͯݕূ͍ͨ͠

Slide 14

Slide 14 text

ςετ͕ඞཁͳΒ3VCZ࢖͑͹͍ ͍͡ΌΜͱࢥ͏͚ΕͲ΋ɺϓϩμ Ϋγϣϯίʔυ͸௒γϯϓϧͳ༁ ͩ͠ɺલఏ৚݅ΛίʔυʹͰ͖Ε ͹͍͍ͷ͔ͩΒɺ4IFMM4DSJQU Ͱ΋ߦ͚ΔΜ͡Όͳ͍ߟ͑ͨ

Slide 15

Slide 15 text

ײ૝ લఏ৚݅ΛίʔυʹͰ͖ͨ ׳ΕΔ·Ͱ͕͔͔࣌ؒͬͨ TUVC໰୊͕ະղܾ 4IFMM4DSJQUྗऑ͍ ݱঢ়ͩͱ3VCZͰ΍ͬͨ΄͏ָ͕

Slide 16

Slide 16 text

SVOTI

Slide 17

Slide 17 text

SVOTI source "$WERCKER_STEP_ROOT/functions.sh"! ! error_message=$(valid)! if [ $? = 1 ]; then! warn "$error_message"! exit 0! fi! ! http_code=`curl \! --silent \! --data "format=html" \! --data-urlencode "source=$(message)" \! --output "$WERCKER_STEP_TEMP/result.txt" \! --write-out "%{http_code}" \! "https://idobata.io/hook/$WERCKER_IDOBATA_NOTIFY_TOKEN"`! ! if [ "$http_code" = "200" ]; then! success "Finished successfully!"! else! warn `cat $WERCKER_STEP_TEMP/result.txt`! warn "Finished unsuccessfully."! fi

Slide 18

Slide 18 text

GVODUJPOTTI ൈਮ valid() {! if [ ! -n "$WERCKER_IDOBATA_NOTIFY_TOKEN" ]; then! echo 'Please specify token property.'! exit 1! fi! }! ! build_result() {! result=$(tr '[a-z]' '[A-Z]' <<<"$WERCKER_RESULT")! if [ "$WERCKER_RESULT" = "passed" ]; then! echo "$result"! else! echo "$result"! fi! }

Slide 19

Slide 19 text

UFTUUFTU@IFMQFSCBTI

Slide 20

Slide 20 text

UFTUUFTU@IFMQFSCBTI export PATH="$BATS_TEST_DIRNAME/..:$PATH"! ! if [ ! -n "$WERCKER" ]; then! export WERCKER_GIT_DOMAIN="github.com"! export WERCKER_GIT_OWNER="1syo"! export WERCKER_GIT_REPOSITORY="wercker-step-idobata-notify"! export WERCKER_GIT_BRANCH="master"! export WERCKER_GIT_COMMIT="aff2f780d59346c0386d59db6aac62e02be2005a"! export WERCKER_STARTED_BY="TAKAHASHI Kazunari"! export WERCKER_APPLICATION_ID="5253e1053673929130009361"! export WERCKER_APPLICATION_NAME="wercker-step-idobata-notify"! export WERCKER_APPLICATION_OWNER_NAME="1syo"! export WERCKER_APPLICATION_URL=\! ! ! ! ”https://app.wercker.com/#applications/5253e1053673929130009361"! export WERCKER_STEP_ROOT="."! export WERCKER_STEP_TEMP=$BATS_TMPDIR! fi

Slide 21

Slide 21 text

UFTUUFTU@IFMQFSCBTI success() {! echo $1! }! ! fail() {! echo $1! exit 1! }! ! warn() {! echo $1! }! ! export -f success! export -f fail! export -f warn

Slide 22

Slide 22 text

%FWDFOUFS &OWJSPONFOU7BSJBCMFT 8SJUJOHPVUQVU 1SFEFpOE7BSJBCMFT

Slide 23

Slide 23 text

UFTUUFTU@IFMQFSCBTI stub() {! local cmd=$1! local ret=$2! eval "$(echo -e "${cmd}() {\n echo $ret\n}")"! export -f ${cmd}! }! ! unstub() {! local cmd=$1! unset -f "$cmd"! }

Slide 24

Slide 24 text

TUVC ୈҰҾ਺ʹTUVC͍ͨ͠ίϚϯυ ୈೋҾ਺ʹίϚϯυͷ࣮ߦ݁Ռ TUVCDVSM

Slide 25

Slide 25 text

UFTUSVOCBUT

Slide 26

Slide 26 text

UFTUSVOCBUT #!/usr/bin/env bats! load test_helper! ! @test "Token undefined" {! WERCKER_IDOBATA_NOTIFY_TOKEN="" \! WERCKER_STEP_ROOT="." \! run run.sh! ! [ "$status" = "0" ]! [ "$output" = "Please specify token property." ]! }

Slide 27

Slide 27 text

ςετͷߏ੒ ධՁ͍ͨ͠؀ڥม਺͸FYQPSU͠ͳ͍ TUBUVTʹऴྃίʔυ PVUQVUʹඪ४ग़ྗ͔ඪ४Τϥʔ

Slide 28

Slide 28 text

UFTUSVOCBUT @test "Send a message" {! stub curl 200! ! WERCKER_IDOBATA_NOTIFY_TOKEN=token \! WERCKER_BUILD_URL="http://example.com/build/1" \! WERCKER_BUILD_ID=1 \! WERCKER_RESULT="passed" \! WERCKER_STEP_ROOT="." \! CI=true \! run run.sh! ! [ "$status" = "0" ]! [ "$output" = "Finished successfully!" ]! unstub curl! }

Slide 29

Slide 29 text

UFTUSVOCBUT @test "Can not send a message" {! echo "Error" > "$WERCKER_STEP_TEMP/result.txt"! stub curl 500! ! WERCKER_IDOBATA_NOTIFY_TOKEN=token \! WERCKER_RESULT="passed" \! WERCKER_STEP_ROOT="." \! CI=true \! run run.sh! ! [ "$status" = "0" ]! [ "${lines[0]}" = "Error" ]! [ "${lines[1]}" = "Finished unsuccessfully." ]! unstub curl! ! rm "$WERCKER_STEP_TEMP/result.txt"! }

Slide 30

Slide 30 text

CBUTUFTU 㾎5PLFOVOEFpOFE 㾎/PUJGZTLJQ 㾎#VJME1BTTFE 㾎%FQMPZQBTTFE 㾎#VJMEGBJMVSF 㾎%FQMPZGBJMVSF 㾎5PLFOVOEFpOFE 㾎4FOEBNFTTBHF 㾎$BOOPUTFOEB NFTTBHF ! UFTUT GBJMVSFT

Slide 31

Slide 31 text

ײ૝ લఏ৚݅ΛίʔυʹͰ͖ͨ ׳ΕΔ·Ͱ͕͔͔࣌ؒͬͨ 4IFMM4DSJQUྗऑ͍ TUVC໰୊͕ະղܾ ݱঢ়ͩͱ3VCZͰ΍ͬͨ΄͏ָ͕

Slide 32

Slide 32 text

-FU`TXSJUJOH XSFDLFSQMVHJO XJUICBUT