Skip to content

release: v1.8.0 — R2 watchlist cache + E2E coverage - #45

Merged
leo-mathurin merged 18 commits into
mainfrom
staging
Aug 26, 2026
Merged

leo-mathurin merged 18 commits into
mainfrom
staging

Conversation

@leo-mathurin

Copy link
Copy Markdown
Owner

Release v1.8.0

Promotes staging to main.

Changes

  • Move the watchlist cache from Supabase tables to Cloudflare R2, with stale-manifest refresh and race-safe deletion.
  • Add the database migration that removes the old cache tables after the R2 rollout.
  • Add a Playwright E2E harness for the addon API, configuration, onboarding, Stremio install, catalogs, and metadata.
  • Exercise the R2 cache against local MinIO and run the full E2E suite in CI.
  • Add SOPS-encrypted environment files and local Supabase configuration.

Release notes

  • CI will bump the version from 1.7.0 to 1.8.0 after merge based on the Conventional Commits in this release.
  • The R2 cache migration procedure is documented in docs/r2-cache-migration.md.

@vercel

vercel Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
stremlist-backend Ready Ready Preview Aug 26, 2026 4:55pm
stremlist-frontend Ready Ready Preview Aug 26, 2026 4:55pm

Request Review

@greptile-apps

greptile-apps Bot commented Aug 26, 2026

Copy link
Copy Markdown

Greptile Summary

The release moves watchlist caching from Supabase to generation-based R2 objects, removes the legacy cache tables, and adds catalog pagination plus an end-to-end test environment.

  • Adds compressed R2 cache manifests, conditional deletion, stale-manifest recovery, and in-memory acceleration.
  • Updates watchlist, catalog, metadata, user-cleanup, and configuration paths for the new cache.
  • Adds Playwright coverage backed by local Supabase and MinIO in CI.
  • Adds deployment documentation, encrypted environment files, and local Supabase configuration.

Confidence Score: 2/5

The PR is not yet safe to merge because the mutable CI action remains executable and retained watchlists can still serve cache data from their previous IMDb source.

The E2E workflow still executes a mutable third-party action tag, and changing a retained watchlist's IMDb source still leaves its UUID-keyed R2 cache intact for cache-first catalog and metadata reads.

Files Needing Attention: .github/workflows/ci.yml and apps/backend/src/services/user.ts

Important Files Changed

Filename Overview
apps/backend/src/services/watchlist-cache.ts Implements compressed, generation-based R2 cache storage with manifest validation, conditional deletion, stale-manifest recovery, and bounded memory caching.
apps/backend/src/services/watchlist.ts Replaces database-backed cache access with R2 reads and writes while retaining cache-first, refresh, fallback, sorting, and RPDB behavior.
apps/backend/src/services/user.ts Cleans R2 objects for removed watchlists, but the previously reported retained-watchlist source invalidation defect remains.
apps/backend/src/routes/catalog.ts Adds validated skip-based pagination, stable page sizing, and no-store response caching.
.github/workflows/ci.yml Adds bundle smoke testing and full E2E infrastructure, while the previously reported mutable third-party action reference remains.
supabase/migrations/20260826000000_drop_cache_tables_after_r2.sql Removes the legacy Supabase cache tables after the documented R2 rollout boundary.
apps/e2e/playwright.config.ts Configures the Playwright harness and dependent local services for addon, configuration, catalog, and metadata coverage.

Reviews (2): Last reviewed commit: "fix(backend): externalize S3 client from..." | Re-trigger Greptile

Comment thread .github/workflows/ci.yml
node-version: 20
cache: pnpm

- uses: supabase/setup-cli@v1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 security Mutable action tag

The E2E job replaces the previously pinned Supabase setup action with the mutable v1 tag, allowing an upstream tag change to silently execute different code with access to the checked-out repository and the job's read-only token. Pinning the action to its immutable commit keeps workflow changes reviewable.

How this was verified: The pull-request E2E job directly executes supabase/setup-cli@v1 without exposing the separate push-only release credential.

Suggested change
- uses: supabase/setup-cli@v1
- uses: supabase/setup-cli@ab058987d8d6c725971f6cf9d0b5c98467e30bd1 # v1

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We removed SHA pinning from the CI as it's overkill for what it is

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That’s a reasonable tradeoff if SHA pinning isn’t part of this repository’s CI threat model. The concern is specifically that @v1 can change upstream without a reviewed PR, while the action runs with repository access; however, since this is intentional and the job only has the default read-only token, I won’t pursue it further for this release.

@leo-mathurin

Copy link
Copy Markdown
Owner Author

CI was dispatched manually because GitHub did not emit an automatic pull_request or staging push workflow run for this PR. Both jobs passed on the current release head before the final trigger-only workflow change: Lint, Build & Test + E2E. The latest Vercel backend preview is healthy.

@leo-mathurin
leo-mathurin merged commit d338657 into main Aug 26, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant