Closed7

lighthouse-ciを、PRごとに作成されるVercelのPreview環境で実行できないか試す

Hirotaka MiyagiHirotaka Miyagi

背景

https://github.com/MH4GF/log.mh4gf.dev/blob/936302d341112f6787d511da70a061020c0d89c8/.github/workflows/lighthouse-ci.yml
今までは上記のようにGitHub Actions上でyarn build を実行した上でlighthouse-ciを実施していたが、以下の問題が気になっていた。

  • Vercelのデプロイで一度ビルドプロセスを挟んでいるためビルドが重複している
  • ビルドに必要な環境変数をVercelとGitHub Actions両方に用意するのが手間であり、秘匿情報を置く場所を増やしたくない

lighthouse-ciはURLに対しても実施できるはずなので、VercelのPreview環境に対して実施できれば上記の問題は取り除けるのではと考えた。

Hirotaka MiyagiHirotaka Miyagi

理想のプロセス

  1. VercelのPreview環境へデプロイ
  2. そのデプロイの完了をフックにlighthouse-ciを実行、アサーション
Hirotaka MiyagiHirotaka Miyagi

まずlighthouse-ciがURLに対して実行できることを確かめる。
ドキュメントを見るとurlオプションに複数のURLを渡すことができる
https://github.com/GoogleChrome/lighthouse-ci/blob/main/docs/configuration.md#url

❯ yarn lhci collect --url https://log.mh4gf.dev
yarn run v1.22.11
warning ../../../../package.json: No license field
$ lhci autorun collect --url https://log.mh4gf.dev
✅  .lighthouseci/ directory writable
✅  Configuration file found
✅  Chrome installation found
⚠️   GitHub token not set
Healthcheck passed!

Running Lighthouse 3 time(s) on https://log.mh4gf.dev
Run #1...done.
Run #2...done.
Run #3...done.
Done running Lighthouse!

Uploading median LHR of https://log.mh4gf.dev/...success!
Open the report at https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/xxxxxxx.report.html
No GitHub token set, skipping GitHub status check.

Done running autorun.
✨  Done in 55.30s.

良さそう。GitHub Actionsの実行時にコマンドのオプションとして渡せれば良さそうだ。

Hirotaka MiyagiHirotaka Miyagi

https://github.com/MH4GF/log.mh4gf.dev/commit/1ec01307ef47e56bcbffb68989909493d5b80ee7

こんな感じで行けるのではと思ったけど、直前のsetup–nodeでエラーが出る

Run actions/setup-node@v3.2.0
Found in cache @ /opt/hostedtoolcache/node/14.19.3/x64
/usr/local/bin/yarn --version
1.22.19
/usr/local/bin/yarn cache dir
/home/runner/.cache/yarn/v6
Error: Cache service responded with 403

https://github.com/MH4GF/log.mh4gf.dev/runs/7187938857?check_suite_focus=true

Hirotaka MiyagiHirotaka Miyagi

動いた。最終的なyamlがこちら

name: lighthouce-ci
on: deployment_status

jobs:
  lhci:
    if: |
      github.event.deployment_status.state == 'success' &&
      github.event.deployment_status.environment == 'Preview'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}

      - name: run Lighthouse CI
        run: |
          npx -p @lhci/cli lhci collect --url ${{ github.event.deployment_status.target_url }}
        env:
          LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
このスクラップは2022/07/14にクローズされました