chore: Delete cache-build cache entries on PR close (#26312)
* chore: Delete cache-build cache entries on PR close Co-Authored-By: keith@cal.com <keithwillcode@gmail.com> * refactor: Extract cache-build key generation into reusable action - Create .github/actions/cache-build-key to generate cache keys - Update cache-build action to use the shared key action - Update delete workflow to use the shared key action - Checkout PR head SHA in delete workflow for correct hash computation Co-Authored-By: keith@cal.com <keithwillcode@gmail.com> * fix: Remove PR head SHA checkout per review feedback Co-Authored-By: keith@cal.com <keithwillcode@gmail.com> * refactor: Use prefix-based cache deletion for simpler cleanup - Use useblacksmith/cache-delete prefix mode to delete all caches matching branch - Remove dependency on cache-build-key action for deletion - No checkout needed since we're just using the branch name as prefix Co-Authored-By: keith@cal.com <keithwillcode@gmail.com> * refactor: Simplify cache key by removing Linux and node version segments Co-Authored-By: keith@cal.com <keithwillcode@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
Devin AI
parent
2b61bddf7b
commit
7985732683
@@ -0,0 +1,23 @@
|
||||
name: Generate cache-build key
|
||||
description: "Generate the cache key for production build caching"
|
||||
inputs:
|
||||
branch_key:
|
||||
required: true
|
||||
description: "Branch key for cache scoping (e.g., github.head_ref for PRs)"
|
||||
outputs:
|
||||
key:
|
||||
description: "The generated cache key"
|
||||
value: ${{ steps.generate-key.outputs.key }}
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Generate cache key
|
||||
id: generate-key
|
||||
shell: bash
|
||||
env:
|
||||
CACHE_NAME: prod-build
|
||||
BRANCH_KEY: ${{ inputs.branch_key }}
|
||||
LOCKFILE_HASH: ${{ hashFiles('yarn.lock') }}
|
||||
SOURCE_HASH: ${{ hashFiles('apps/**/**.[jt]s', 'apps/**/**.[jt]sx', 'apps/**/*.json', 'apps/**/*.css', 'packages/**/**.[jt]s', 'packages/**/**.[jt]sx', 'packages/prisma/schema.prisma', 'packages/prisma/migrations/**/*.sql', '!**/node_modules/**', '!packages/prisma/generated/**', '!packages/prisma/client/**', '!packages/prisma/zod/**', '!packages/kysely/**') }}
|
||||
run: |
|
||||
echo "key=${CACHE_NAME}-${BRANCH_KEY}-${LOCKFILE_HASH}-${SOURCE_HASH}" >> $GITHUB_OUTPUT
|
||||
@@ -1,31 +1,23 @@
|
||||
name: Cache production build binaries
|
||||
description: "Cache or restore if necessary"
|
||||
inputs:
|
||||
node_version:
|
||||
required: false
|
||||
default: v18.x
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Generate cache key
|
||||
id: cache-key
|
||||
uses: ./.github/actions/cache-build-key
|
||||
with:
|
||||
branch_key: ${{ github.head_ref || github.ref_name }}
|
||||
- name: Cache production build
|
||||
uses: actions/cache@v4
|
||||
id: cache-build
|
||||
env:
|
||||
cache-name: prod-build
|
||||
# Use branch name for cache scoping (head_ref for PRs, ref_name for pushes)
|
||||
branch-key: ${{ github.head_ref || github.ref_name }}
|
||||
# Hash yarn.lock for dependency changes
|
||||
lockfile-hash: ${{ hashFiles('yarn.lock') }}
|
||||
# Hash source files that affect the web build, excluding generated directories
|
||||
# Excludes packages/prisma/{generated,client,zod}/* and packages/kysely/* which are generated by prisma generate
|
||||
source-hash: ${{ hashFiles('apps/**/**.[jt]s', 'apps/**/**.[jt]sx', 'apps/**/*.json', 'apps/**/*.css', 'packages/**/**.[jt]s', 'packages/**/**.[jt]sx', 'packages/prisma/schema.prisma', 'packages/prisma/migrations/**/*.sql', '!**/node_modules/**', '!packages/prisma/generated/**', '!packages/prisma/client/**', '!packages/prisma/zod/**', '!packages/kysely/**') }}
|
||||
with:
|
||||
path: |
|
||||
${{ github.workspace }}/apps/web/.next
|
||||
${{ github.workspace }}/apps/web/public/embed
|
||||
**/.turbo/**
|
||||
**/dist/**
|
||||
key: ${{ runner.os }}-${{ env.cache-name }}-${{ inputs.node_version }}-${{ env.branch-key }}-${{ env.lockfile-hash }}-${{ env.source-hash }}
|
||||
key: ${{ steps.cache-key.outputs.key }}
|
||||
- run: |
|
||||
export NODE_OPTIONS="--max_old_space_size=8192"
|
||||
yarn build
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Manually Delete Blacksmith Cache
|
||||
name: Delete Blacksmith Cache
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
@@ -6,12 +6,28 @@ on:
|
||||
description: "Blacksmith Cache Key to Delete"
|
||||
required: true
|
||||
type: string
|
||||
pull_request:
|
||||
types: [closed]
|
||||
|
||||
jobs:
|
||||
manually-delete-blacksmith-cache:
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- uses: useblacksmith/cache-delete@v1
|
||||
with:
|
||||
cache_key: ${{ inputs.cache_key }}
|
||||
key: ${{ inputs.cache_key }}
|
||||
|
||||
delete-cache-build-on-pr-close:
|
||||
if: github.event_name == 'pull_request' && github.event.action == 'closed'
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
env:
|
||||
CACHE_NAME: prod-build
|
||||
steps:
|
||||
- name: Delete cache-build cache
|
||||
uses: useblacksmith/cache-delete@v1
|
||||
with:
|
||||
key: ${{ env.CACHE_NAME }}-${{ github.event.pull_request.head.ref }}
|
||||
prefix: "true"
|
||||
|
||||
Reference in New Issue
Block a user