From ac0e24e388ed2056cc29604fccf33395a337e906 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 25 Jul 2024 13:49:18 +0200 Subject: [PATCH] perf(ci): cache dependencies (#5653) * add dependency cache * ci trigger * ci * run scripts, no clean, ci trigger * assets * missing dependency * ci, trigger * trigger * a * typos * ci * flags * ci * trigger * needs pre-ci * ci, trigger * v4, trigger * update action versions * revert test changes --- .github/workflows/monkey-ci.yml | 107 ++++++++++++++++++++++++++----- .github/workflows/pretty-fix.yml | 2 +- 2 files changed, 93 insertions(+), 16 deletions(-) diff --git a/.github/workflows/monkey-ci.yml b/.github/workflows/monkey-ci.yml index 8485d81d0..93809d406 100644 --- a/.github/workflows/monkey-ci.yml +++ b/.github/workflows/monkey-ci.yml @@ -33,7 +33,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v2 + - uses: dorny/paths-filter@v3 id: filter with: filters: | @@ -62,20 +62,58 @@ jobs: echo "should-build-fe=${{ steps.filter.outputs.fe-src }}" >> $GITHUB_OUTPUT echo "assets-json=${{ steps.filter.outputs.json }}" >> $GITHUB_OUTPUT + prime-cache: + name: prime-cache + runs-on: ubuntu-latest + needs: [pre-ci] + if: needs.pre-ci.outputs.should-build-be == 'true' || needs.pre-ci.outputs.should-build-fe == 'true' || needs.pre-ci.outputs.should-build-pkg == 'true' || needs.pre-ci.outputs.assets-json == 'true' + steps: + - uses: actions/checkout@v4 + + - name: Cache node modules + id: cache-npm + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} + name: Install dependencies + run: npm install --prefer-offline --no-audit + ci-be: name: ci-be - needs: [pre-ci] + needs: [pre-ci, prime-cache] runs-on: ubuntu-latest if: needs.pre-ci.outputs.should-build-be == 'true' steps: - uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} + - name: Cache node modules + id: cache-npm + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install dependencies - run: npm ci + run: npm install --prefer-offline --no-audit - name: Check pretty run: npm run pretty-code-be @@ -91,13 +129,13 @@ jobs: ci-fe: name: ci-fe - needs: [pre-ci] + needs: [pre-ci, prime-cache] runs-on: ubuntu-latest if: needs.pre-ci.outputs.should-build-fe == 'true' steps: - uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} @@ -105,8 +143,21 @@ jobs: working-directory: ./frontend/src/ts/constants run: mv ./firebase-config-example.ts ./firebase-config.ts && cp ./firebase-config.ts ./firebase-config-live.ts + - name: Cache node modules + id: cache-npm + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install dependencies - run: npm ci + run: npm install --prefer-offline --no-audit - name: Check pretty run: npm run pretty-code-fe @@ -122,12 +173,12 @@ jobs: ci-assets: name: ci-assets - needs: [pre-ci] + needs: [pre-ci, prime-cache] runs-on: ubuntu-latest if: needs.pre-ci.outputs.assets-json == 'true' steps: - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v2 + - uses: dorny/paths-filter@v3 id: filter with: filters: | @@ -142,12 +193,25 @@ jobs: - 'frontend/static/challenges/*.json' - 'frontend/static/layouts/*.json' - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} + - name: Cache node modules + id: cache-npm + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install dependencies - run: npm ci + run: npm install --prefer-offline --no-audit - name: Lint JSON run: npm run pr-check-lint-json @@ -166,18 +230,31 @@ jobs: ci-pkg: name: ci-pkg - needs: [pre-ci] + needs: [pre-ci, prime-cache] runs-on: ubuntu-latest if: needs.pre-ci.outputs.should-build-pkg == 'true' steps: - uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} + - name: Cache node modules + id: cache-npm + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install dependencies - run: npm ci + run: npm install --prefer-offline --no-audit - name: Check pretty run: npm run pretty-code-pkg @@ -195,7 +272,7 @@ jobs: permissions: write-all name: on-failure runs-on: ubuntu-latest - needs: [ci-be, ci-fe, ci-assets] + needs: [ci-be, ci-fe, ci-assets, ci-pkg] if: ${{ always() && contains(needs.*.result, 'failure') && github.ref != 'refs/heads/master' }} steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/pretty-fix.yml b/.github/workflows/pretty-fix.yml index d1aff0983..e65ee4a50 100644 --- a/.github/workflows/pretty-fix.yml +++ b/.github/workflows/pretty-fix.yml @@ -21,7 +21,7 @@ jobs: echo "PR_TITLE=Prettier Fix - $(date)" >> $GITHUB_ENV - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "18.20.4"