From fd240e2533aeb44e4ea83693989f106dc638105a Mon Sep 17 00:00:00 2001 From: matt Date: Fri, 17 Oct 2025 17:29:17 -0700 Subject: [PATCH] feat: bake similarity cache into Docker images - Copy card_files/ to /.defaults/card_files/ during build - Entrypoint checks for baked-in cache before downloading - Fallback to GitHub download if not present in image - Reduces startup time and bandwidth usage --- Dockerfile | 6 ++++++ entrypoint.sh | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 06b2381..7f6f0ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,6 +32,12 @@ COPY config/ ./config/ COPY config/ /.defaults/config/ RUN mkdir -p owned_cards +# Copy similarity cache if available (pre-built during CI) +# Store in /.defaults/card_files so it persists after volume mount +RUN mkdir -p /.defaults/card_files +# Copy entire card_files directory (will include cache if present, empty if not) +COPY card_files/ /.defaults/card_files/ + # Create necessary directories as mount points RUN mkdir -p deck_files logs csv_files card_files config /.defaults diff --git a/entrypoint.sh b/entrypoint.sh index a59e62f..7529ce0 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -6,11 +6,19 @@ seed_defaults() { # Ensure base config and data directories exist mkdir -p /app/config /app/config/card_lists /app/config/themes /app/card_files - # Download pre-built similarity cache from GitHub if not present + # Copy pre-built similarity cache from image defaults if available, otherwise download if [ ! -f /app/card_files/similarity_cache.parquet ]; then - echo "Downloading similarity cache from GitHub..." - wget -q https://raw.githubusercontent.com/mwisnowski/mtg_python_deckbuilder/similarity-cache-data/card_files/similarity_cache.parquet -O /app/card_files/similarity_cache.parquet 2>/dev/null || echo "Warning: Could not download similarity cache" - wget -q https://raw.githubusercontent.com/mwisnowski/mtg_python_deckbuilder/similarity-cache-data/card_files/similarity_cache_metadata.json -O /app/card_files/similarity_cache_metadata.json 2>/dev/null || true + # First try to copy from baked-in defaults (included in Docker image during CI builds) + if [ -f /.defaults/card_files/similarity_cache.parquet ]; then + echo "Copying pre-built similarity cache from image..." + cp /.defaults/card_files/similarity_cache.parquet /app/card_files/ 2>/dev/null || true + cp /.defaults/card_files/similarity_cache_metadata.json /app/card_files/ 2>/dev/null || true + else + # Fallback: download from GitHub similarity-cache-data branch + echo "Downloading similarity cache from GitHub..." + wget -q https://raw.githubusercontent.com/mwisnowski/mtg_python_deckbuilder/similarity-cache-data/card_files/similarity_cache.parquet -O /app/card_files/similarity_cache.parquet 2>/dev/null || echo "Warning: Could not download similarity cache" + wget -q https://raw.githubusercontent.com/mwisnowski/mtg_python_deckbuilder/similarity-cache-data/card_files/similarity_cache_metadata.json -O /app/card_files/similarity_cache_metadata.json 2>/dev/null || true + fi fi # Copy from baked-in defaults if targets are missing