diff --git a/.changeset/sour-scissors-push.md b/.changeset/sour-scissors-push.md new file mode 100644 index 000000000..938dc417f --- /dev/null +++ b/.changeset/sour-scissors-push.md @@ -0,0 +1,5 @@ +--- + +--- + +ci: add Node.js v18 tests diff --git a/.github/workflows/test-18.yml b/.github/workflows/test-18.yml new file mode 100644 index 000000000..dc8cb8161 --- /dev/null +++ b/.github/workflows/test-18.yml @@ -0,0 +1,124 @@ +name: Tests Node.js v18 + +on: + push: + branches: + - main + tags: + - '!*' + pull_request: + +env: + NODE_VERSION: '18' + TURBO_REMOTE_ONLY: 'true' + TURBO_TEAM: 'vercel' + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + setup: + name: Find Changes + runs-on: ubuntu-latest + outputs: + tests: ${{ steps['set-tests'].outputs['tests'] }} + dplUrl: ${{ steps.waitForTarball.outputs.url }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 2 + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + - name: install pnpm@8.3.1 + run: npm i -g pnpm@8.3.1 + - run: pnpm install + - id: set-tests + run: | + TESTS_ARRAY=$(node utils/chunk-tests-18.js $SCRIPT_NAME) + echo "Files to test:" + echo "$TESTS_ARRAY" + echo "tests=$TESTS_ARRAY" >> $GITHUB_OUTPUT + - uses: patrickedqvist/wait-for-vercel-preview@bfdff514ff78a669f2536e9f4dd4ef5813a704a2 + id: waitForTarball + with: + token: ${{ secrets.GITHUB_TOKEN }} + max_timeout: 360 + check_interval: 5 + test: + timeout-minutes: 120 + runs-on: ${{ matrix.runner }} + name: ${{matrix.scriptName}} (${{matrix.packageName}}, ${{matrix.chunkNumber}}, ${{ matrix.runner }}) + if: ${{ needs.setup.outputs['tests'] != '[]' }} + needs: + - setup + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.setup.outputs['tests']) }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 2 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.nodeVersion || env.NODE_VERSION }} + + # yarn 1.22.21 introduced a Corepack bug when running tests. + # this can be removed once https://github.com/yarnpkg/yarn/issues/9015 is resolved + - name: install yarn@1.22.19 + run: npm i -g yarn@1.22.19 + + - name: install pnpm@8.3.1 + run: npm i -g pnpm@8.3.1 + + - run: pnpm install + + - name: Build ${{matrix.packageName}} and all its dependencies + run: node utils/gen.js && node_modules/.bin/turbo run build --cache-dir=".turbo" --log-order=stream --scope=${{matrix.packageName}} --include-dependencies --no-deps + env: + FORCE_COLOR: '1' + - name: Test ${{matrix.packageName}} + run: node utils/gen.js && node_modules/.bin/turbo run ${{matrix.testScript}} --summarize --cache-dir=".turbo" --log-order=stream --scope=${{matrix.packageName}} --no-deps -- ${{ join(matrix.testPaths, ' ') }} + shell: bash + env: + JEST_JUNIT_OUTPUT_FILE: ${{github.workspace}}/.junit-reports/${{matrix.scriptName}}-${{matrix.packageName}}-${{matrix.chunkNumber}}-${{ matrix.runner }}.xml + VERCEL_CLI_VERSION: ${{ needs.setup.outputs.dplUrl }}/tarballs/vercel.tgz + VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }} + VERCEL_TEST_REGISTRATION_URL: ${{ secrets.VERCEL_TEST_REGISTRATION_URL }} + FORCE_COLOR: '1' + - name: 'Determine Turbo HIT or MISS' + if: ${{ !cancelled() }} + id: turbo-summary + shell: bash + run: | + TURBO_MISS_COUNT=`node utils/determine-turbo-hit-or-miss.js` + echo "MISS COUNT: $TURBO_MISS_COUNT" + echo "misses=$TURBO_MISS_COUNT" >> $GITHUB_OUTPUT + - name: 'Upload Test Report to Datadog' + if: ${{ steps['turbo-summary'].outputs.misses != '0' && !cancelled() }} + run: 'npx @datadog/datadog-ci@2.18.1 junit upload --service vercel-cli .junit-reports' + env: + DATADOG_API_KEY: ${{secrets.DATADOG_API_KEY_CLI}} + DD_ENV: ci + + summary: + name: Summary + runs-on: ubuntu-latest + timeout-minutes: 5 + if: always() + needs: + - test + steps: + - name: Check All + run: |- + for status in ${{ join(needs.*.result, ' ') }} + do + if [ "$status" != "success" ] && [ "$status" != "skipped" ] + then + echo "Some checks failed" + exit 1 + fi + done diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 406a13df7..4fec7cf92 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Tests +name: Tests Node.js v16 on: push: diff --git a/utils/chunk-tests-18.js b/utils/chunk-tests-18.js new file mode 100644 index 000000000..f236a51aa --- /dev/null +++ b/utils/chunk-tests-18.js @@ -0,0 +1,46 @@ +async function main() { + try { + console.log( + JSON.stringify([ + { + runner: 'ubuntu-latest', + packagePath: 'packages/node', + packageName: '@vercel/node', + scriptName: 'test-unit', + testScript: 'test', + testPaths: ['test/unit/dev.test.ts'], + chunkNumber: 1, + allChunksLength: 1, + }, + { + runner: 'macos-14', + packagePath: 'packages/node', + packageName: '@vercel/node', + scriptName: 'test-unit', + testScript: 'test', + testPaths: ['test/unit/dev.test.ts'], + chunkNumber: 1, + allChunksLength: 1, + }, + { + runner: 'windows-latest', + packagePath: 'packages/node', + packageName: '@vercel/node', + scriptName: 'test-unit', + testScript: 'test', + testPaths: ['test/unit/dev.test.ts'], + chunkNumber: 1, + allChunksLength: 1, + }, + ]) + ); + } catch (e) { + console.error(e); + process.exitCode = 1; + } +} + +// @ts-ignore +if (module === require.main || !module.parent) { + main(); +}