| | 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 |
| | |
| | |
| | NEXT_SKIP_NATIVE_POSTINSTALL: 1 |
| | |
| | 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<<EOF" >> $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 }} |
| |
|