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

GitHub上で構築するコードメトリクス計測基盤 / TECH STAND #9 GitHub

GitHub上で構築するコードメトリクス計測基盤 / TECH STAND #9 GitHub

https://standfm.connpass.com/event/256786/

GMOペパボではGitHub Enterprise Server を利用しています。
また、CI/CD基盤としてGitHub Actionsを活用してしています。
本発表ではGitHub上に構築したコードメトリクス計測基盤と、それを実現するために使用したGitHubやGitHub Actionsの機能について紹介します。

Links:
https://github.com/k1LoW/octocov
https://tech.pepabo.com/2022/01/06/four-keys-dashboard/
https://tech.pepabo.com/2022/04/25/code-metrics-dashboard/
https://recruit.pepabo.com/

Ken’ichiro Oyama

August 31, 2022
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. • ίʔυΧόϨοδ͸֤ϓϩάϥϛϯάݴޠͷςεςΟϯάϑϨʔϜϫʔΫ͸େ఍ܭ ଌɾग़ྗͰ͖Δ • ඪ४ग़ྗ • HTML • ͭ·ΓɺGitHub Actions্ͰCI؀ڥΛߏஙͯ͠ςετΛ࣮ߦ͍ͯ͠Διϑτ΢ΣΞͰ

    ͋Ε͹େମऔಘͰ͖Δ • ςετΛ࣮ߦ͍ͯ͠ΔςεςΟϯάϑϨʔϜϫʔΫͷΦϓγϣϯΛม͑Δ͚ͩ 6 ίʔυϝτϦΫε ྫ͑͹ίʔυΧόϨοδʢςετΧόϨοδʣ
  2. • https://github.com/k1LoW/octocov • ίʔυϝτϦΫεπʔϧ…ίʔυΧόϨοδɺCode to Test Ratioɺςετ࣮ߦ࣌ؒ • ଟ਺ͷϓϩάϥϛϯάݴޠͱɺओཁͳΧόϨοδϨϙʔτϑΥʔϚοτʹରԠ •

    GitHub Actionsͷactionͱͯ͠ίʔυϝτϦΫεΛूܭɺP/RίϝϯτɺϨϙʔτ • CLIπʔϧͱͯ͠ίʔυΧόϨοδΛूܭɻදࣔ • ΧόϨοδόοδੜ੒ octocov 10 10 octocov
  3. octocov • ༷ʑͳछྨͷΧόϨοδϑΥʔϚοτʹରԠ • Go coverage … Go • LCOV

    … ੲ͔Β͋ΔϑΥʔϚοτ • SimpleCov … Ruby • Clover … PHPUnit etc • Cobertura … Coverage.py etc • JaCoCo … Java Kotlin etc αϙʔτ͍ͯ͠ΔΧόϨοδϑΥʔϚοτ 11
  4. ίʔυϝτϦΫεͷܭଌ • ͨͬͨ3εςοϓ 1. ςεςΟϯάϑϨʔϜϫʔΫͰΧόϨοδϨϙʔτΛग़ྗ͢ΔΑ͏ʹWorkflowΛमਖ਼ • ֤ςεςΟϯάϑϨʔϜϫʔΫͷΦϓγϣϯΛมߋ͢Δ͚ͩ ɹɹgo test ./...

    -coverprofile=coverage.out -covermode=count 2. .octocov.yml ΛϓϩδΣΫτϧʔτʹઃஔ octocov init 3. k1LoW/octocov-action ΛΧόϨοδϨϙʔτग़ྗޙͷStepʹ௥Ճ octocovͷઃఆʢ୯ҰϦϙδτϦͰͷίʔυϝτϦΫεͷܭଌʣ 14
  5. ίʔυϝτϦΫεͷܭଌ ✓ CIͷඪ४ग़ྗʹग़ྗ͍ͯ͠Δ ✓ ΧόϨοδʹᮢ஋ΛܾΊͯᮢ஋ΛԼճͬͨ৔߹͸CIΛFAIL͍ͤͯ͞Δ • શͯͷϝτϦΫεͰᮢ஋ΛઃఆՄೳ ✓ ΧόϨοδܭଌ݁ՌΛPull Requestʹίϝϯτ͍ͯ͠Δ

    ✓ લճͷܭଌ݁Ռͱൺֱͨ݁͠Ռ΋ද͍ࣔͯ͠Δ • ϦϙδτϦͷArtifactʹܭଌ݁ՌΛอଘ͢Δ͜ͱͰલճܭଌ݁ՌΛऔಘՄೳ ✓ ܭଌ݁ՌΛ஝ੵ͍ͯ͠Δ • Artifactʹܭଌ݁ՌΛ஝ੵͰ͖Δʢͨͩɺ࠶ར༻͸͠ʹ͍͘ʣ GitHubͷ୯ҰϦϙδτϦ಺ʹดͨ͡ܗͰίʔυϝτϦΫεͷܭଌ͕Մೳ 18
  6. ίʔυϝτϦΫεͷܭଌ • monorepoʹରԠ • ͦΕͧΕͷίϯϙʔωϯτͰίʔυϝτϦΫεܭଌ͕Մೳ • ΧόϨοδϨϙʔτͷϚʔδ͕Մೳ • ରԠ͍ͯ͠ΔશͯͷΧόϨοδϑΥʔϚοτͷܭଌ݁ՌΛڞ௨ͷߏ଄Խσʔλʹม׵ՄೳͳͨΊ •

    ฒྻ࣮ߦͨ͠ςετΧόϨοδͷϚʔδ΋Մೳ • ҟͳΔϓϩάϥϛϯάݴޠͷςετΧόϨοδͷϚʔδ΋Մೳ • ಠཱͨ͠CLIπʔϧͱͯ͠ར༻Մೳ • ରԠ͍ͯ͠ΔΧόϨοδϑΥʔϚοτͰ͋Ε͹खݩͰίʔυΧόϨοδΛ֬ೝͰ͖Δ • ιʔείʔυͷΧόʔ͍ͯ͠Δߦͷ֬ೝ΋Մೳ • https://k1low.hatenablog.com/entry/2022/05/10/083000 ଞʹ΋octocovͰ͖Δ͜ͱ 19
  7. ίʔυϝτϦΫεͷ஝ੵ • ίʔυϝτϦΫε͸ͦͷίʔυͷϦϙδτϦʹϓϩμΫτͷϝτϦΫεͱͳΓ͏Δ • Four Keys΋ϓϩμΫτͷϝτϦΫε • Four KeysΛGitHub͔Βऔಘ͢ΔऔΓ૊Έʹ͍ͭͯ͸ https://tech.pepabo.com/

    2022/01/06/four-keys-dashboard/ Λੋඇ • ୯ҰϦϙδτϦͰͷܭଌͰ΋ྑ͍͕ɺϓϩδΣΫτ୯Ґɺ૊৫୯ҐͰΈΔͱݟ͑ͯ͘Δ ΋ͷ͕͋Δ • ࣌ܥྻʹϓϩοτ͢Δ͜ͱͰݟ͑ͯ͘Δ΋ͷ͕͋Δ ૊৫શମͰͷίʔυϝτϦΫεͷ஝ੵ 21
  8. ίʔυϝτϦΫεͷ஝ੵ • octocov͸ .octocov.yml ͷઃఆΛมߋ͢Δ͜ͱͰίʔυϝτϦΫεΛܭଌ͢ΔϞʔυ͔Βɺίʔ υϝτϦΫεσʔλΛऩू͢ΔϞʔυʢCentral modeʣʹಈ࡞Λ੾Γସ͑Δ͜ͱ͕Ͱ͖Δɻ • GitHub ActionsͰಈ͔͢૝ఆͰ࡞ΒΕ͍ͯΔ

    • Central modeͰͰ͖Δ͜ͱ • σʔλετΞ͔Β֤ϦϙδτϦͷ࠷৽ͷίʔυϝτϦΫεσʔλΛऔಘͯ͠ϩʔΧϧʹอ ଘ͢Δ • ඞཁͰ͋Ε͹ git push ΋͢Δ • ίʔυϝτϦΫεσʔλ͔ΒόοδΛੜ੒͢Δ • ࠷৽ͷίʔυϝτϦΫεͷ஋΍όοδURLΛऔಘͰ͖ΔMarkdownϖʔδʢΠϯσοΫ εʣΛ࡞੒͢Δ Central mode 23
  9. GitHub API • List repository languages • octocov init Ͱݴޠ༻ͷ

    .octocov.yml Λग़ྗ͢ΔͨΊͷϦϙδτϦͷओͱͳΔϓϩά ϥϛϯάݴޠಛఆͷͨΊػೳͷϑΥʔϧόοΫઌͱͯ͠࢖༻ • ݴޠಛఆػೳࣗମ͸·ͩGoͷಛఆ͔͠࡞͍ͬͯͳ͍ͷͰɺ࣮࣭͜ͷAPI͕ୟ͔ΕΔ GET /repos/{owner}/{repo}/languages 35
  10. GitHub API • List jobs for a workflow run •

    ςετ࣮ߦ࣌ؒͷऔಘͷͨΊʹ࢖༻ • ΧόϨοδϨϙʔτϑΝΠϧͷλΠϜελϯϓ͕ൣғ಺ʹؚ·ΕΔStepͷܦա࣌ؒ=ςετ ࣮ߦ࣌ؒͱ͍ͯ͠Δ • StepΛಛఆ͢ΔͨΊʹɺ·ͣ͸ݱࡏͷJob ID͕ඞཁ • ͔͠͠APIͰ࢖͏Job ID͸؀ڥม਺GTIHUB_JOBʹؚ·Ε͍ͯΔจࣈྻͰ͸ͳ͍ɻ਺ ࣈɻ • Job IDΛಛఆ͢ΔͨΊʹؤுͬͯୟ͍͍ͯΔAPI͕ίϨ • ؀ڥม਺GITHUB_JOB_ID͕ཉ͍͠!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! • https://github.com/actions/runner/issues/324 GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs 36
  11. GitHub API • Minimizes a comment on an Issue, Commit,

    Pull Request, or Gist. • ΧόϨοδϨϙʔτͷPull Request΁ͷίϝϯτ࣌ʹҎલͷίϝϯτΛӅͨ͢Ίʹ࢖ ༻ • ࣮͸REST API (v3)ʹ͸ͳ͍ػೳ • GraphQL APIʹ͋Δ • https://docs.github.com/en/graphql/reference/mutations#minimizecomment minimizeComment 37
  12. GitHub API • Download an artifact • σʔλετΞͱͯ͠ͷར༻ • ͔͠͠Upload

    an artifactͷAPI͸ެࣜϦϑΝϨϯεʹ͸هࡌ͕ͳ͍ • ͳͥʁ → Actions؀ڥҎ֎͔Β͸ୟ͚ͳ͍API͔ͩΒ 1. Actions؀ڥͰ͔͠ಘΒΕͳ͍؀ڥม਺ACTIONS_RUNTIME_URL΍GITHUB_RUN_ID Λ࢖ͬͯߏஙͨ͠URLʹArtifactͷΞοϓϩʔυ༻Ұ࣌URLΛϦΫΤετͯ͠ɺ 2. Actions؀ڥͰ͔͠ಘΒΕͳ͍؀ڥม਺ACTIONS_RUNTIME_TOKENΛೝূΩʔͱ͠ ͯɺҰ࣌URLʹରͯ͠Ξοϓϩʔυ • https://github.com/actions/toolkit ͷίʔυΛݩʹGoͰ࣮૷ • https://github.com/k1LoW/go-github-actions GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format} 38
  13. GitHub API • ྫ͑͹forkઌϦϙδτϦ͔ΒͷPull RequestΛτϦΨʔʹίʔυΧόϨοδΛܭଌ͠ ͯίϝϯτ͍͕ͨ͠Actionsͷݖݶ͕଍Γͳͯ͘ͰͰ͖ͳ͍ • 403 Resource not

    accessible by integration • ࣗ਎ʢಉҰuserʣͷଞͷϦϙδτϦ΁ͷwriteݖݶͱ͔… • Personal Access TokenΛSecretsʹొ࿥͢ΔҎ֎ͷํ๏Ͱ… GitHub Actions͕΋͍ͬͯΔ secrets.GITHUB_TOKEN ͷݖݶΛ͍͡Γ͍ͨ!!!!!!!! 44