name: Frontend bundle diagnostics (inspect) on: pull_request: types: - opened - synchronize - reopened - ready_for_review paths: - packages/frontend/** - packages/frontend-shared/** - packages/frontend-builder/** - packages/i18n/** - packages/icons-subsetter/** - packages/misskey-js/** - packages/misskey-reversi/** - packages/misskey-bubble-game/** - package.json - pnpm-lock.yaml - pnpm-workspace.yaml - .node-version - packages-private/diagnostics-shared/** - packages-private/diagnostics-frontend-bundle/** - .github/workflows/frontend-bundle-diagnostics.inspect.yml - .github/workflows/frontend-bundle-diagnostics.comment.yml permissions: contents: read pull-requests: read concurrency: group: frontend-bundle-diagnostics-inspect-${{ github.event.pull_request.number }} cancel-in-progress: true jobs: report: name: Build frontend bundle report runs-on: ubuntu-latest steps: - name: Checkout base uses: actions/checkout@v6.0.3 with: repository: ${{ github.event.pull_request.base.repo.full_name }} ref: ${{ github.event.pull_request.base.sha }} path: before submodules: true - name: Checkout pull request uses: actions/checkout@v6.0.3 with: repository: ${{ github.event.pull_request.head.repo.full_name }} ref: ${{ github.event.pull_request.head.sha }} path: after submodules: true - name: Setup pnpm uses: pnpm/action-setup@v6.0.9 with: package_json_file: after/package.json - name: Setup Node.js uses: actions/setup-node@v6.4.0 with: node-version-file: after/.node-version cache: pnpm cache-dependency-path: | before/pnpm-lock.yaml after/pnpm-lock.yaml - name: Install dependencies for base working-directory: before run: pnpm i --frozen-lockfile - name: Build frontend dependencies for base working-directory: before run: pnpm --filter "frontend^..." run build - name: Prepare report output run: mkdir -p "$RUNNER_TEMP/frontend-bundle-report" - name: Build frontend report for base working-directory: before env: FRONTEND_BUNDLE_VISUALIZER: 'true' FRONTEND_BUNDLE_VISUALIZER_FILE: ${{ runner.temp }}/frontend-bundle-report/before-stats.json run: pnpm --filter frontend run build - name: Install dependencies for pull request working-directory: after run: pnpm i --frozen-lockfile - name: Build frontend dependencies for pull request working-directory: after run: pnpm --filter "frontend^..." run build - name: Build frontend report for pull request working-directory: after env: FRONTEND_BUNDLE_VISUALIZER: 'true' FRONTEND_BUNDLE_VISUALIZER_FILE: ${{ runner.temp }}/frontend-bundle-report/after-stats.json FRONTEND_BUNDLE_VISUALIZER_HTML_FILE: ${{ runner.temp }}/frontend-bundle-report/frontend-bundle-visualizer.html run: pnpm --filter frontend run build - name: Upload bundle visualizer id: upload-bundle-visualizer uses: actions/upload-artifact@v7 with: name: frontend-bundle-visualizer path: ${{ runner.temp }}/frontend-bundle-report/frontend-bundle-visualizer.html if-no-files-found: error archive: false retention-days: 7 - name: Generate report markdown shell: bash working-directory: after env: BASE_SHA: ${{ github.event.pull_request.base.sha }} HEAD_SHA: ${{ github.event.pull_request.head.sha }} PR_NUMBER: ${{ github.event.pull_request.number }} FRONTEND_BUNDLE_REPORT_ARTIFACT_URL: ${{ steps.upload-bundle-visualizer.outputs.artifact-url }} run: | REPORT_DIR="$RUNNER_TEMP/frontend-bundle-report" pnpm --filter diagnostics-frontend-bundle run render-md \ "$GITHUB_WORKSPACE/before" "$GITHUB_WORKSPACE/after" \ "$REPORT_DIR/before-stats.json" "$REPORT_DIR/after-stats.json" \ "$REPORT_DIR/frontend-bundle-diagnostics-report.md" printf '%s\n' "$PR_NUMBER" > "$REPORT_DIR/pr-number.txt" printf '%s\n' "$BASE_SHA" > "$REPORT_DIR/base-sha.txt" printf '%s\n' "$HEAD_SHA" > "$REPORT_DIR/head-sha.txt" printf '%s\n' "${{ github.event.pull_request.html_url }}" > "$REPORT_DIR/pr-url.txt" - name: Check report run: | REPORT_DIR="$RUNNER_TEMP/frontend-bundle-report" test -s "$REPORT_DIR/before-stats.json" test -s "$REPORT_DIR/after-stats.json" test -s "$REPORT_DIR/frontend-bundle-diagnostics-report.md" cat "$REPORT_DIR/frontend-bundle-diagnostics-report.md" >> "$GITHUB_STEP_SUMMARY" - name: Upload bundle report uses: actions/upload-artifact@v7 with: name: frontend-bundle-report path: ${{ runner.temp }}/frontend-bundle-report/ if-no-files-found: error retention-days: 7