Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub Actionsのカスタムアクションを作成してMarketplaceで公開した話

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for yorifuji yorifuji
November 29, 2023

GitHub Actionsのカスタムアクションを作成してMarketplaceで公開した話

Avatar for yorifuji

yorifuji

November 29, 2023
Tweet

More Decks by yorifuji

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ • YORIFUJI MITSUNORI • @yorifuji on X / GitHub

    / Zenn • ۚ༥ܥελʔτΞοϓͷiOSΤϯδχΞ • ݸਓ޲͚౤ࢿΞϓϦʢSwiftʣ΍ۚ༥ػؔ޲͚ͷۀ຿ΞϓϦʢFlutterʣͷ։ൃ • લ৬͸௨৴ձࣾͷSIerͰB2BαʔϏεͷ։ൃͳͲ͍Ζ͍Ζʢ10೥ʙʣ • Flutterྺ͸2೥ఔ౓ɺFlutterେֶ͸1೥΄Ͳલʹೖձ -> Ұ౓ୀձͯ͠࠶౓Join • #ڞಉ։ൃ14_sansen ʹࢀઓͯ͠·͢
  2. ֤ࣾͷCIαʔϏεͷಛ௃ʢݸਓͷײ૝ʣ • Bitrise • ࿝ฮɺ҆ఆ͍ͯͯ͠ރΕ͍ͯΔɺAndroid΍iOSωΠςΟϒͷ஌͕ࣝ׆͔ͤΔ • Codemagic • ޙൃɺFlutterʹಛԽͯ͠ΔʢFlutter SDK͕ΠϯετʔϧࡁΈʣɺ͕ҙ֎ͱ͕݀͋ΔʢރΕ͍ͯͳ͍ʣ

    • GitHub Actions • ΦʔϧϚΠςΟɺpublicϦϙδτϦͰͷར༻͸ແྉɺGitHubͱͷ࿈ܞ͕ڧΈ • Xcode Cloud • Apple७ਖ਼CIɺূ໌ॻ؅ཧ͕ෆཁɺXcode࿈ܞɺ͍҆ɺFlutterʹ͸ෆ޲͖
  3. GitHub ActionsͰ fl utter testΛ ࣮ߦ͢ΔϫʔΫϑϩʔͷྫ ʢyamlϑΝΠϧʣ name: check on:

    pull_request permissions: contents: read jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: subosito/flutter-action@v2 - run: flutter pub get - run: flutter test
  4. ࠓ೔࿩͢ͷ͸ϫʔΫϑϩʔͰ ར༻͢ΔΞΫγϣϯͷํ name: check on: pull_request permissions: contents: read jobs:

    test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: subosito/flutter-action@v2 - run: flutter pub get - run: flutter test
  5. Flutterͷ੩తղੳ • VSCode΍ fl utter analyzeίϚϯυͰग़ྗ͞ΕΔίϨ • Error / Warning

    / Info ͷ3Ϩϕϧ • ඪ४Ͱ͸ fl utter_lintsʹఆٛ͞Εͨϧʔϧʹج͍ͮͯղੳ • pedantic_mono΍very_good_analysis͕͓͢͢Ί
  6. ࢖͍ํ͸stepʹ௥Ճ͢Δ ͚ͩ name: flutter-analyze-commenter example on: pull_request permissions: contents: read

    pull-requests: write jobs: flutter-analyze: runs-on: ubuntu-latest steps: ... - run: flutter analyze --write=flutter_analyze.log - uses: yorifuji/flutter-analyze-commenter@v1 if: ${{ !cancelled() }} with: analyze_log: flutter_analyze.log
  7. GitHub Marketplace • GitHubެࣜɾOSSɾݸਓ͕࡞੒ͨ͠GitHub Apps΍ΞΫγϣϯ͕ެ։͞ Ε͍ͯΔ • ΞΫγϣϯͰݕࡧ͢Δͱ 20,940 results

    • ඞཁͳ΋ͷ͸େମ͋Δ͕⭐͕গͳ͍ϚΠφʔͳActionΛར༻͢Δͱ͖͸ ηΩϡϦςΟϦεΫͳͲʹ஫ҙ͕ඞཁ
  8. ࣗ࡞ͷΞΫγϣϯΛMarketplaceʹొ࿥͢Δखॱ • खॱ • GitHubʹpublic repositoryΛ࡞੒ • ΞΫγϣϯͷఆٛΛॻ͍ͨaction.ymlΛ࡞੒ • ΧελϜΞΫγϣϯͷ಺༰Λ࣮૷

    • GitHub ্ͰReleaseΛ࡞੒ͯ͠ެ։ • ৄ͍͠खॱ͸ͪ͜Β • https://docs.github.com/ja/actions/creating-actions/about-custom-actions • ॳճʹར༻ن໿΁ͷಉҙ͕ඞཁ • https://docs.github.com/en/site-policy/github-terms/github-marketplace-developer-agreement
  9. ࣮ࡍͷaction.yml ͷྫ ࠨɿΧελϜΞΫγϣϯͷఆٛɺӈɿCIͰݺͼग़͢ίʔυͷྫ name: "Flutter Analyze Commenter" author: "yorifuji" inputs:

    analyze_log: description: "Path to the Flutter analyze log" required: true verbose: description: "Enable verbose logging" default: false runs: using: composite steps: - uses: actions/github-script@v7 env: ANALYZE_LOG: ${{ inputs.analyze_log }} VERBOSE: ${{ inputs.verbose }} with: script: | const analyzeLog = process.env.ANALYZE_LOG; ... jobs: flutter-analyze: runs-on: ubuntu-latest steps: ... - run: flutter analyze --write=flutter_analyze.log - uses: yorifuji/flutter-analyze-commenter@v1 with: analyze_log: flutter_analyze.log
  10. ΧελϜΞΫγϣϯͷ࣮૷ํ๏ • Docker ίϯςφʔ ΞΫγϣϯ • DockerΛ࢖࣮ͬͯߦ؀ڥΛύοέʔδԽ͢ΔͷͰඞཁͳπʔϧ΍ґଘؔ܎ΛίϯςφͰ؅ཧͰ͖ΔͷͰҰ؏ੑͱ৴པੑΛ୲ อ͠΍͍͢ • ͨͩ͠ݱঢ়͸Linuxʢubuntuʣ

    ͷϥϯφʔͰͷΈར༻Ͱ͖ΔʢmacOS΍Windows͸ར༻ෆՄʣ • JavaScript ΞΫγϣϯ • Node.jsΛ࢖ͬͯJavaScriptͷίʔυΛ࣮ߦ͢Δ • TypeScriptͰͷ։ൃ΋Մೳʢ࠷ऴతʹJavaScript͕ੜ੒Ͱ͖ΔͳΒͳΜͰ΋ྑ͍ʣɺෳࡶͳ࣮૷Λ͢ΔͳΒ͓͢͢Ί • ෳ߹ΞΫγϣϯʢComosite Actionʣ • ௨ৗͷGitHub ActionsͷJob͔ΒSetpͷҰ෦Λ੾Γग़ͨ͠Πϝʔδ • uses: ͕ར༻ՄೳͳͷͰطଘͷΞΫγϣϯ΋ར༻Ͱ͖Δ
  11. actions/github-script // hello world - uses: actions/github-script@v7 with: script: console.log('Hello,

    JavaScript') // use github rest api - uses: actions/github-script@v7 with: script: | github.rest.issues.get({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, }) // run separate file - uses: actions/github-script@v7 with: script: | const script = require('./path/to/script.js') console.log(script({github, context})) // in script.js module.exports = ({github, context}) => { return 'Hello, JavaScript' } • GitHub ActionsͰJavaScriptΛ࣮ߦ͢Δ ΞΫγϣϯ
  12. --writeΦϓγϣϯͰग़ྗ͞ΕΔ಺༰ͷྫ [error] A value of type 'int' can't be assigned

    to a variable of type 'String' (/Users/yorifuji/git/ flutter_analyze_commenter_ci/lib/main.dart:4:20) [warning] The value of the local variable 'x' isn't used (/Users/yorifuji/git/ flutter_analyze_commenter_ci/lib/main.dart:4:16) [info] Use 'const' for final variables initialized to a constant value (/Users/yorifuji/git/ flutter_analyze_commenter_ci/lib/main.dart:4:3)
  13. ࠓճͷΧελϜΞΫγϣϯͷ࣮૷ͷৄࡉ • GitHubͷPRʹରͯ͠ίϝϯτΛॻ͖ࠐΉ • GitHubʹ͸REST API͕༻ҙ͞Ε͍ͯͯGUIͰͰ͖Δ͜ͱ͸େମAPI͔Β΋Ͱ͖Δ • APIΛ࢖ͬͯPRͷίʔυͷࠩ෼ʢdiffʣΛऔಘͯ͠ɺ௥Ճ࡟আ͞ΕͨϑΝΠϧ໊΍ߦ൪߸Λऔ ಘ͢Δ •

    fl utter analyzeͷղੳ಺༰ͱdiffͷ಺༰ΛϑΝΠϧ໊ͱߦ൪߸Λݩʹಥ͖߹ΘͤΔͱPRͰࠞ ೖͨ͠ίʔυɾܯࠂͱϑΝΠϧ໊ɾߦ൪߸͕ಛఆͰ͖Δ • APIΛ࢖ͬͯPRͷ൪߸ɺϑΝΠϧ໊ɺߦ൪߸ɺϝοηʔδͳͲΛࢦఆͯ͠ॻ͖ࠐΈΛߦ • PRʹίϝϯτ͕൓ө͞ΕΔ
  14. ࠓճͷΧελϜΞΫγϣϯͷ࣮૷ͷৄࡉ • ݹ͘ͳͬͨίϝϯτͷ࡟আ • PRʹରͯ͠௥Ճʢमਖ਼ʣίϛοτͰ໰୊ͷ͋ͬͨίʔυ͕আڈ͞ΕΔΑ͏ͳέʔε • fl utter analyzeͷ݁Ռ͔Β౰֘Օॴͷग़ྗ͕ফ͑Δ •

    ίϝϯτΛ࡟আ͢Δ࢓༷ʹ͍ͯ͠Δ • APIΛ࢖ͬͯPRͷίϝϯτΛશ݅औಘͯ͠ɺ࠷৽ͷanalyzeͷ݁Ռͱ෇͖߹Θͤͯෆཁʹͳͬ ͨίϝϯτΛAPIܦ༝Ͱ࡟আ͍ͯ͠Δ • ਓ͕ؒॻ͖ࠐΜͩίϝϯτͱ۠ผ͢ΔͨΊʹ༧ΊΞΫγϣϯ͔ΒίϝϯτΛॻ͖ࠐΉࡍʹ ඇදࣔͷςΩετΛؚ·͍ͤͯΔʢ<!--- hogefuga --->ͷΑ͏ͳςΩετʣ
  15. ՝୊΍ࠓޙͷ༧ఆ • ར༻࣮੷͕গͳ͍ͷͰαΠυϓϩδΣΫτͳͲͰ࢖ͬͯΈ͍ͯͩ͘͞ʢόάใࠂ׻ܴͰ͢ʣ • ςετΛॻ͘ • Pure-JavaScript͔ΒTypeScriptʹҠߦ͍ͨ͠ • JavaScriptΞΫγϣϯʢnpmʣ΁ͷҠߦ •

    ݱঢ়͸ෳ߹ΞΫγϣϯʴJavaScriptͱ͍͏ߏ੒ • easyͰ͸͋Δ͕ن໛Λେ͖ͨ͘͠Γ֦ு͢Δࡍʹੜ࢈ੑ͕ྑ͘ͳ͍ • ΋͏ͪΐͬͱ໘ന͍͜ͱΛ͍ͨ͠ • ໰୊ͷ͋ΔίʔυΛAI͕ࣗಈతʹमਖ਼ʢఏҊʣͯ͘͠ΕΔͱخ͔ͬͨ͠Γ...ʁ
  16. ༨ஊɿ։ൃͨ͠Ϟνϕʔγϣϯ • ݩʑ͸Dangerͱ͍͏πʔϧΛ࢖͍ͬͯͨ • ϓϧϦΫΤετͷମࡋ΍಺༰ΛνΣοΫ͢Δπʔϧ • SwiftΞϓϦͳͲͰ΋࢖ΘΕ͍ͯͯ༗໊ͰރΕ͍ͯΔ • ҎԼͷ఺Ͱෆຬ͕͋ͬͨ •

    DangerΛಋೖ͢Δ໨తͷઆ໌͕ඞཁ • Ruby੡Ͱ࣮ߦ࣌ʹgemͷΠϯετʔϧ͕ඞཁ • ߴػೳ͚ͩͲFlutterͷ੩తղੳͷ໨తͰ͸ΦʔόʔεϖοΫ • ΧελϜΞΫγϣϯΛ࡞ͬͯOSSͱͯ͠ެ։ͯ͠Έ͔ͨͬͨ