From e523d2785e4e38282291dd39b3139235dfdb0ef0 Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Fri, 16 Dec 2022 22:05:00 +0000 Subject: [PATCH] ci: reset cache when patches change (#48538) This will help making it easier to update patches when `node_modules` are cached. Note that most of the time this shouldn't be necessary as we only cache the Yarn `.cache` for the non-windows jobs. Windows job caches `node_modules` directly- so could be affected and needs a cache reset/wipe occasionally when patches change (even though it's rarely). Long-term we can remove this when the esm patches are no longer needed. PR Close #48538 --- .circleci/config.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cd63fe12a09..738b4e6b504 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,16 +23,18 @@ version: 2.1 # (See https://support.circleci.com/hc/en-us/articles/360012618473-Creating-a-daily-cache.) # **NOTE 2 **: If you change the cache key prefix, also sync the cache_key_fallback to match. # **NOTE 3 **: Keep the static part of the cache key as prefix to enable correct fallbacks. +# **NOTE 4 **: To make sure modified patches can be applied without needing to manually update the cache key, +# the fallback cache key will not match if patches have been modified. # See https://circleci.com/docs/2.0/caching/#restoring-cache for how prefixes work in CircleCI. -var_3: &cache_key v8-angular-node-16-{{ checksum "month.txt" }}-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }}-{{ checksum "aio/yarn.lock" }} +var_3: &cache_key v8-angular-node-16-{{ checksum "month.txt" }}-{{ checksum "patches.hash"}}-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }}-{{ checksum "aio/yarn.lock" }} # We invalidate the cache if the Bazel version changes because otherwise the `bazelisk` cache # folder will contain all previously used versions and ultimately cause the cache restoring to # be slower due to its growing size. -var_4: &cache_key_fallback v8-angular-node-16-{{ checksum "month.txt" }}-{{ checksum ".bazelversion" }} +var_4: &cache_key_fallback v8-angular-node-16-{{ checksum "month.txt" }}-{{ checksum "patches.hash"}}-{{ checksum ".bazelversion" }} # Windows needs its own cache key because binaries in node_modules are different. -var_3_win: &cache_key_win v10-angular-win-node-16-{{ checksum "month.txt" }}-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }} -var_4_win: &cache_key_win_fallback v10-angular-win-node-16-{{ checksum "month.txt" }}-{{ checksum ".bazelversion" }} +var_3_win: &cache_key_win v10-angular-win-node-16-{{ checksum "month.txt" }}-{{ checksum "patches.hash"}}-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }} +var_4_win: &cache_key_win_fallback v10-angular-win-node-16-{{ checksum "month.txt" }}-{{ checksum "patches.hash"}}-{{ checksum ".bazelversion" }} # Workspace initially persisted by the `setup` job, and then enhanced by `build-npm-packages`. # https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs @@ -182,6 +184,12 @@ commands: # snapshot stamping would have the `-with-local-changes` suffix. command: date +%Y-%m > month.txt + capture_patches_for_cache_key: + description: Hashes all patches so that the cache can be reset upon changes. + steps: + - run: | + md5sum tools/esm-interop/patches/npm/* > patches.hash + yarn_install: description: Install dependencies steps: @@ -214,6 +222,7 @@ jobs: steps: - checkout - save_month_to_file + - capture_patches_for_cache_key - init_environment - devinfra/rebase-pr-on-target-branch: base_revision: << pipeline.git.base_revision >> @@ -590,6 +599,7 @@ jobs: steps: - checkout - save_month_to_file + - capture_patches_for_cache_key - init_environment # Setup the proper NodeJS version. The image comes pre-installed with `nvm-windows`.