name: Pull Request on: pull_request: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: {} defaults: run: shell: bash jobs: lint: runs-on: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: cache-node-modules: true - name: Install node modules run: yarn install --frozen-lockfile - name: Check code lint run: yarn -s tslint - name: Check for circular dependencies run: yarn -s ts-circular-deps:check - name: Validate pull approve configuration run: yarn -s ng-dev pullapprove verify - name: Validate angular robot configuration run: yarn -s ng-dev ngbot verify - name: Confirm code builds with typescript as expected run: yarn -s check-tooling-setup - name: Check commit message run: yarn ng-dev commit-message validate-range ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} - name: Check code format run: yarn ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses uses: angular/dev-infra/github-actions/linting/licenses@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: allow-dependencies-licenses: 'pkg:npm/google-protobuf@' devtools: runs-on: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: cache-node-modules: true - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Install node modules run: yarn install --frozen-lockfile - name: Run unit tests run: yarn devtools:test - name: Test build run: yarn devtools:build:chrome test: runs-on: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: cache-node-modules: true - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Bazel Remote Caching uses: angular/dev-infra/github-actions/bazel/configure-remote@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Install node modules run: yarn install --frozen-lockfile --network-timeout 100000 - name: Run CI tests for framework run: yarn test:ci artifacts: needs: [test] if: needs.test.result == 'success' runs-on: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: cache-node-modules: true - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Bazel Remote Caching uses: angular/dev-infra/github-actions/bazel/configure-remote@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Install node modules run: yarn install --frozen-lockfile --network-timeout 100000 - name: Run CI tests for framework run: yarn tsx ./scripts/build/build-packages-dist.mts - name: Archive build artifacts uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: pr-artifacts-${{ github.event.number }} path: dist/packages-dist/ adev: runs-on: labels: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Install node modules run: yarn install --frozen-lockfile - name: Build adev in fast mode to ensure it continues to work run: yarn bazel build //adev:build --config=release - name: Run tests run: yarn bazel test //adev/... zone-js: runs-on: labels: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: cache-node-modules: true node-module-directories: | ./node_modules ./packages/zone.js/node_modules ./packages/zone.js/test/typings/node_modules - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Install node modules run: yarn install --frozen-lockfile - run: | yarn bazel build \ //packages/zone.js/bundles:zone.umd.js \ //packages/zone.js:npm_package \ //packages/zone.js/test/closure:closure_js \ - run: | rm -Rf packages/zone.js/build rm -Rf packages/zone.js/test/extra/*.umd.js mkdir -p packages/zone.js/build/ mkdir -p packages/zone.js/build/test/ cp dist/bin/packages/zone.js/bundles/zone.umd.js packages/zone.js/build/zone.umd.js cp dist/bin/packages/zone.js/npm_package/bundles/zone-mix.umd.js ./packages/zone.js/test/extra/ cp dist/bin/packages/zone.js/npm_package/bundles/zone-patch-electron.umd.js ./packages/zone.js/test/extra/ cp dist/bin/packages/zone.js/test/closure/zone.closure.mjs ./packages/zone.js/build/test/zone.closure.mjs # Install - run: yarn --cwd packages/zone.js install --frozen-lockfile --non-interactive # Run zone.js tools tests - run: yarn --cwd packages/zone.js promisefinallytest - run: yarn --cwd packages/zone.js jest:test - run: yarn --cwd packages/zone.js jest:nodetest - run: yarn --cwd packages/zone.js electrontest - run: yarn --cwd packages/zone.js/test/typings install --frozen-lockfile --non-interactive - run: yarn --cwd packages/zone.js/test/typings test saucelabs: runs-on: ubuntu-latest-4core env: SAUCE_TUNNEL_IDENTIFIER: angular-framework-${{ github.run_number }} steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a with: cache-node-modules: true - name: Install node modules run: yarn install --frozen-lockfile - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Setup Saucelabs Variables uses: angular/dev-infra/github-actions/saucelabs@8d3cb7b9e1b3edd1dc168376689d27407d2dfa7a - name: Starting Saucelabs tunnel service run: ./tools/saucelabs/sauce-service.sh run & # Build test fixtures for a test that rely on Bazel-generated fixtures. Note that disabling # specific tests which are reliant on such generated fixtures is not an option as SystemJS # in the Saucelabs legacy job always fetches referenced files, even if the imports would be # guarded by an check to skip in the Saucelabs legacy job. We should be good running such # test in all supported browsers on Saucelabs anyway until this job can be removed. - name: Preparing Bazel-generated fixtures required in legacy tests run: | yarn bazel build //packages/core/test:downleveled_es5_fixture //packages/common/locales # Needed for the ES5 downlevel reflector test in `packages/core/test/reflection`. mkdir -p dist/legacy-test-out/core/test/reflection/ cp dist/bin/packages/core/test/reflection/es5_downleveled_inheritance_fixture.js \ dist/legacy-test-out/core/test/reflection/es5_downleveled_inheritance_fixture.js # Locale files are needed for i18n tests running within Saucelabs. These are added # directly as sources so that the TypeScript compilation of `/packages/tsconfig.json` # can succeed. Note that the base locale and currencies files are checked-in, so # we do not need to re-generate those through Bazel. mkdir -p packages/common/locales/extra cp dist/bin/packages/common/locales/*.ts packages/common/locales cp dist/bin/packages/common/locales/extra/*.ts packages/common/locales/extra - name: Build bundle of tests to run on Saucelabs run: node tools/legacy-saucelabs/build-saucelabs-test-bundle.mjs - name: Wait and confirm Saucelabs tunnel has connected run: ./tools/saucelabs/sauce-service.sh ready-wait timeout-minutes: 3 - name: Running tests on Saucelabs. run: KARMA_WEB_TEST_MODE=SL_REQUIRED yarn karma start ./karma-js.conf.js --single-run - name: Stop Saucelabs tunnel service run: ./tools/saucelabs/sauce-service.sh stop