No description
  • TypeScript 50.2%
  • Python 38.5%
  • SCSS 9.8%
  • HTML 1.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alan Pope 5471941ef0
Merge pull request #1 from minnielove2026/feat/tracking-metadata
Classify manual and static snap tracking
2026-07-24 14:48:57 +01:00
.github/workflows Gate deployment until Cloudflare is configured 2026-07-23 15:13:37 +00:00
config [verified] Classify manual and static snap tracking 2026-07-24 11:24:36 +00:00
public [verified] Classify manual and static snap tracking 2026-07-24 11:24:36 +00:00
scripts [verified] Address tracking review feedback 2026-07-24 13:41:38 +00:00
src [verified] Address tracking review feedback 2026-07-24 13:41:38 +00:00
tests [verified] Address tracking review feedback 2026-07-24 13:41:38 +00:00
.gitignore Build Snap maintenance dashboard 2026-07-23 15:12:16 +00:00
index.html Build Snap maintenance dashboard 2026-07-23 15:12:16 +00:00
LICENSE Build Snap maintenance dashboard 2026-07-23 15:12:16 +00:00
package-lock.json Adopt Canonical Vanilla dashboard theme 2026-07-23 15:34:16 +00:00
package.json Adopt Canonical Vanilla dashboard theme 2026-07-23 15:34:16 +00:00
README.md [verified] Classify manual and static snap tracking 2026-07-24 11:24:36 +00:00
tsconfig.json Build Snap maintenance dashboard 2026-07-23 15:12:16 +00:00
vite.config.ts Build Snap maintenance dashboard 2026-07-23 15:12:16 +00:00
wrangler.jsonc Build Snap maintenance dashboard 2026-07-23 15:12:16 +00:00

Snap Status

A compact maintenance dashboard for snaps published by popey. It compares the versions in stable, candidate, beta, and edge against each project's latest upstream release. The interface is built with Canonical Vanilla Framework to match the Ubuntu and Snap ecosystem.

What it does

  • Discovers the current public Snap Store inventory for publisher popey.
  • Retains explicitly configured snaps that are temporarily unpublished.
  • Collapses architecture-specific Store revisions while exposing version variants.
  • Fetches upstream versions from GitHub, Codeberg, and npm.
  • Classifies each snap as:
    • Current — stable has reached upstream.
    • In testing — candidate, beta, or edge has reached upstream.
    • Update needed — every published channel is behind upstream.
    • Needs mapping — the upstream source is not yet identified.
    • Manual review — the source is known but has no safely comparable release feed.
    • No updates expected — an intentionally static snap has no upstream lifecycle.
  • Links manual entries to their source repository and intentional static entries to their background story.
  • Supports search, status filters, sortable columns, responsive layouts, and accessible reduced-motion behavior.
  • Refreshes and deploys hourly without making automated data commits.

Architecture

Snap Store API ─┐
GitHub API ─────┼─ scripts/collect.py ─ public/data.json ─ Vite static app
Codeberg API ───┤                                      └─ Cloudflare Workers Assets
npm registry ───┘

The maintained-snap and upstream-provider map lives in config/snaps.json. Missing or unusual upstreams are displayed as unknown rather than guessed.

Local development

Requirements: Node.js 24+ and Python 3.11+.

npm ci --ignore-scripts
GITHUB_TOKEN="$(gh auth token)" npm run collect
npm run verify
npm run dev

The collector only needs GITHUB_TOKEN to avoid the unauthenticated GitHub API rate limit; it does not need Snap Store credentials.

Deployment

The app uses Cloudflare Workers Static Assets. wrangler.jsonc declares snaps.popey.com as a custom domain.

GitHub Actions requires these repository secrets:

  • CLOUDFLARE_API_TOKEN — token with Workers Scripts edit and zone route/domain permissions.
  • CLOUDFLARE_ACCOUNT_ID — the Cloudflare account ID.

After setting both secrets, set the repository variable CLOUDFLARE_DEPLOY_ENABLED to true. Until then, scheduled deployment jobs are cleanly skipped rather than failing every hour.

The Refresh and deploy workflow runs at minute 17 each hour, generates data inside the runner, verifies the project, and deploys it directly. It never commits generated data back to the repository.

Verification

npm run test            # version and status logic
npm run test:collector  # Store channel collapsing and provider parsing
npm run check           # TypeScript
npm run build           # production static assets
npm audit --audit-level=high

License

MIT