Use Node 22 for GitHub actions for now #10910
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
branches: | |
- master | |
- 'cherry-pick/**' | |
pull_request: | |
merge_group: | |
concurrency: | |
# group by workflow and ref; the last slightly strange component ensures that for pull | |
# requests, we limit to 1 concurrent job, but for the master branch we don't | |
group: ${{github.workflow}}-${{github.ref}}-${{github.ref != 'refs/heads/master' || github.run_number}} | |
# Cancel intermediate builds, but only if it is a pull request build. | |
cancel-in-progress: ${{startsWith(github.ref, 'refs/pull/')}} | |
env: | |
node-version: '18.x' | |
name: 'Integration' | |
jobs: | |
chore: | |
name: 'Testing chores' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
git fetch --no-tags --unshallow origin HEAD master | |
- name: 'Use Node.js ${{ env.node-version }}' | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.node-version }} | |
- name: 'Check that the Yarn files don''t change on new installs (fix w/ "yarn install")' | |
run: | | |
node ./scripts/run-yarn.js --immutable --immutable-cache | |
shell: bash | |
- name: 'Check that the cache files are consistent with their remote sources' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- '.yarn/cache' 'packages/yarnpkg-libzip' | wc -l) -gt 0 ]]; then | |
node ./scripts/run-yarn.js --immutable --immutable-cache --check-cache | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that the patch files are consistent with fresh builds' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- packages/plugin-compat/sources/patches | wc -l) -gt 0 ]]; then | |
for generator in packages/plugin-compat/extra/*/gen-*-patch.sh; do | |
bash $generator; | |
done | |
for generator in packages/plugin-compat/extra/*/gen-*-patch.js; do | |
yarn node $generator; | |
done | |
[[ $(git diff --name-only packages/plugin-compat/sources/patches "packages/plugin-compat/extra/typescript/patch*" | tee /dev/stderr | wc -l) -eq 0 ]] | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that libzip artifacts are consistent with a fresh build (fix w/ "git merge master && bash packages/yarnpkg-libzip/artifacts/build.sh")' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- 'packages/yarnpkg-libzip/artifacts' 'packages/yarnpkg-libzip/sources/*.js' | wc -l) -gt 0 ]]; then | |
bash packages/yarnpkg-libzip/artifacts/build.sh | |
[[ $(git diff --name-only 'packages/yarnpkg-libzip/artifacts' 'packages/yarnpkg-libzip/sources/*.js' | wc -l) -eq 0 ]] | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that the PnP hooks are consistent with a fresh build (fix w/ "git merge master && yarn update:pnp:hook")' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- 'packages/yarnpkg-{fslib,libzip,pnp}/sources/**/*' | wc -l) -gt 0 ]]; then | |
node ./scripts/run-yarn.js build:pnp:hook | |
[[ $(git diff --name-only packages/yarnpkg-pnp/sources/{hook.js,esm-loader/built-loader.js} | wc -l) -eq 0 ]] | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that the Zip worker is consistent with a fresh build (fix w/ "git merge master && yarn update:zip:worker")' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- 'packages/yarnpkg-{fslib,libzip,core}/sources/**/*' | wc -l) -gt 0 ]]; then | |
node ./scripts/run-yarn.js build:zip:worker | |
[[ $(git diff --name-only packages/yarnpkg-core/sources/worker-zip/index.js | wc -l) -eq 0 ]] | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that the pluginCommands file is consistent with a fresh build (fix w/ "yarn build:plugin-commands")' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- packages/yarnpkg-cli/sources/pluginCommands.ts 'packages/*/sources/commands/**/*' | wc -l) -gt 0 ]]; then | |
node ./scripts/run-yarn.js build:plugin-commands | |
[[ $(git diff --name-only packages/yarnpkg-cli/sources/pluginCommands.ts | tee /dev/stderr | wc -l) -eq 0 ]] | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that the grammars are consistent with fresh builds (fix w/ "yarn grammar:all")' | |
run: | | |
if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- 'packages/yarnpkg-parsers/sources/grammars/*.{pegjs,js}' | wc -l) -gt 0 ]]; then | |
node ./scripts/run-yarn.js grammar:all | |
[[ $(git diff --name-only packages/yarnpkg-parsers/sources/grammars/*.js | tee /dev/stderr | wc -l) -eq 0 ]] | |
fi | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
env: | |
TARGET_BRANCH: ${{github.event.pull_request.base.ref}} | |
- name: 'Check that the PR describes which packages should be bumped (fix w/ "yarn version check -i")' | |
run: | | |
node ./scripts/run-yarn.js version check | |
shell: bash | |
if: | | |
(success() || failure()) && github.event.pull_request != '' | |
- name: 'Check for linting errors (fix w/ "yarn test:lint --fix")' | |
run: | | |
node ./scripts/run-yarn.js test:lint | |
shell: bash | |
if: | | |
success() || failure() | |
- name: 'Check for unmet constraints (fix w/ "yarn constraints --fix")' | |
run: | | |
node ./scripts/run-yarn.js constraints | |
shell: bash | |
if: | | |
success() || failure() | |
- name: 'Check for type errors' | |
run: | | |
node ./scripts/run-yarn.js typecheck:all | |
shell: bash | |
if: | | |
success() || failure() | |
- name: 'Check for duplicate dependencies (fix w/ "yarn dedupe")' | |
run: | | |
node ./scripts/run-yarn.js dedupe --check | |
shell: bash | |
if: | | |
success() || failure() | |
- name: 'Check for outdated e2e status list (fix w/ "node ./scripts/generate-e2e-status-list.mjs")' | |
run: | | |
node ./scripts/generate-e2e-status-list.mjs | |
git diff --exit-code | |
shell: bash | |
if: | | |
success() || failure() | |
build: | |
name: 'Build artifacts' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 'Use Node.js ${{ env.node-version }}' | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.node-version }} | |
- name: 'Build bundle & plugins' | |
run: | | |
node --version | |
node ./scripts/run-yarn.js build:pnp:hook | |
node ./scripts/run-yarn.js build:zip:worker | |
node ./scripts/run-yarn.js build:cli | |
mv ./packages/yarnpkg-cli/bundles/yarn.js ./packages/yarnpkg-cli/bundles/yarn-min.js | |
node ./scripts/run-yarn.js build:cli --no-minify | |
shell: bash | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: yarn-artifacts | |
path: | | |
./packages/*/bundles | |
./packages/yarnpkg-pnp/sources/hook.js | |
./packages/yarnpkg-core/sources/worker-zip/index.js | |
- name: 'Build vscode-zipfs' | |
run: | | |
node ./scripts/run-yarn.js package:vscode-zipfs | |
if: | | |
success() || failure() | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: vscode-zipfs | |
path: ./packages/vscode-zipfs/vscode-zipfs-*.vsix | |
acceptance: | |
strategy: | |
fail-fast: false | |
matrix: | |
# We run the ubuntu tests on multiple Node versions with 2 shards since they're the fastest. | |
node: [18, 19, 20, 21, 22] | |
platform: [[ubuntu, 20.04]] | |
shard: ['1/2', '2/2'] | |
include: | |
# We run the rest of the tests on the minimum Node version we support with 3 shards. | |
# Windows tests | |
- {node: 18, platform: [windows, latest], shard: 1/3} | |
- {node: 18, platform: [windows, latest], shard: 2/3} | |
- {node: 18, platform: [windows, latest], shard: 3/3} | |
# macOS tests | |
- {node: 18, platform: [macos, latest], shard: 1/3} | |
- {node: 18, platform: [macos, latest], shard: 2/3} | |
- {node: 18, platform: [macos, latest], shard: 3/3} | |
# We also run them on the maximum Node version we support, to catch potential regressions in Node.js. | |
# Windows tests | |
- {node: 22, platform: [windows, latest], shard: 1/3} | |
- {node: 22, platform: [windows, latest], shard: 2/3} | |
- {node: 22, platform: [windows, latest], shard: 3/3} | |
# macOS tests | |
- {node: 22, platform: [macos, latest], shard: 1/3} | |
- {node: 22, platform: [macos, latest], shard: 2/3} | |
- {node: 22, platform: [macos, latest], shard: 3/3} | |
name: '${{matrix.platform[0]}}-latest w/ Node.js ${{matrix.node}}.x (${{matrix.shard}})' | |
runs-on: ${{matrix.platform[0]}}-${{matrix.platform[1]}} | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
- name: 'Use Node.js ${{matrix.node}}.x' | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{matrix.node}}.x | |
- uses: actions/download-artifact@v4 | |
with: | |
name: yarn-artifacts | |
path: packages | |
- name: 'Run the integration tests' | |
run: | | |
node ./scripts/run-yarn.js test:integration --maxWorkers=100% --shard=${{matrix.shard}} | |
shell: bash | |
- name: 'Run the unit tests' | |
run: | | |
node ./scripts/run-yarn.js test:unit --maxWorkers=100% --shard=${{matrix.shard}} | |
shell: bash | |
if: | | |
success() || failure() | |
big-endian: | |
strategy: | |
fail-fast: false | |
matrix: | |
shard: ['1/4', '2/4', '3/4', '4/4'] | |
name: 'Big-endian debian w/ Node.js latest (${{matrix.shard}})' | |
runs-on: ubuntu-20.04 | |
if: | | |
github.ref == 'refs/heads/master' | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: yarn-artifacts | |
path: packages | |
# https://github.com/multiarch/qemu-user-static | |
- name: 'Enable execution of multi-arch containers' | |
run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes | |
shell: bash | |
# Apparently @babel/register is insanely slow inside the big-endian | |
# docker container, so we don't want to run yarn from sources at all. | |
- name: 'Run the integration tests' | |
run: | | |
docker run --rm --volume "$PWD:/berry" --env GITHUB_ACTIONS --env YARN_IGNORE_PATH=1 --workdir /berry --platform linux/s390x node /bin/bash -c 'node ./packages/yarnpkg-cli/bundles/yarn.js test:integration --maxWorkers=100% --shard=${{matrix.shard}}' | |
shell: bash | |
- name: 'Run the unit tests' | |
run: | | |
docker run --rm --volume "$PWD:/berry" --env GITHUB_ACTIONS --env YARN_IGNORE_PATH=1 --workdir /berry --platform linux/s390x node /bin/bash -c 'node ./packages/yarnpkg-cli/bundles/yarn.js test:unit --maxWorkers=100% --shard=${{matrix.shard}}' | |
shell: bash | |
if: | | |
success() || failure() |