https://github.com/angular/angular
Raw File
Tip revision: 710a24a7d058143e94cbc2db905523bfeb257397 authored by Andrew Kushnir on 20 November 2023, 19:39:23 UTC
release: cut the v17.0.4 release
Tip revision: 710a24a
ci.yml
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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        with:
          cache-node-modules: true
      - name: Setup Bazel
        uses: angular/dev-infra/github-actions/bazel/setup@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel RBE
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        with:
          cache-node-modules: true
      - name: Setup Bazel
        uses: angular/dev-infra/github-actions/bazel/setup@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel Remote Caching
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        with:
          cache-node-modules: true
          node-module-directories: |
            ./aio/node_modules
      - name: Setup Bazel
        uses: angular/dev-infra/github-actions/bazel/setup@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel RBE
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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

  aio-local:
    runs-on:
      labels: ubuntu-latest-4core
    steps:
      - name: Initialize environment
        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        with:
          cache-node-modules: true
          node-module-directories: |
            ./aio/node_modules
      - name: Setup Bazel
        uses: angular/dev-infra/github-actions/bazel/setup@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel RBE
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        with:
          cache-node-modules: true
          node-module-directories: |
            ./aio/node_modules
      - name: Setup Bazel
        uses: angular/dev-infra/github-actions/bazel/setup@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel RBE
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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@e28cf165c92ffef168d23c5c9000cffc8a25e117 # 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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        with:
          cache-node-modules: true
      - name: Setup Bazel
        uses: angular/dev-infra/github-actions/bazel/setup@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel RBE
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel RBE
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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 \
          //packages/zone.js:zone_externs

      - run: |
          mkdir -p packages/zone.js/build/
          mkdir -p packages/zone.js/build/test/
          mkdir -p packages/zone.js/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
          cp dist/bin/packages/zone.js/zone_externs.js ./packages/zone.js/build/zone_externs.js

        # Install
      - run: yarn --cwd packages/zone.js install --frozen-lockfile --non-interactive
        # Run zone.js tools tests
      - run: yarn --cwd packages/zone.js promisetest
      - 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 closuretest
      - 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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
        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@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - name: Setup Bazel Remote Caching
        uses: angular/dev-infra/github-actions/bazel/configure-remote@1173ab9b7174e4ec6ff3a3455226ca75594edaa0
      - 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}
back to top