Cache snapshot baseline by release tag
Compares the latest release tag against a cached .baseline-tag
file and skips re-downloading when they match.

Closes #18

Assisted-by: Claude Opus 4.6 via pi
change xuyytqyruqwxtxsozsltpvrmvpooqkwo
commit 6e5dedfd2cc57a26ada087c1cc667e166e301166
author Alpha Chen <alpha@kejadlen.dev>
date
parent runpzyxr
diff --git a/Rakefile b/Rakefile
index 732c681..32ce3de 100644
--- a/Rakefile
+++ b/Rakefile
@@ -75,18 +75,24 @@ namespace :snapshots do
     baseline_dir = base_dir / "baseline"
     current_dir = base_dir / "current"
 
-    FileUtils.rm_rf(baseline_dir)
-    baseline_dir.mkpath
-
-    tarball = base_dir / "baseline.tar.gz"
-    system("gh", "release", "download", "--pattern", "snapshots.tar.gz", "--output", tarball.to_s, "--clobber", exception: false)
+    tag_file = base_dir / ".baseline-tag"
+    latest_tag = `gh release view --repo kejadlen/ketchup --json tagName -q .tagName 2>/dev/null`.strip
+    cached_tag = tag_file.exist? ? tag_file.read.strip : nil
+
+    if latest_tag.empty?
+      puts "No release found — showing current screenshots only"
+    elsif cached_tag == latest_tag && baseline_dir.exist? && baseline_dir.glob("*/manifest.json").any?
+      puts "Baseline #{latest_tag} already cached"
+    else
+      FileUtils.rm_rf(baseline_dir)
+      baseline_dir.mkpath
 
-    if tarball.exist?
+      tarball = base_dir / "baseline.tar.gz"
+      system("gh", "release", "download", latest_tag, "--repo", "kejadlen/ketchup", "--pattern", "snapshots.tar.gz", "--output", tarball.to_s, "--clobber", exception: true)
       system("tar", "xzf", tarball.to_s, "-C", baseline_dir.to_s, exception: true)
       tarball.delete
-      puts "Downloaded baseline from latest release"
-    else
-      puts "No baseline found — showing current screenshots only"
+      tag_file.write(latest_tag)
+      puts "Downloaded baseline from release #{latest_tag}"
     end
 
     snapshots_by_viewport = Ketchup::Snapshots::Diff.new(baseline_dir: baseline_dir, current_dir: current_dir).comparisons_by_viewport