Also CLI tests #3382
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
name: CI | |
on: [push, pull_request] | |
permissions: | |
contents: read | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
prepare-yarn-cache: | |
name: Prepare Cache | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: 'Check or update Yarn cache (fix w/ "yarn install")' | |
env: | |
YARN_ENABLE_HARDENED_MODE: true # enable hardened mode as CI may run on untrusted repos | |
YARN_ENABLE_SCRIPTS: false # disable post-install scripts | |
YARN_NODE_LINKER: pnp # use pnp linker for better linking performance: it's meant to update yarn cache only | |
run: | | |
yarn install --mode=skip-build | |
yarn-validate: | |
name: Validate Yarn dependencies and constraints | |
needs: prepare-yarn-cache | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: 'Check for unmet constraints (fix w/ "yarn constraints --fix")' | |
run: | | |
yarn constraints | |
- name: 'Check for duplicate dependencies (fix w/ "yarn dedupe")' | |
run: | | |
yarn dedupe --check | |
- name: Check for dependency cycles | |
# todo: investigate why we need to install dependencies here to not get | |
# the following error: | |
# Internal Error: chalk@condition:BABEL_8_BREAKING ?[...]: This package | |
# doesn't seem to be present in your lockfile; run "yarn install" to | |
# update the lockfile | |
run: | | |
yarn | |
yarn release-tool check-cycles | |
test-coverage: | |
name: Test on Node.js Latest | |
needs: prepare-yarn-cache | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Generate coverage report | |
run: | | |
make -j test-ci-coverage | |
yarn test:esm | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v3 | |
test-esm: | |
name: Test ESM version | |
needs: prepare-yarn-cache | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: [23, 22] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{matrix.node-version}} | |
check-latest: true | |
cache: "yarn" | |
- name: Use ESM and build | |
run: make use-esm | |
env: | |
USE_ESM: true | |
- name: Test | |
run: yarn jest --ci | |
env: | |
BABEL_ENV: test | |
USE_ESM: true | |
build: | |
name: Build Babel Artifacts | |
needs: prepare-yarn-cache | |
runs-on: ubuntu-latest | |
# Yarn PnP does not support native ESM yet (https://github.com/yarnpkg/berry/issues/638) | |
# env: | |
# YARN_NODE_LINKER: pnp # use pnp linker for better linking performance and stricter checks | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Build babel artifacts | |
run: | | |
make -j build-standalone-ci | |
env: | |
BABEL_ENV: test-legacy | |
BABEL_8_BREAKING: false | |
STRIP_BABEL_8_FLAG: true | |
- name: Build Makefile.js | |
run: | | |
node ./scripts/pack-script.js | |
- name: Generate readmes | |
run: | | |
make generate-readme | |
- name: Generate .npmignore | |
run: | | |
node scripts/generators/npm-ignore.js | |
- name: Cleanup fixtures | |
run: | | |
node scripts/cleanup-fixtures.js | |
- name: Ensure cwd does not contain uncommitted changes | |
run: | | |
node ./scripts/assert-dir-git-clean.js "\`make build\` and \`node scripts/cleanup-fixtures.js\`" | |
- name: Prepare artifacts | |
run: | | |
./scripts/get-artifact-files.sh | tar --null -cvf babel-artifact.tar --files-from=- | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: babel-artifact | |
path: babel-artifact.tar | |
retention-days: 5 | |
build-windows: | |
name: Build Babel Artifacts on Windows | |
runs-on: windows-latest | |
# Yarn PnP does not support native ESM yet (https://github.com/yarnpkg/berry/issues/638) | |
# env: | |
# YARN_NODE_LINKER: pnp # use pnp linker for better linking performance and stricter checks | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Build babel artifacts | |
shell: bash | |
run: | | |
make -j build-standalone-ci | |
env: | |
BABEL_ENV: test-legacy | |
BABEL_8_BREAKING: false | |
STRIP_BABEL_8_FLAG: true | |
- name: Ensure cwd does not contain uncommitted changes | |
run: | | |
node ./scripts/assert-dir-git-clean.js build | |
lint: | |
name: Lint | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Lint | |
run: make -j lint-ci check-compat-data | |
- name: Ensure cwd does not contain uncommitted changes | |
run: | | |
node ./scripts/assert-dir-git-clean.js "lint-ci check-compat-data" | |
test: | |
name: Test on Node.js # GitHub will add ${{ matrix.node-version }} to this title | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: [22, 20, 18, 16, 14, 12, 10, 8, 6] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest # Run yarn on latest node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Install | |
run: | | |
yarn install | |
- name: Downgrade Jest and Babel for node <= 10 | |
if: matrix.node-version == '6' || matrix.node-version == '8' || matrix.node-version == '10' | |
run: | | |
# It's a bit sarcastic that in this scenario bump-babel-dependencies.js | |
# actually downgrades the root `@babel/*` deps from 8.0 alpha to 7 | |
node ./scripts/integration-tests/utils/bump-babel-dependencies.js | |
yarn up jest@24 | |
cd packages/babel-helper-transform-fixture-test-runner && yarn up jest-diff@24 && cd ../.. | |
# Deduplicate dependencies, because duplicate copies of graceful-fs cause | |
# problems with the "path" module: https://github.com/facebook/jest/issues/9656 | |
yarn dedupe | |
- name: Downgrade Jest and jest-light-runner for node == 12 | |
if: matrix.node-version == '12' | |
run: | | |
yarn up jest@28 | |
cd packages/babel-helper-transform-fixture-test-runner && yarn up jest-diff@28 && cd ../.. | |
yarn up jest-light-runner@0.3.0 | |
# Deduplicate dependencies, because duplicate copies of graceful-fs cause | |
# problems with the "path" module: https://github.com/facebook/jest/issues/9656 | |
yarn dedupe | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Use Node.js ${{ matrix.node-version }} # Checkout node version for test executor | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Ensure that @babel/node's list of node flags is up to date | |
run: | | |
node ./packages/babel-node/scripts/list-node-flags.js | |
- name: Test on node.js ${{ matrix.node-version }} | |
# Todo(Babel 8): Jest execution path is hardcoded because Yarn 2 does not support node 6 | |
run: | | |
node ./node_modules/.bin/jest --ci | |
env: | |
BABEL_ENV: test | |
TEST_FUZZ: "${{ (matrix.node-version == '6' || matrix.node-version == '8' || matrix.node-version == '10') && 'false' || 'true' }}" | |
- name: Use Node.js latest # For `yarn version` in post actions of the first actions/setup-node | |
if: matrix.node-version == '6' || matrix.node-version == '8' || matrix.node-version == '10' | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
build-babel8: | |
name: Build Babel 8 Artifacts | |
needs: prepare-yarn-cache | |
runs-on: ubuntu-latest | |
# Yarn PnP does not support native ESM yet (https://github.com/yarnpkg/berry/issues/638) | |
# env: | |
# YARN_NODE_LINKER: pnp # use pnp linker for better linking performance and stricter checks | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Use ESM | |
run: node scripts/set-module-type.js module | |
- name: Build babel artifacts | |
run: | | |
make -j build-standalone-ci | |
env: | |
BABEL_ENV: test-legacy | |
BABEL_8_BREAKING: true | |
STRIP_BABEL_8_FLAG: true | |
- name: Lint | |
run: make -j lint-ci check-compat-data | |
env: | |
BABEL_ENV: test | |
BABEL_8_BREAKING: true | |
- name: Prepare artifacts | |
run: | | |
./scripts/get-artifact-files.sh | tar --null -cvf babel-artifact.tar --files-from=- | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: babel8-artifact | |
path: babel-artifact.tar | |
retention-days: 5 | |
test-babel-8-breaking: | |
name: Test Babel 8 breaking changes on | |
needs: build-babel8 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js 18.20.0 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "18.20.0" # Node.js 18.20.0 is the first LTS supported by Babel 8 | |
cache: "yarn" | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel8-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Use ESM | |
run: node scripts/set-module-type.js module | |
- name: Test | |
run: yarn jest --ci | |
env: | |
BABEL_ENV: test | |
BABEL_8_BREAKING: true | |
- name: Test ESM | |
run: yarn test:esm | |
env: | |
BABEL_ENV: test | |
BABEL_8_BREAKING: true | |
test-windows-mac: | |
name: Test on | |
needs: build | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Test | |
run: yarn jest --ci | |
env: | |
BABEL_ENV: test | |
external-parser-tests: | |
name: Third-party Parser Tests | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Download tests | |
run: make -j bootstrap-flow bootstrap-typescript bootstrap-test262 | |
- name: Run Test262 Tests | |
run: make test-test262 | |
- name: Run Flow Tests | |
run: make test-flow | |
- name: Run TypeScript Tests | |
run: make test-typescript | |
runtime-interop: | |
name: Test @babel/runtime integrations | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
# See https://github.com/babel/babel/pull/12906 | |
- name: Support self-references on old Node.js | |
run: | | |
echo '{ | |
"type": "commonjs", | |
"private": true, | |
"devDependencies": { | |
"@babel/runtime": "workspace:^", | |
"@babel/runtime-corejs3": "workspace:^" | |
} | |
}' > packages/package.json | |
node -e " | |
const pkg = require('./package.json'); | |
pkg.workspaces.push('packages'); | |
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)) | |
" | |
- name: Install | |
run: yarn install | |
env: | |
# The "Support self-references on old Node.js" step mutates the | |
# package.json file, causing a yarn.lock update. | |
YARN_ENABLE_IMMUTABLE_INSTALLS: false | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Generate absoluteRuntime tests | |
run: yarn test:runtime:generate-absolute-runtime | |
- name: Test bundlers | |
run: yarn test:runtime:bundlers | |
- name: Test Node.js latest | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 10 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 10 | |
- name: Test Node.js 10 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 12.0 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "12.0" # quoted, otherwise it's just 12 | |
- name: Test Node.js 12.0 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 12.17 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 12.17 | |
- name: Test Node.js 12.17 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 13.0 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "13.0" # quoted, otherwise it's just 13 | |
- name: Test Node.js 13.0 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 13.2 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 13.2 | |
- name: Test Node.js 13.2 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 13.6 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 13.6 | |
- name: Test Node.js 13.6 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 13.7 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 13.7 | |
- name: Test Node.js 13.7 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 14.2 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 14.2 | |
- name: Test Node.js 14.2 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 16.5 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 16.5 | |
- name: Test Node.js 16.5 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 16.6 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 16.6 | |
- name: Test Node.js 16.6 | |
run: node test/runtime-integration/node.cjs | |
- name: Use Node.js 22 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
- name: Test Node.js 22 | |
run: node test/runtime-integration/node.cjs | |
eslint7-test: | |
name: Test @babel/eslint-* with ESLint 7.5.0 | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Downgrade ESLint to 7.5.0 | |
run: yarn up eslint@7.5.0 | |
- name: Run babel/eslint tests | |
run: node ./node_modules/.bin/jest eslint | |
eslint8-test: | |
name: Test @babel/eslint-* with ESLint 8.0.0 | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
cache: "yarn" | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Downgrade ESLint to 8.0.0 | |
run: yarn up eslint@8.0.0 | |
- name: Run babel/eslint tests | |
run: node ./node_modules/.bin/jest eslint | |
test262-prepare: | |
name: test262 - Prepare for running in parallel | |
runs-on: ubuntu-latest | |
if: github.repository == 'babel/babel' | |
steps: | |
- name: Checkout Babel | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
- name: Checkout test runner | |
uses: actions/checkout@v4 | |
with: | |
repository: babel/babel-test262-runner | |
path: babel-test262-runner | |
ref: main | |
- name: Download test262 | |
run: make bootstrap-test262 | |
- name: Prepare test262 chunks | |
run: | | |
cd babel-test262-runner | |
npm ci | |
node lib/prepare-chunks 8 > ~/test262-chunks.json | |
env: | |
TEST262_PATH: ../build/test262 | |
- name: Upload chunks artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test262-chunks | |
path: ~/test262-chunks.json | |
retention-days: 3 | |
test262: | |
name: test262 | |
strategy: | |
matrix: | |
chunk: [0, 1, 2, 3, 4, 5, 6, 7] | |
runs-on: ubuntu-latest | |
needs: [build, test262-prepare] | |
steps: | |
- name: Checkout Babel | |
uses: actions/checkout@v4 | |
- name: Use Node.js latest | |
uses: actions/setup-node@v4 | |
with: | |
node-version: latest | |
check-latest: true | |
- name: Install | |
run: yarn install | |
- uses: actions/download-artifact@v3 | |
with: | |
name: babel-artifact | |
- name: Extract artifacts | |
run: tar -xf babel-artifact.tar; rm babel-artifact.tar | |
- name: Checkout test runner | |
uses: actions/checkout@v4 | |
with: | |
repository: babel/babel-test262-runner | |
path: babel-test262-runner | |
ref: main | |
- name: Install test runner | |
run: | | |
cd babel-test262-runner | |
npm ci | |
node lib/download-node | |
- name: Download test262 | |
run: make bootstrap-test262 | |
- name: Download chunks file | |
uses: actions/download-artifact@v3 | |
with: | |
name: test262-chunks | |
- name: Run test262 | |
run: | | |
cd babel-test262-runner | |
node lib/run-tests I_AM_SURE | tee ~/test262-${{ matrix.chunk }}.tap | |
# Specify bash to enable pipefail, so that "| tee" does not suppress the failure exit code. | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell | |
shell: bash | |
env: | |
BABEL_PATH: ".." | |
TEST262_PATH: ../build/test262 | |
THREADS: 4 | |
CHUNKS_FILE: ../test262-chunks.json | |
CHUNK: ${{ matrix.chunk }} | |
- name: Create artifact with report results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test262-result-${{ matrix.chunk }} | |
path: ~/test262-${{ matrix.chunk }}.tap | |
retention-days: 3 | |
test262-finish: | |
name: test262 - Analyze results | |
runs-on: ubuntu-latest | |
needs: test262 | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-0 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-1 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-2 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-3 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-4 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-5 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-6 } | |
- uses: actions/download-artifact@v3 | |
with: { name: test262-result-7 } | |
- name: Merge chunk results | |
run: | | |
cat test262-0.tap test262-1.tap test262-2.tap test262-3.tap \ | |
test262-4.tap test262-5.tap test262-6.tap test262-7.tap \ | |
| npx tap-merge > test262.tap | |
- name: Create artifact with report results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test262-result | |
path: test262.tap | |
- name: Checkout test runner | |
uses: actions/checkout@v4 | |
with: | |
repository: babel/babel-test262-runner | |
path: babel-test262-runner | |
ref: main | |
- name: Download previous results | |
run: | | |
cd babel-test262-runner | |
npm ci | |
node lib/download-main-artifact/index.mjs ~/test262-main.tap | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Compare previous main branch & current results | |
run: | | |
cd babel-test262-runner | |
node lib/compare-results ~/test262-main.tap ../test262.tap | tee ~/diff.tap | |
# Specify bash to enable pipefail, so that "| tee" does not suppress the failure exit code. | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell | |
shell: bash |