Closed4

Cloudflare WorkersのPreview URLsをGitHub Actions経由でPR上に投稿してみる

yamanoku / やまのくyamanoku / やまのく

表題の通りのことをやろうとしてみて試行錯誤してみたという感じです。

https://github.com/cloudflare/wrangler-action/issues/302

wrangler-actionsで該当のコマンドがまだ対応してなさそうなので、Claudeくんに相談しつつゴリゴリ作りました。

name: Cloudflare Workers

jobs:
  deploy:
    runs-on: ubuntu-latest

    strategy:
        matrix:
          node-version: [latest]

    permissions:
      contents: read
      deployments: write
      pull-requests: write

    steps:
      - name: Checkout
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
        with:
          node-version: ${{ matrix.node-version }}
      - name: Build
        run: |
          npm ci
          npm run build
      - name: Deploy to Cloudflare Workers
        id: deploy-workers
        uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          command: versions upload --message "Deployed pages by GitHub Actions branch ${{ github.ref_name }}"
      - name: Extract Preview URL
        env:
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
        run: |
          # 最新のバージョンIDを取得
          full_version_id=$(npx wrangler versions list --json | jq -r 'sort_by(.number) | reverse | .[0].id')
          # ハイフンの前の部分だけを取得
          version_id=$(echo "$full_version_id" | cut -d'-' -f1)
          # Preview URLを構築
          preview_url="https://${version_id}-birthday.yamanoku.workers.dev"
          echo "preview_url=$preview_url" >> $GITHUB_OUTPUT
          echo "Preview URL: $preview_url"
      - name: Create comment file
        run: |
          cat  << EOF > comment.md
          ## 🚀 Deployed to: ${{ steps.extract-url.outputs.preview_url }}
          EOF
      - name: Create PR comment
        run: 'gh pr comment ${{ github.event.number }} --body-file comment.md'
        env:
          GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'

Actionsが成功するとPR上に以下コメントが出るようになる。

yamanoku / やまのくyamanoku / やまのく

Deploy to Cloudflare Workersまでは既存のやり方通りで以下がプレビューURLを取得する仕組み

  1. wrangler versions list で最新のデプロイバージョン一覧をリストで取得してくる
  2. リストをJSON形式にする
  3. バージョンが一番大きいもののidを取得する
  4. idの形式がUUIDのAAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE形式になり、最初のAAAAAAAAを取得するようにする
  5. ${AAAAAAAA}-{product_name}.{user-id}.workers.devの形式になるようにする(これが最新デプロイのプレビューURLとなる)
  6. comment.mdにその内容を出力する
  7. gh pr comment ${{ github.event.number }} --body-file comment.md でPRにコメントするようにする
    • permissionsにpull-requests: writeを追加しないといけない
このスクラップは9日前にクローズされました