mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-16 15:40:12 +01:00
feat: optimize cache workflow with orphan branch and age check
- Create/use orphan branch 'similarity-cache-data' for cache distribution - Add age check to dockerhub-publish: only rebuild if cache >7 days old - Use git add -f to force-add cache files (keeps .gitignore clean) - Weekly scheduled builds will keep cache fresh automatically This avoids rebuilding cache on every Docker publish while ensuring cache is always reasonably fresh (<7 days old).
This commit is contained in:
parent
b26057f68d
commit
86752b351b
3 changed files with 62 additions and 8 deletions
28
.github/workflows/build-similarity-cache.yml
vendored
28
.github/workflows/build-similarity-cache.yml
vendored
|
|
@ -145,12 +145,30 @@ jobs:
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "github-actions[bot]"
|
||||||
|
|
||||||
# Switch to or create dedicated cache branch
|
# Fetch all branches
|
||||||
git checkout -b similarity-cache-data || git checkout similarity-cache-data
|
git fetch origin
|
||||||
|
|
||||||
# Add only the similarity cache files (not all_cards.parquet)
|
# Try to checkout existing branch, or create new orphan branch
|
||||||
git add card_files/similarity_cache.parquet
|
if git ls-remote --heads origin similarity-cache-data | grep similarity-cache-data; then
|
||||||
git add card_files/similarity_cache_metadata.json
|
echo "Checking out existing similarity-cache-data branch..."
|
||||||
|
git checkout similarity-cache-data
|
||||||
|
else
|
||||||
|
echo "Creating new orphan branch similarity-cache-data..."
|
||||||
|
git checkout --orphan similarity-cache-data
|
||||||
|
git rm -rf . || true
|
||||||
|
# Create minimal README for the branch
|
||||||
|
echo "# Similarity Cache Data" > README.md
|
||||||
|
echo "This branch contains pre-built similarity cache files for the MTG Deckbuilder." >> README.md
|
||||||
|
echo "Updated automatically by GitHub Actions." >> README.md
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure card_files directory exists
|
||||||
|
mkdir -p card_files
|
||||||
|
|
||||||
|
# Add only the similarity cache files (use -f to override .gitignore)
|
||||||
|
git add -f card_files/similarity_cache.parquet
|
||||||
|
git add -f card_files/similarity_cache_metadata.json
|
||||||
|
git add README.md 2>/dev/null || true
|
||||||
|
|
||||||
# Check if there are changes to commit
|
# Check if there are changes to commit
|
||||||
if git diff --staged --quiet; then
|
if git diff --staged --quiet; then
|
||||||
|
|
|
||||||
40
.github/workflows/dockerhub-publish.yml
vendored
40
.github/workflows/dockerhub-publish.yml
vendored
|
|
@ -7,15 +7,53 @@ on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
check-cache-age:
|
||||||
|
name: Check similarity cache age
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
needs_rebuild: ${{ steps.check.outputs.needs_rebuild }}
|
||||||
|
steps:
|
||||||
|
- name: Check cache age
|
||||||
|
id: check
|
||||||
|
run: |
|
||||||
|
# Check if cache is older than 7 days
|
||||||
|
CACHE_URL="https://raw.githubusercontent.com/${{ github.repository }}/similarity-cache-data/card_files/similarity_cache_metadata.json"
|
||||||
|
|
||||||
|
if wget -q --spider "$CACHE_URL"; then
|
||||||
|
wget -q "$CACHE_URL" -O metadata.json
|
||||||
|
BUILD_DATE=$(jq -r '.build_date' metadata.json)
|
||||||
|
|
||||||
|
# Calculate age in seconds
|
||||||
|
BUILD_EPOCH=$(date -d "$BUILD_DATE" +%s 2>/dev/null || echo 0)
|
||||||
|
NOW_EPOCH=$(date +%s)
|
||||||
|
AGE_DAYS=$(( ($NOW_EPOCH - $BUILD_EPOCH) / 86400 ))
|
||||||
|
|
||||||
|
echo "Cache age: $AGE_DAYS days"
|
||||||
|
|
||||||
|
if [ $AGE_DAYS -gt 7 ]; then
|
||||||
|
echo "needs_rebuild=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "Cache is stale (>7 days), will rebuild"
|
||||||
|
else
|
||||||
|
echo "needs_rebuild=false" >> $GITHUB_OUTPUT
|
||||||
|
echo "Cache is fresh (<7 days), skipping rebuild"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "needs_rebuild=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "Cache not found, will build"
|
||||||
|
fi
|
||||||
|
|
||||||
build-cache:
|
build-cache:
|
||||||
name: Build similarity cache
|
name: Build similarity cache
|
||||||
|
needs: check-cache-age
|
||||||
|
if: needs.check-cache-age.outputs.needs_rebuild == 'true'
|
||||||
uses: ./.github/workflows/build-similarity-cache.yml
|
uses: ./.github/workflows/build-similarity-cache.yml
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
prepare:
|
prepare:
|
||||||
name: Prepare metadata
|
name: Prepare metadata
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: build-cache
|
needs: [check-cache-age, build-cache]
|
||||||
|
if: always() && (needs.build-cache.result == 'success' || needs.build-cache.result == 'skipped')
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
|
|
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -31,8 +31,6 @@ csv_files/*
|
||||||
!csv_files/testdata/
|
!csv_files/testdata/
|
||||||
!csv_files/testdata/**/*
|
!csv_files/testdata/**/*
|
||||||
card_files/*
|
card_files/*
|
||||||
!card_files/similarity_cache.parquet
|
|
||||||
!card_files/similarity_cache_metadata.json
|
|
||||||
|
|
||||||
deck_files/
|
deck_files/
|
||||||
dist/
|
dist/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue