on: pull_request: types: [opened, synchronize] push: branches: - canary name: Generate Stats concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: NAPI_CLI_VERSION: 2.18.4 TURBO_VERSION: 2.5.5 NODE_LTS_VERSION: 20 TEST_CONCURRENCY: 6 TURBO_TEAM: 'vercel' TURBO_CACHE: 'remote:rw' NEXT_TELEMETRY_DISABLED: 1 # we build a dev binary for use in CI so skip downloading # canary next-swc binaries in the monorepo NEXT_SKIP_NATIVE_POSTINSTALL: 1 # Vercel KV Store for test timings KV_REST_API_URL: ${{ secrets.KV_REST_API_URL }} KV_REST_API_TOKEN: ${{ secrets.KV_REST_API_TOKEN }} NEXT_TEST_JOB: 1 NEXT_DISABLE_SWC_WASM: 1 jobs: build: uses: ./.github/workflows/build_reusable.yml secrets: inherit with: stepName: 'generate-pull-request-stats' uploadSwcArtifact: 'yes' uploadAnalyzerArtifacts: 'yes' stats: name: Stats (${{ matrix.bundler }}) needs: build timeout-minutes: 25 strategy: fail-fast: false matrix: bundler: [webpack, turbopack] runs-on: - 'self-hosted' - 'linux' - 'x64' - 'metal' steps: - uses: actions/checkout@v4 with: fetch-depth: 25 - name: Check non-docs only change run: echo "DOCS_CHANGE<> $GITHUB_OUTPUT; echo "$(node scripts/run-for-change.mjs --not --type docs --exec echo 'nope')" >> $GITHUB_OUTPUT; echo 'EOF' >> $GITHUB_OUTPUT id: docs-change - uses: actions/download-artifact@v4 if: ${{ steps.docs-change.outputs.DOCS_CHANGE == 'nope' }} with: name: next-swc-binary path: packages/next-swc/native - run: cp -r packages/next-swc/native .github/actions/next-stats-action/native if: ${{ steps.docs-change.outputs.DOCS_CHANGE == 'nope' }} - uses: ./.github/actions/next-stats-action if: ${{ steps.docs-change.outputs.DOCS_CHANGE == 'nope' }} with: bundler: ${{ matrix.bundler }} env: PR_STATS_COMMENT_TOKEN: ${{ secrets.PR_STATS_COMMENT_TOKEN }} TURBO_TEAM: ${{ env.TURBO_TEAM }} TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_CACHE: ${{ env.TURBO_CACHE }} - name: Upload stats results if: ${{ steps.docs-change.outputs.DOCS_CHANGE == 'nope' }} uses: actions/upload-artifact@v4 with: name: pr-stats-${{ matrix.bundler }} path: pr-stats-${{ matrix.bundler }}.json retention-days: 1 stats-aggregate: name: Aggregate Stats needs: stats if: always() && needs.stats.result != 'cancelled' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 1 - name: Download all stats artifacts uses: actions/download-artifact@v4 with: pattern: pr-stats-* path: stats-results merge-multiple: true - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_LTS_VERSION }} - name: Install dependencies working-directory: .github/actions/next-stats-action run: npm install - name: Aggregate and post results working-directory: .github/actions/next-stats-action run: node src/aggregate-results.js ${{ github.workspace }}/stats-results env: PR_STATS_COMMENT_TOKEN: ${{ secrets.PR_STATS_COMMENT_TOKEN }} KV_REST_API_URL: ${{ secrets.KV_REST_API_URL }} KV_REST_API_TOKEN: ${{ secrets.KV_REST_API_TOKEN }}