Slide 1

Slide 1 text

GitHub composite actions 2024.3.13 YUMEMI.grow Mobile #11 Hiroyuki Kusu ( @hkusu_ )

Slide 2

Slide 2 text

About me

Slide 3

Slide 3 text

composite actions ?

Slide 4

Slide 4 text

composite actions ? • GitHub custom actions ͷ࡞Γํͷ1ͭ • ଞʹ͸ Docker container actions ͱ JavaScript actions ͕͋Δ • ෳ਺ͷ step Λ 1ͭͷ action ʹ·ͱΊΒΕΔ • ެ։͞Ε͍ͯΔطଘͷ action ΋ར༻Ͱ͖Δ • ීஈ GitHub Actions ͷϫʔΫϑϩʔͷ YAML Λॻ͘ײ֮Ͱ࡞ΕΔ • ϩδοΫ෦෼͸ओʹ Shell script Ͱॻ͘͜ͱʹͳΔ • େ͖ͳػೳͷ։ൃʹ͸޲͔ͳͦ͏ uses: actions/setup-java@v4 custom actions ͷར༻ྫ

Slide 5

Slide 5 text

name: "Setup Java - Gradle" description: "A GitHub Action that sets up a Java and Gradle environment." author: "YUMEMI Inc." branding: icon: "box" color: "blue" inputs: java-version: description: "Java version to use." required: false default: "17" // ... kotlin-compiler-report: description: "Whether to apply Kotlin compiler Problem Matchers." required: false default: "true" runs: using: "composite" steps: - name: Setup Java uses: actions/setup-java@v4 with: distribution: ${{ inputs.java-distribution }} java-version: ${{ inputs.java-version }} - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 with: cache-disabled: ${{ inputs.cache-disabled }} cache-read-only: ${{ inputs.cache-read-only }} gradle-home-cache-cleanup: ${{ inputs.gradle-home-cache-cleanup }} add-job-summary: ${{ inputs.gradle-build-report }} - name: Setup Problem Matchers if: inputs.kotlin-compiler-report != 'false' uses: yumemi-inc/problem-matchers/kotlin-gradle@v1 composite action ͷத਎ͷྫ https://github.com/yumemi-inc/setup-java-gradle action.yml ͱͯ͠ϦϙδτϦʹอଘ͢Ε͹ ผϦϙδτϦͷϫʔΫϑϩʔ͔Β uses Ͱ ར༻Ͱ͖ΔʢಉҰϦϙδτϦͷϫʔΫϑ ϩʔ͔Βར༻͢Δͷ΋Մʣ

Slide 6

Slide 6 text

͜Ε·Ͱࢲ͕࡞੒ͨ͠ composite action

Slide 7

Slide 7 text

͜Ε·Ͱࢲ͕࡞੒ͨ͠ composite action • Ұൠެ։Ͱ͖Δ΋ͷ͸ࣾͷ public ϦϙδτϦʹஔ͍ͯ͋Δ • ಺੡Խࢧԉͱ͍͏ۀ຿ͷੑ্࣭ɺࣾ֎ͷ GitHub organization Ͱ΋ར༻ Ͱ͖ΔΑ͏ʹ • GitHub Marketplace Ͱ΋ެ։ • Marketplace Ͱެ։͠ͳͯ͘΋ར༻Ͱ͖Δ͕ɺͰ͖Δ͚ͩ෯޿͍ਓʹ ࢖ͬͯ΋Β͏ҝʹ • ୯७ʹ OSS తͳߩݙͷ໨త • ͱ͸͍͑Ұൠެ։Ͱ͖ͳ͍΋ͷ΍ࣾ಺͚ͩͰ࢖͏΋ͷ͸ private ϦϙδτϦͰ

Slide 8

Slide 8 text

Gradle Dependency Diff Report https://github.com/yumemi-inc/gradle-dependency-diff-report

Slide 9

Slide 9 text

Gradle Dependency Diff Report • 1ͭͷϥΠϒϥϦͷόʔδϣϯΛม͑ͨΒҶͮΔࣜʹผͷϥΠϒϥϦͷόʔ δϣϯ΋มΘͬͯ͠·͏ • Renovate ΍ Dependabot ͸લऀͷ1ͭͷϥΠϒϥϦͷ͜ͱҎ֎͸ڭ͑ͯ ͘Εͳ͍ • ͳͷͰϥΠϒϥϦͷґଘؔ܎ͷมԽΛ Job Summaries ΁Ϩϙʔτ͢Δ action Λ࡞ͬͨ • ϨϏϡʔ࣌ʹ׆༻

Slide 10

Slide 10 text

Comment Pull Request https://github.com/yumemi-inc/comment-pull-request

Slide 11

Slide 11 text

Comment Pull Request • ϓϧϦΫ΁ίϝϯτΛ౤ߘ͢Δ action • աڈͷίϝϯτΛফͨ͠ΓӅͨ͠ΓͰ͖Δ • ςετ݁ՌͷϨϙʔτ౤ߘͳͲɺ࠷ޙͷίϛοτʹର͢Δ CI ͷ݁ՌͷΈ ʹؔ৺͕͋ΔΑ͏ͳέʔεͰར༻

Slide 12

Slide 12 text

Changed Files https://github.com/yumemi-inc/changed- fi les

Slide 13

Slide 13 text

• ࢦఆͨ͠ύεύλʔϯͷϑΝΠϧ͕ϓϧϦΫ΍೚ҙͷίϛοτͷࠩ෼ʹؚ· ΕΔ͔൑ఆ͢Δ action • step ୯Ґͷॲཧͷ෼ذ΍εΩοϓ͕ՄೳͱͳΔ • ಛʹϞϊϨϙ΍ɺϚϧνϓϥοτϑΥʔϜܥͷϦϙδτϦͰ༗༻ʁ Changed Files

Slide 14

Slide 14 text

Path Filter https://github.com/yumemi-inc/path- fi lter

Slide 15

Slide 15 text

Path Filter • ઌఔͷ Changed Files ͸ɺGitHub API Λར༻͍ͯ͠Δ͜ͱʹΑΔ੍໿͕ ͋ͬͨʢREADME ʹ΋ͦͷࢫΛهࡌࡁΈʣͷͰɺগ͠ػೳΛল͖ͭͭ GitHub API Λར༻͠ͳ͍ํࣜͰ࣮૷͠௚ͨ͠ • ͍ͣΕল͍ͨػೳΛऔΓࠐΜͰɺ͜ͷ Path Filter ʹ̍ຊԽ͢Δ༧ఆ

Slide 16

Slide 16 text

Problem Matchers for Kotlin - Gradle https://github.com/yumemi-inc/problem-matchers

Slide 17

Slide 17 text

Problem Matchers for Kotlin - Gradle • Kotlin ίϯύΠϧ࣌ͷϫʔχϯά/ΤϥʔΛ annotation ͱͯ͠ϓϧϦΫͷม ߋϑΝΠϧλϒͱ Job Summaries ΁දࣔ • Kotlin 1.7 Ҏલͱ 1.8 Ҏ߱ͷ྆ϑΥʔϚοτʹରԠ • GitHub ͷ੍໿ʹΑΓɺannotation ͷ਺ʹ͸ݶΓ͕͋Δ

Slide 18

Slide 18 text

Setup Java - Gradle https://github.com/yumemi-inc/setup-java-gradle

Slide 19

Slide 19 text

Setup Java - Gradle • Gradle λεΫ࣮ߦલͷ֤छηοτΞοϓΛ 1 step Ͱॻ͚ΔΑ͏ʹͨ͠΋ͷ • ಺෦Ͱ࢖༻͍ͯ͠Δ gradle/gradle-build-action Λͦͷ··Կ΋ߟ͑ͣ࢖͏ ͱσϑΥϧτϒϥϯνʹແҙຯʹΩϟογϡ͕େྔʹ࡞੒͞ΕͨΓɺٯʹϓ ϧϦΫͰΩϟογϡ͕Ұ੾ hit ͠ͳ͔ͬͨΓ͢ΔͷͰɺΩϟγϡ࡞੒͸جຊ ͸ off ͷܗͰϥοϓ͠ɺREADME ͰΩϟγϡͷӡ༻ʹ͍ͭͯิ଍ͨ͠

Slide 20

Slide 20 text

ॴײ΍ Tips ͳͲ

Slide 21

Slide 21 text

ॴײ΍ Tips ͳͲ • σϑΥϧτͰར༻Ͱ͖Δ jq ΍ GitHub CLI ͕ศར • GitHub CLI ͸ GraphQL ΋ୟ͚Δ • Ҏલ͸؆୯ͳ custom action Ͱ΋ JavaScriptʢJavaScript actionsʣͰ࡞ͬ ͍͕ͯͨɺఆظతʹ Node.js ͷόʔδϣϯ΍੬ऑੑͷ͋ΔϥΠϒϥϦͷߋ ৽͕ඞཁͩͬͨͷͰɺͦͷख͕ؒͳ͍ • ͨͩෳࡶͳ΋ͷΛ࡞Ζ͏ͱ͢Δͱ Shell script ྗ͕໰ΘΕΔ͔΋ʁ

Slide 22

Slide 22 text

JavaScript ΍طଘͷ npm ͷύοέʔδΛ࢖͍͍ͨ৔߹ • actions/github-script action Λར༻ͯ͠ JavaScript ͕ॻ͚Δ • npm ͷύοέʔδΛར༻͢Δྫ͸ɺઌ΄Ͳ঺հͨ͠ Path Filterʢyumemi- inc/path- fi lterʣͷίʔυதʹ͋Γ·͢ • @vercel/ncc Ͱόϯυϧͨ͠΋ͷΛ require() ͰಡΈࠐΜͰ͍Δ

Slide 23

Slide 23 text

̏ͭͷ runner OS ͷߟྀ • GitHub-hosted runner ͷ OS ͸̏ͭʢUbuntuɺmacOSɺWindowsʣ͋Δ • Shell script Λ Bash Ͱॻ͘ݶΓ͸ɺಉ͡ॻ͖ํͰ͍͍ͩͨΑ͍͕ɺԼهͷ ҧ͍͕͋Δ͜ͱʹ஫ҙ • Windows OS ͷվߦίʔυ • OS ʹΑͬͯଘࡏ͠ͳ͍ɾڍಈ͕ҟͳΔίϚϯυ͕͋Δ • ։ൃ࣌ͷ CI Λ̏ͭͷ OS Ͱճ͢ͱΑ͍ • public ϦϙδτϦͳΒແྉͳͷͰ࣌ؒΛؾʹͤͣճͤΔ

Slide 24

Slide 24 text

Thank you ! @hkusu_ ͥͻօ͞Μ΋ศརͳ΋ͷΛ࡞ͬͯڞ༗͍ͯͩ̇͘͠͞