Skip to content

Commit

Permalink
ci: migrate deploying doc site job to GHA
Browse files Browse the repository at this point in the history
Migrate the deployment doc site job from CircleCI to Github Actions
  • Loading branch information
josephperrott committed Oct 19, 2023
1 parent 17f259d commit 56b10ef
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 310 deletions.
231 changes: 5 additions & 226 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,237 +1,16 @@
# Configuration file for https://circleci.com/gh/angular/components
# This config is remaining in place to prevent pull requests failing because of CircleCI config missing.

# Note: YAML anchors allow an object to be re-used, reducing duplication.
# The ampersand declares an alias for an object, then later the `<<: *name`
# syntax dereferences it.
# See http://blog.daemonl.com/2016/02/yaml.html
# To validate changes, use an online parser, eg.
# http://yaml-online-parser.appspot.com/

var_1: &docker_image cimg/node:18.17.0
var_2: &docker-browser-image cimg/node:18.17.0-browsers

# **Note**: When updating the beginning of the cache key, also update the cache key to match
# the new cache key prefix. This allows us to take advantage of CircleCI's fallback caching.
# Read more here: https://circleci.com/docs/2.0/caching/#restoring-cache.
var_3: &cache_key v16-ng-mat-{{ checksum ".bazelversion" }}-{{ checksum "tools/postinstall/apply-patches.js" }}-{{ checksum "WORKSPACE" }}-{{ checksum "yarn.lock" }}
# We want to invalidate the cache if the postinstall patches change. In order to apply new
# patches, a clean version of the node modules is needed. Additionally, we invalidate the cache
# if the Bazel version changes. We do this because otherwise the `bazelisk` cache folder will
# contain all previously used versions and ultimately cause the cache restoring to be slower.
var_4: &cache_fallback_key v16-ng-mat-{{ checksum ".bazelversion" }}-{{ checksum "tools/postinstall/apply-patches.js" }}-

# Settings common to each job
var_5: &job_defaults
working_directory: ~/ng
docker:
- image: *docker_image

# Restores the cache that could be available for the current Yarn lock file. The cache usually
# includes the node modules and the Bazel repository cache.
var_7: &restore_cache
restore_cache:
keys:
- *cache_key
- *cache_fallback_key

# Saves the cache for the current Yarn lock file. We store the node modules and the Bazel
# repository cache in order to make subsequent builds faster.
var_8: &save_cache
save_cache:
key: *cache_key
paths:
- 'node_modules'
- '~/.cache/bazelisk'
- '~/bazel_repository_cache'

# Decryption token that is used to decode the GCP credentials file in ".circleci/gcp_token".
var_9: &gcp_decrypt_token 'angular'

# Job step that ensures that the node module dependencies are installed and up-to-date. We use
# Yarn with the frozen lockfile option in order to make sure that lock file and package.json are
# in sync. Unlike in Travis, we don't need to manually purge the node modules if stale because
# CircleCI automatically discards the cache if the checksum of the lock file has changed.
var_10: &yarn_install
run:
name: 'Installing project dependencies'
command: yarn install --frozen-lockfile --non-interactive

# Installs all dependencies but does not enforce a frozen lockfile. Helpful when
# the "package.json" is updated as part of a CI job. e.g. when setting up snapshots.
var_11: &yarn_install_loose_lockfile
run:
name: 'Installing project dependencies'
command: yarn install --non-interactive

# Sets up the Bazel config which is specific for CircleCI builds.
var_12: &setup_bazel_ci_config
run:
name: 'Setting up Bazel configuration for CI'
# Note: We add the remote config flag to the user bazelrc file that is not tracked
# by Git. This is necessary to avoid stamping builds with `.with-local-changes`.
command: echo "import %workspace%/.circleci/bazel.rc" >> ./.bazelrc.user

# Attaches the release output which has been stored in the workspace to the current job.
# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs
var_13: &attach_release_output
attach_workspace:
at: dist/

# Branch filter that we can specify for jobs that should only run on publish branches. This filter
# is used to ensure that not all upstream branches will be published as Github builds
# (e.g. revert branches, feature branches)
var_14: &publish_branches_filter
branches:
only:
- main
# 6.0.x, 7.1.x, etc.
- /\d+\.\d+\.x/

# Branch filter that is usually applied to all jobs. Since there is no way within CircleCI to
# exclude a branch for all defined jobs, we need to manually specify the filters for each job.
# In order to reduce duplication we use a YAML anchor that just always excludes the "_presubmit"
# branch. We don't want to run Circle for the temporary "_presubmit" branch which is reserved
# for the caretaker.
var_15: &ignore_presubmit_branch_filter
branches:
ignore:
- '_presubmit'

# Runs a script that sets up the Bazel remote execution. This will be used by jobs that run
# Bazel primarily and should benefit from remote caching and execution.
var_16: &setup_bazel_remote_execution
devinfra/setup-bazel-remote-exec:
bazelrc: ./.bazelrc.user

# Sets up the bazel binary globally. We don't want to access bazel through Yarn and NodeJS
# because it could mean that the Bazel child process only has access to limited memory.
var_17: &setup_bazel_binary
run:
name: 'Setting up global Bazel binary'
command: ./scripts/circleci/setup_bazel_binary.sh

# Sets up the Angular snapshot builds.
var_18: &setup_snapshot_builds
run:
name: 'Setting up Angular snapshot builds'
command: node ./scripts/circleci/setup-angular-snapshots.js main

# Filter which ensures that jobs only run for pull requests.
var_19: &only_on_pull_requests_filter
branches:
only:
- /pull\/\d+/

# Anchor for a step that notifies Slack when preceding steps failed.
var_20: &slack_notify_on_failure
run:
name: 'Notifying team about job failure'
when: on_fail
command: yarn ci-notify-slack-failure

# Branch filter that only matches the main branch.
var_21: &only_main_branch_filter
branches:
only:
- main

# -----------------------------
# Container version of CircleCI
# -----------------------------
version: 2.1

# Configures CircleCI orbs for this pipeline. Orbs allow consumption of publicly shared
# CircleCI commands, jobs, configuration elements or executors. Read more about orbs here:
# https://circleci.com/docs/2.0/orb-intro/
orbs:
# Set up the `queue` orb that allows us to queue up builds across jobs. We use it
# to make sure that snapshot builds are not deployed out of order, resulting in Git
# push conflicts.
queue: eddiewebb/[email protected]
devinfra: angular/[email protected]

commands:
checkout_and_rebase:
description: Checkout and rebase the repository
steps:
- checkout
# After checkout, rebase on top of target branch.
- devinfra/rebase-pr-on-target-branch:
base_revision: << pipeline.git.base_revision >>
head_revision: << pipeline.git.revision >>

# -----------------------------------------------------------------------------------------
# Job definitions. Jobs which are defined just here, will not run automatically. Each job
# must be part of a workflow definition in order to run for PRs and push builds.
# -----------------------------------------------------------------------------------------
jobs:
# -------------------------------------------------------------------------------------------
# Job that builds all release packages. The built packages can be then used in the same
# workflow to publish snapshot builds.
# -------------------------------------------------------------------------------------------
build_release_packages:
<<: *job_defaults
resource_class: xlarge
environment:
GCP_DECRYPT_TOKEN: *gcp_decrypt_token
steps:
- checkout_and_rebase
- *restore_cache
- *setup_bazel_ci_config
- *setup_bazel_remote_execution
- *yarn_install
- *setup_bazel_binary

- run: yarn build-and-check-release-output
- run: yarn check-tooling-setup

# TODO(devversion): replace this with bazel tests that run Madge. This is
# cumbersome and doesn't guarantee no circular deps for other entry-points.
- run: yarn madge --circular dist/releases/cdk/schematics/index.js

# Store the release output in the workspace storage. This means that other jobs
# in the same workflow can attach the release output to their job.
- persist_to_workspace:
root: dist
paths:
- 'releases/**/*'
- *slack_notify_on_failure

# ----------------------------------------
# Job that publishes the docs site
# ----------------------------------------
deploy_docs_site:
pass:
docker:
- image: *docker-browser-image
resource_class: xlarge
environment:
GCP_DECRYPT_TOKEN: *gcp_decrypt_token
- image: cimg/base:2022.05
steps:
- checkout_and_rebase
- *restore_cache
- *setup_bazel_ci_config
- *setup_bazel_remote_execution
- *yarn_install
- *setup_bazel_binary

- run: yarn ci-push-deploy-docs-app
- *slack_notify_on_failure
- run: echo "This too shall pass (always)"

# ----------------------------------------------------------------------------------------
# Workflow definitions. A workflow usually groups multiple jobs together. This is useful if
# one job depends on another.
#
# NOTE: When updating this configuration section, make sure to update GitHub robot
# config to match the new workflow jobs.
# ----------------------------------------------------------------------------------------
workflows:
version: 2

default_workflow:
jobs:
- build_release_packages:
filters: *ignore_presubmit_branch_filter
- deploy_docs_site:
filters: *publish_branches_filter
requires:
- build_release_packages
- pass
20 changes: 20 additions & 0 deletions .github/actions/slack/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: 'Notify slack on failure'
description: 'Notifying Slack of failure'

inputs:
JOB_NAME:
description: 'Name of the job'
required: true
SLACK_BOT_TOKEN:
required: true

runs:
using: 'composite'
steps:
- name: Notify about failed test
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v=v1.24.0
with:
channel-id: 'C015EBF2XB6'
slack-message: '${{ inputs.JOB_NAME }} 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: ${{ inputs.SLACK_BOT_TOKEN }}
4 changes: 0 additions & 4 deletions .github/angular-robot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,6 @@ merge:
- 'pr: needs*'
- 'presubmit failures'

# list of PR statuses that need to be successful
requiredStatuses:
- 'ci/circleci: build_release_packages'

# the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable
# {{MERGE_LABEL}} will be replaced by the value of the mergeLabel option
# {{PLACEHOLDER}} will be replaced by the list of failing checks
Expand Down
Loading

0 comments on commit 56b10ef

Please sign in to comment.