name: CI on: push: branches: - main - '[0-9]+.[0-9]+.x' 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@5774b71c01a55c4c998f858ee37d3b77ae704c31 with: cache-node-modules: true node-module-directories: | ./node_modules ./aio/node_modules - name: Install node modules run: yarn install --frozen-lockfile - name: Install node modules in aio run: yarn install --frozen-lockfile --cwd aio - name: Check code lint run: yarn -s tslint - name: Check code lint in aio run: yarn -s --cwd aio lint - 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 # Commit message validation is only done on pull requests as its too late to validate once # it has been merged. if: github.event_name == 'pull_request' run: yarn ng-dev commit-message validate-range ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} - name: Check code format # Code formatting checks are only done on pull requests as its too late to validate once # it has been merged. if: github.event_name == 'pull_request' run: yarn ng-dev format changed --check ${{ github.event.pull_request.base.sha }} devtools: runs-on: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@5774b71c01a55c4c998f858ee37d3b77ae704c31 with: cache-node-modules: true - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - 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@5774b71c01a55c4c998f858ee37d3b77ae704c31 with: cache-node-modules: true - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel Remote Caching uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Install node modules run: yarn install --frozen-lockfile --network-timeout 100000 - name: Run CI tests for framework run: yarn test:ci aio: runs-on: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c83e99a12397014162531ca125c94549db55dd84 with: cache-node-modules: true node-module-directories: | ./aio/node_modules - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@c83e99a12397014162531ca125c94549db55dd84 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@c83e99a12397014162531ca125c94549db55dd84 - name: Install node modules for aio run: yarn install --cwd aio --frozen-lockfile - name: Run AIO tests with upstream packages run: yarn --cwd aio test:ci - name: Check generated bundle sizes run: yarn --cwd aio payload-size adev: runs-on: labels: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Install node modules run: yarn install --frozen-lockfile - name: Build adev to ensure it continues to work run: yarn bazel test --config=aio_local_deps //adev:test aio-local: runs-on: labels: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c83e99a12397014162531ca125c94549db55dd84 with: cache-node-modules: true node-module-directories: | ./aio/node_modules - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@c83e99a12397014162531ca125c94549db55dd84 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@c83e99a12397014162531ca125c94549db55dd84 - name: Install node modules run: yarn install --cwd aio --frozen-lockfile - name: Run AIO tests with local packages run: yarn --cwd aio test-local:ci - name: Check generated bundle sizes run: yarn --cwd aio payload-size aio-local aio-deploy: needs: [aio] if: needs.aio.result == 'success' && github.event_name == 'push' runs-on: labels: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@c83e99a12397014162531ca125c94549db55dd84 with: cache-node-modules: true node-module-directories: | ./aio/node_modules - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@c83e99a12397014162531ca125c94549db55dd84 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@c83e99a12397014162531ca125c94549db55dd84 - name: Install node modules for aio run: yarn install --cwd aio --frozen-lockfile - name: Set the stable branch environment variable id: latest_version run: | echo "CI_STABLE_BRANCH=$(npm info @angular/core dist-tags.latest | sed -r 's/^\s*([0-9]+\.[0-9]+)\.[0-9]+.*$/\1.x/')" >> $GITHUB_OUTPUT echo "CI_BRANCH=$(echo ${{ github.event.ref }} | cut -d '/' -f 3)" >> $GITHUB_OUTPUT - name: Deploy aio to production env: CI_AIO_MIN_PWA_SCORE: '95' CI_COMMIT: ${{ github.event.after }} CI_REPO_NAME: 'angular' CI_PULL_REQUEST: 'false' CI_REPO_OWNER: 'angular' CI_BUILD_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' CI_STABLE_BRANCH: ${{ steps.latest_version.outputs.CI_STABLE_BRANCH }} CI_BRANCH: ${{ steps.latest_version.outputs.CI_BRANCH }} CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN: ${{ secrets.AIO_DEPLOY_TOKEN }} CI_SECRET_PAYLOAD_FIREBASE_TOKEN: ${{ secrets.AIO_PAYLOAD_TOKEN }} run: yarn --cwd aio deploy-production - name: Notify about failed deployment if: ${{ failure() }} uses: slackapi/slack-github-action@2a8087d4af6f83146a87539a70defe909fe6dbe6 # v=v1.24.0 with: channel-id: 'C07DT5M6V,CKV1F72BG' slack-message: 'Deploy to aio job failed for ${{ github.base_ref }} branch failed on build ${{ github.event.after }}: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' env: SLACK_BOT_TOKEN: ${{ secrets.ANGULAR_ROBOT_SLACK_TOKEN }} publish-snapshots: if: github.event_name == 'push' runs-on: labels: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@5774b71c01a55c4c998f858ee37d3b77ae704c31 with: cache-node-modules: true - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Install node modules run: yarn install --frozen-lockfile - run: echo "https://${{secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN}}:@github.com" > ${HOME}/.git_credentials - run: yarn build - run: ./scripts/ci/publish-build-artifacts.sh zone-js: runs-on: labels: ubuntu-latest-4core steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@5774b71c01a55c4c998f858ee37d3b77ae704c31 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@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - 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 bazel-saucelabs: # TODO: Replace legacy job with Bazel saucelabs job. if: github.event_name == 'push' runs-on: ubuntu-latest-4core env: JOBS: 2 steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@5774b71c01a55c4c998f858ee37d3b77ae704c31 with: cache-node-modules: true # Checking out the pull request commit is intended here as we need to run the changed code tests. ref: ${{ github.event.pull_request.head.sha }} - name: Install node modules run: yarn install --frozen-lockfile - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel Remote Caching uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Set up Sauce Tunnel Daemon run: yarn bazel run //tools/saucelabs-daemon/background-service -- $JOBS & env: SAUCE_TUNNEL_IDENTIFIER: angular-framework-${{ github.run_number }} SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - name: Run all saucelabs bazel tests run: | TESTS=$(./node_modules/.bin/bazelisk query --output label '(kind(karma_web_test, ...) intersect attr("tags", "saucelabs", ...)) except attr("tags", "fixme-saucelabs", ...)') yarn bazel test --config=saucelabs --jobs=$JOBS ${TESTS} adev-deploy: needs: [adev] if: needs.adev.result == 'success' && github.event_name == 'push' && github.ref_name == 'main' env: DEPLOY_PROJECT: angular-dev-site DEPLOY_SITE: angular-dev-site runs-on: ubuntu-latest steps: - name: Initialize environment uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Setup Bazel RBE uses: angular/dev-infra/github-actions/bazel/configure-remote@5774b71c01a55c4c998f858ee37d3b77ae704c31 - name: Install node modules run: yarn install --frozen-lockfile - name: Build adev to ensure it continues to work run: yarn bazel build --config=aio_local_deps //adev:build - name: Move generated project files into deployment directory run: cp -r dist/bin/adev/build adev/build - name: Setup firebase context run: | npx -y firebase-tools@latest target:clear --config adev/firebase.json --project ${{ env.DEPLOY_PROJECT }} hosting angular-docs npx -y firebase-tools@latest target:apply --config adev/firebase.json --project ${{ env.DEPLOY_PROJECT }} hosting angular-docs ${{ env.DEPLOY_SITE }} - name: Deploy to firebase uses: FirebaseExtended/action-hosting-deploy@120e124148ab7016bec2374e5050f15051255ba2 # v0.7.1 with: entryPoint: './adev' firebaseServiceAccount: ${{ secrets.ANGULAR_DEV_SITE_DEPLOY }} projectId: ${{ env.DEPLOY_PROJECT }} channelId: live