name: CI on: [push, pull_request] jobs: prepare-yarn-cache: name: Prepare Cache runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: "*" - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} restore-keys: | yarn- - name: 'Check or update Yarn cache (fix w/ "yarn install")' env: 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@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: "*" - name: 'Check for unmet constraints (fix w/ "yarn constraints --fix")' run: | yarn constraints - name: 'Check for duplicate dependencies (fix w/ "yarn dedupe")' if: steps.yarn-cache.outputs.cache-hit != 'true' run: | yarn dedupe --check - name: Check for dependency cycles run: | 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@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: 17 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Generate coverage report run: | make -j test-ci-coverage yarn test:esm - name: Upload coverage report uses: codecov/codecov-action@v1 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@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: "*" - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} restore-keys: | yarn- - name: Build babel artifacts run: | BABEL_ENV=test-legacy make -j build-standalone-ci env: BABEL_8_BREAKING: false STRIP_BABEL_8_FLAG: true - uses: actions/upload-artifact@v2 with: name: babel-artifact path: | codemods/*/lib/**/* eslint/*/lib/**/* packages/*/lib/**/* packages/babel-standalone/*.js !**/node_modules/** lint: name: Lint needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Install run: yarn install - uses: actions/download-artifact@v2 with: name: babel-artifact - name: Lint run: make -j tscheck flowcheck-ci lint-ci test: name: Test on Node.js # GitHub will add ${{ matrix.node-version }} to this title needs: build runs-on: ubuntu-latest strategy: matrix: node-version: [16, 14, 12, 10, 8, 6] steps: - name: Checkout code uses: actions/checkout@v2 - name: Use Node.js latest # Run yarn on latest node uses: actions/setup-node@v2-beta with: node-version: "*" # Build Babel on latest node LTS versions - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Install run: | yarn install - name: Downgrade Jest for node <= 8 if: matrix.node-version == '6' || matrix.node-version == '8' run: | yarn remove jest yarn add --dev jest@24 # 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@v2 with: name: babel-artifact - name: Generate runtime helpers run: | make build-plugin-transform-runtime-dist - name: Use Node.js ${{ matrix.node-version }} # Checkout node version for test executor uses: actions/setup-node@v2-beta with: node-version: ${{ matrix.node-version }} - name: Test on node.js ${{ matrix.node-version }} # Hack: --color has supports-color@5 returned true for GitHub CI # Remove once `chalk` is bumped to 4.0. # Todo(Babel 8): Jest execution path is hardcoded because Yarn 2 does not support node 6 run: | BABEL_ENV=test node ./node_modules/.bin/jest --ci --color test-babel-8-breaking: name: Test Babel 8 breaking changes needs: prepare-yarn-cache runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Use Node.js 12 uses: actions/setup-node@v2-beta with: node-version: 12 # Node.js 12 is the first LTS supported by Babel 8 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Install and build run: make -j bootstrap env: BABEL_ENV: test BABEL_8_BREAKING: true STRIP_BABEL_8_FLAG: true - name: Lint run: make lint env: BABEL_ENV: test BABEL_8_BREAKING: true BABEL_TYPES_8_BREAKING: true - name: Test # Hack: --color has supports-color@5 returned true for GitHub CI # Remove once `chalk` is bumped to 4.0. run: | yarn jest --ci --color yarn test:esm env: BABEL_ENV: test BABEL_8_BREAKING: true BABEL_TYPES_8_BREAKING: true test-windows: name: Test on Windows needs: build runs-on: windows-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Install run: yarn install - uses: actions/download-artifact@v2 with: name: babel-artifact - name: Generate runtime helpers run: | make build-plugin-transform-runtime-dist - name: Test on Windows # Hack: --color has supports-color@5 returned true for GitHub CI # Remove once `chalk` is bumped to 4.0. run: yarn jest --ci --color 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@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Install run: yarn install - uses: actions/download-artifact@v2 with: name: babel-artifact - 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@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: "*" - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} # See https://github.com/babel/babel/pull/12906 - name: Support self-references on old Node.js run: | echo '{ "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@v2 with: name: babel-artifact - name: Generate runtime helpers run: | make build-plugin-transform-runtime-dist - name: Generate absoluteRuntime tests run: yarn test:runtime:generate-absolute-runtime - name: Test bundlers run: yarn test:runtime:bundlers - name: Test Node.js run: yarn test:runtime:node - name: Use Node.js 10 uses: actions/setup-node@v2-beta 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@v2-beta with: node-version: "12.0" # quoted, otherwise it's just 13 - name: Test Node.js 12.0 run: yarn test:runtime:node - name: Use Node.js 12.17 uses: actions/setup-node@v2-beta with: node-version: 12.17 - name: Test Node.js 12.17 run: yarn test:runtime:node - name: Use Node.js 13.0 uses: actions/setup-node@v2-beta with: node-version: "13.0" # quoted, otherwise it's just 13 - name: Test Node.js 13.0 run: yarn test:runtime:node - name: Use Node.js 13.2 uses: actions/setup-node@v2-beta with: node-version: 13.2 - name: Test Node.js 13.2 run: yarn test:runtime:node - name: Use Node.js 13.6 uses: actions/setup-node@v2-beta with: node-version: 13.6 - name: Test Node.js 13.6 run: yarn test:runtime:node - name: Use Node.js 13.7 uses: actions/setup-node@v2-beta with: node-version: 13.7 - name: Test Node.js 13.7 run: yarn test:runtime:node - name: Use Node.js 14.2 uses: actions/setup-node@v2-beta with: node-version: 14.2 - name: Test Node.js 14.2 run: yarn test:runtime:node - name: Use Node.js 16.5 uses: actions/setup-node@v2-beta with: node-version: 16.5 - name: Test Node.js 16.5 run: yarn test:runtime:node - name: Use Node.js 16.6 uses: actions/setup-node@v2-beta with: node-version: 16.6 - name: Test Node.js 16.6 run: yarn test:runtime:node e2e-publish: name: Publish to local Verdaccio registry needs: prepare-yarn-cache runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 with: fetch-depth: 0 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: "*" - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - name: Setup Yarn cache uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('yarn.lock') }} - name: Publish run: ./scripts/integration-tests/publish-local.sh - uses: actions/upload-artifact@v2 with: name: verdaccio-workspace path: /tmp/verdaccio-workspace e2e-tests: name: E2E needs: e2e-publish runs-on: ubuntu-latest strategy: fail-fast: false matrix: project: - babel - babel-old-version - create-react-app - vue-cli - jest - react-native - prettier steps: - name: Checkout code uses: actions/checkout@v2 - name: Use Node.js latest uses: actions/setup-node@v2-beta with: node-version: "*" - uses: actions/download-artifact@v2 with: name: verdaccio-workspace path: /tmp/verdaccio-workspace - name: Test run: ./scripts/integration-tests/e2e-${{ matrix.project }}.sh