From 0a6c60cec66b59e71f05c3ab15c28363b66ecf85 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Thu, 12 Oct 2023 09:34:27 -0700 Subject: [PATCH] Break out E2E deploy test workflow to its own (#56755) As discussed with @feedthejim this breaks our E2E deploy tests workflow into it's own so it can be triggered on cron/manually easier. One thing we'll need to consider with the cron/manual workflow is if a canary isn't published yet and Next.js relies on swc changes it will fail since this doesn't pack/publish a fresh built swc binary currently. --- .github/workflows/build_and_deploy.yml | 82 -------------------------- .github/workflows/test_e2e_deploy.yml | 80 +++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 82 deletions(-) create mode 100644 .github/workflows/test_e2e_deploy.yml diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 5257ca560fb79..0547c39f95d7f 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -463,88 +463,6 @@ jobs: VERCEL_API_TOKEN: ${{ secrets.VERCEL_API_TOKEN }} DEPLOY_ENVIRONMENT: production - testDeployE2E: - name: E2E (deploy) - runs-on: ubuntu-latest - needs: [publishRelease] - env: - NEXT_TELEMETRY_DISABLED: 1 - VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }} - VERCEL_TEST_TEAM: vtest314-next-e2e-tests - DATADOG_API_KEY: ${{ secrets.DATA_DOG_API_KEY }} - steps: - - uses: actions/cache@v3 - timeout-minutes: 5 - id: restore-build - with: - path: ./* - key: ${{ github.sha }}-${{ github.run_number }} - - - run: npm i -g vercel@latest - - - uses: actions/download-artifact@v3 - with: - name: next-swc-binaries - path: packages/next-swc/native - - - run: RESET_VC_PROJECT=true node scripts/reset-vercel-project.mjs - name: Reset test project - - - run: docker run --rm -v $(pwd):/work mcr.microsoft.com/playwright:v1.35.1-jammy /bin/bash -c "cd /work && NODE_VERSION=${{ env.NODE_LTS_VERSION }} ./scripts/setup-node.sh && corepack enable > /dev/null && DATADOG_TRACE_NEXTJS_TEST=TRUE DATADOG_API_KEY=${DATADOG_API_KEY} DD_ENV=ci VERCEL_TEST_TOKEN=${{ secrets.VERCEL_TEST_TOKEN }} VERCEL_TEST_TEAM=vtest314-next-e2e-tests NEXT_TEST_JOB=1 NEXT_TEST_MODE=deploy TEST_TIMINGS_TOKEN=${{ secrets.TEST_TIMINGS_TOKEN }} NEXT_TEST_CONTINUE_ON_ERROR=1 xvfb-run node run-tests.js --type e2e >> /proc/1/fd/1" - name: Run test/e2e (deploy) - - - name: Upload test trace - if: always() - uses: actions/upload-artifact@v3 - with: - name: test-trace - if-no-files-found: ignore - retention-days: 2 - path: | - test/traces - - - name: Upload test trace to datadog - continue-on-error: true - run: | - ls -al ./test - npm install -g junit-report-merger@6.0.2 @datadog/datadog-ci@2.14.0 @aws-sdk/property-provider@3 - jrm ./nextjs-test-result-junit.xml "test/test-junit-report/**/*.xml" - DD_ENV=ci datadog-ci junit upload --tags test.type:nextjs_deploy_e2e --service nextjs ./nextjs-test-result-junit.xml - - manualTestDeployE2E: - name: E2E (manual deploy) - runs-on: ubuntu-latest - if: ${{ github.event_name == 'workflow_dispatch' }} - needs: - - build - - build-wasm - - build-native - env: - NEXT_TELEMETRY_DISABLED: 1 - VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }} - VERCEL_TEST_TEAM: vtest314-next-e2e-tests - DATADOG_API_KEY: ${{ secrets.DATA_DOG_API_KEY }} - steps: - - uses: actions/cache@v3 - timeout-minutes: 5 - id: restore-build - with: - path: ./* - key: ${{ github.sha }}-${{ github.run_number }} - - - run: npm i -g vercel@latest - - - uses: actions/download-artifact@v3 - with: - name: next-swc-binaries - path: packages/next-swc/native - - - run: RESET_VC_PROJECT=true node scripts/reset-vercel-project.mjs - name: Reset test project - - - run: docker run --rm -v $(pwd):/work mcr.microsoft.com/playwright:v1.35.1-jammy /bin/bash -c "cd /work && NODE_VERSION=${{ env.NODE_LTS_VERSION }} ./scripts/setup-node.sh && corepack enable > /dev/null && DATADOG_TRACE_NEXTJS_TEST=TRUE DATADOG_API_KEY=${DATADOG_API_KEY} DD_ENV=ci VERCEL_TEST_TOKEN=${{ secrets.VERCEL_TEST_TOKEN }} VERCEL_TEST_TEAM=vtest314-next-e2e-tests NEXT_TEST_JOB=1 NEXT_TEST_MODE=deploy TEST_TIMINGS_TOKEN=${{ secrets.TEST_TIMINGS_TOKEN }} NEXT_TEST_CONTINUE_ON_ERROR=1 xvfb-run node run-tests.js --type e2e >> /proc/1/fd/1" - name: Run test/e2e (deploy) - releaseStats: name: Release Stats runs-on: diff --git a/.github/workflows/test_e2e_deploy.yml b/.github/workflows/test_e2e_deploy.yml new file mode 100644 index 0000000000000..0d86aa03f2f61 --- /dev/null +++ b/.github/workflows/test_e2e_deploy.yml @@ -0,0 +1,80 @@ +name: test-e2e-deploy + +on: + schedule: + # run every day at midnight + - cron: '0 0 * * *' + # allow triggering manually as well + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + env: + VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }} + VERCEL_TEST_TEAM: vtest314-next-e2e-tests + DATADOG_API_KEY: ${{ secrets.DATA_DOG_API_KEY }} + NAPI_CLI_VERSION: 2.16.2 + TURBO_VERSION: 1.10.9 + NODE_MAINTENANCE_VERSION: 16 + NODE_LTS_VERSION: 18 + CARGO_PROFILE_RELEASE_LTO: 'true' + TURBO_TEAM: 'vercel' + TURBO_REMOTE_ONLY: 'true' + TEST_TIMINGS_TOKEN: ${{ secrets.TEST_TIMINGS_TOKEN }} + 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 + + strategy: + fail-fast: false + matrix: + group: [1, 2] + + steps: + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_LTS_VERSION }} + check-latest: true + - run: corepack enable + + - uses: actions/checkout@v3 + with: + fetch-depth: 25 + + - run: pnpm install + + - run: pnpm run build + + - run: npm i -g vercel@latest + + - uses: actions/download-artifact@v3 + with: + name: next-swc-binaries + path: packages/next-swc/native + + - run: RESET_VC_PROJECT=true node scripts/reset-vercel-project.mjs + name: Reset test project + + - run: docker run --rm -v $(pwd):/work mcr.microsoft.com/playwright:v1.35.1-jammy /bin/bash -c "cd /work && NODE_VERSION=${{ env.NODE_LTS_VERSION }} ./scripts/setup-node.sh && corepack enable > /dev/null && DATADOG_TRACE_NEXTJS_TEST=TRUE DATADOG_API_KEY=${DATADOG_API_KEY} DD_ENV=ci VERCEL_TEST_TOKEN=${{ secrets.VERCEL_TEST_TOKEN }} VERCEL_TEST_TEAM=vtest314-next-e2e-tests NEXT_TEST_JOB=1 NEXT_TEST_MODE=deploy TEST_TIMINGS_TOKEN=${{ secrets.TEST_TIMINGS_TOKEN }} NEXT_TEST_CONTINUE_ON_ERROR=1 xvfb-run node run-tests.js --type e2e --timings -g ${{ matrix.group }}/2 -c 2 >> /proc/1/fd/1" + name: Run test/e2e (deploy) + + - name: Upload test trace + if: always() + uses: actions/upload-artifact@v3 + with: + name: test-trace + if-no-files-found: ignore + retention-days: 2 + path: | + test/traces + + - name: Upload test trace to datadog + continue-on-error: true + run: | + ls -al ./test + npm install -g junit-report-merger@6.0.2 @datadog/datadog-ci@2.14.0 @aws-sdk/property-provider@3 + jrm ./nextjs-test-result-junit.xml "test/test-junit-report/**/*.xml" + DD_ENV=ci datadog-ci junit upload --tags test.type:nextjs_deploy_e2e --service nextjs ./nextjs-test-result-junit.xml