diff --git a/.github/workflows/frontend-bundle-report-comment.yml b/.github/workflows/frontend-bundle-report-comment.yml index 29bc00a5f4..8f3f715023 100644 --- a/.github/workflows/frontend-bundle-report-comment.yml +++ b/.github/workflows/frontend-bundle-report-comment.yml @@ -104,6 +104,9 @@ jobs: }); const report = artifacts.find((artifact) => artifact.name === artifactName && !artifact.expired); if (report) return { done: true, run }; + + core.info(`Frontend bundle report run ${run.id} did not produce ${artifactName}.`); + return { done: true, run: null }; } return { done: false, run: null }; @@ -126,8 +129,30 @@ jobs: core.warning(`Timed out waiting for ${artifactName} from ${workflow_id} for ${headSha}.`); - - name: Download bundle report from workflow_run + - name: Find bundle report artifact if: github.event_name == 'workflow_run' + id: find-report-artifact + uses: actions/github-script@v9 + with: + script: | + const artifactName = 'frontend-bundle-report'; + const { owner, repo } = context.repo; + const artifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts, { + owner, + repo, + run_id: context.payload.workflow_run.id, + per_page: 100, + }); + const report = artifacts.find((artifact) => artifact.name === artifactName && !artifact.expired); + if (report) { + core.setOutput('exists', 'true'); + } else { + core.info(`Workflow run ${context.payload.workflow_run.id} did not produce ${artifactName}.`); + core.setOutput('exists', 'false'); + } + + - name: Download bundle report from workflow_run + if: github.event_name == 'workflow_run' && steps.find-report-artifact.outputs.exists == 'true' uses: actions/download-artifact@v8 with: name: frontend-bundle-report @@ -147,7 +172,7 @@ jobs: run-id: ${{ steps.find-report-run.outputs.run-id }} - name: Comment on pull request - if: github.event_name == 'workflow_run' || steps.find-report-run.outputs.run-id != '' + if: (github.event_name == 'workflow_run' && steps.find-report-artifact.outputs.exists == 'true') || steps.find-report-run.outputs.run-id != '' uses: actions/github-script@v9 with: github-token: ${{ secrets.FRONTEND_BUNDLE_REPORT_COMMENT_TOKEN || secrets.FRONTEND_JS_SIZE_COMMENT_TOKEN || secrets.FRONTEND_BUNDLE_VISUALIZER_COMMENT_TOKEN || github.token }} diff --git a/.github/workflows/frontend-bundle-report.yml b/.github/workflows/frontend-bundle-report.yml index 7b0f70451e..55d52b314c 100644 --- a/.github/workflows/frontend-bundle-report.yml +++ b/.github/workflows/frontend-bundle-report.yml @@ -56,21 +56,25 @@ jobs: path: after submodules: true - - name: Backport visualizer tooling to base if needed + - name: Check base visualizer support + id: check-base-visualizer shell: bash run: | - if ! grep -q 'FRONTEND_BUNDLE_VISUALIZER' before/packages/frontend/vite.config.ts; then - cp after/packages/frontend/package.json before/packages/frontend/package.json - cp after/packages/frontend/vite.config.ts before/packages/frontend/vite.config.ts - cp after/pnpm-lock.yaml before/pnpm-lock.yaml + if grep -q 'FRONTEND_BUNDLE_VISUALIZER' before/packages/frontend/vite.config.ts; then + echo 'supported=true' >> "$GITHUB_OUTPUT" + else + echo 'supported=false' >> "$GITHUB_OUTPUT" + echo 'Base commit does not support frontend bundle visualizer. Skipping frontend bundle report.' >> "$GITHUB_STEP_SUMMARY" fi - name: Setup pnpm + if: steps.check-base-visualizer.outputs.supported == 'true' uses: pnpm/action-setup@v6.0.3 with: package_json_file: after/package.json - name: Setup Node.js + if: steps.check-base-visualizer.outputs.supported == 'true' uses: actions/setup-node@v6.4.0 with: node-version-file: after/.node-version @@ -80,17 +84,21 @@ jobs: after/pnpm-lock.yaml - name: Install dependencies for base + if: steps.check-base-visualizer.outputs.supported == 'true' working-directory: before run: pnpm i --frozen-lockfile - name: Build frontend dependencies for base + if: steps.check-base-visualizer.outputs.supported == 'true' working-directory: before run: pnpm --filter "frontend^..." run build - name: Prepare report output + if: steps.check-base-visualizer.outputs.supported == 'true' run: mkdir -p "$RUNNER_TEMP/frontend-bundle-report" - name: Build frontend report for base + if: steps.check-base-visualizer.outputs.supported == 'true' working-directory: before env: FRONTEND_BUNDLE_VISUALIZER: 'true' @@ -99,14 +107,17 @@ jobs: run: pnpm --filter frontend run build - name: Install dependencies for pull request + if: steps.check-base-visualizer.outputs.supported == 'true' working-directory: after run: pnpm i --frozen-lockfile - name: Build frontend dependencies for pull request + if: steps.check-base-visualizer.outputs.supported == 'true' working-directory: after run: pnpm --filter "frontend^..." run build - name: Build frontend report for pull request + if: steps.check-base-visualizer.outputs.supported == 'true' working-directory: after env: FRONTEND_BUNDLE_VISUALIZER: 'true' @@ -115,6 +126,7 @@ jobs: run: pnpm --filter frontend run build - name: Generate report markdown + if: steps.check-base-visualizer.outputs.supported == 'true' shell: bash env: BASE_SHA: ${{ github.event.pull_request.base.sha }} @@ -130,6 +142,7 @@ jobs: printf '%s\n' "${{ github.event.pull_request.html_url }}" > "$REPORT_DIR/pr-url.txt" - name: Check report + if: steps.check-base-visualizer.outputs.supported == 'true' run: | REPORT_DIR="$RUNNER_TEMP/frontend-bundle-report" test -s "$REPORT_DIR/before-stats.json" @@ -141,6 +154,7 @@ jobs: cat "$REPORT_DIR/frontend-bundle-visualizer-report.md" >> "$GITHUB_STEP_SUMMARY" - name: Upload bundle report + if: steps.check-base-visualizer.outputs.supported == 'true' uses: actions/upload-artifact@v7 with: name: frontend-bundle-report