From e4983f5eb7a835b5976c46d40bf0b27f6a0972a5 Mon Sep 17 00:00:00 2001 From: stabgan Date: Thu, 27 Mar 2025 00:49:56 +0530 Subject: [PATCH] Add advanced caching to GitHub Actions workflow for faster builds --- .github/workflows/publish.yml | 58 +++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d8f309b..fc01621 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,6 +19,17 @@ jobs: node-version: '18' cache: 'npm' + - name: Cache dependencies + uses: actions/cache@v3 + id: npm-cache + with: + path: | + **/node_modules + ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-npm- + - name: Configure npm run: | npm config set strict-ssl false @@ -27,8 +38,17 @@ jobs: npm config set fetch-retry-maxtimeout 120000 - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' run: npm cache clean --force && npm install --legacy-peer-deps --no-optional + - name: Cache build output + uses: actions/cache@v3 + with: + path: dist + key: ${{ runner.os }}-build-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-build- + - name: Build TypeScript run: npm run build @@ -53,6 +73,18 @@ jobs: with: node-version: '18' registry-url: 'https://registry.npmjs.org' + cache: 'npm' + + - name: Cache dependencies + uses: actions/cache@v3 + id: npm-cache + with: + path: | + **/node_modules + ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-npm- - name: Configure npm run: | @@ -62,6 +94,7 @@ jobs: npm config set fetch-retry-maxtimeout 120000 - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' run: npm cache clean --force && npm install --legacy-peer-deps --no-optional - name: Download build artifacts @@ -89,6 +122,14 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + - name: Login to Docker Hub uses: docker/login-action@v3 with: @@ -124,11 +165,22 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: | + type=gha + type=local,src=/tmp/.buildx-cache + cache-to: | + type=gha,mode=max + type=local,dest=/tmp/.buildx-cache-new,mode=max build-args: | NPM_CONFIG_STRICT_SSL=false NPM_CONFIG_REGISTRY=https://registry.npmjs.org/ NPM_CONFIG_FETCH_RETRY_MINTIMEOUT=20000 NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT=120000 - NODE_ENV=development \ No newline at end of file + NODE_ENV=development + + # Temp fix for https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache \ No newline at end of file