Skip to content

Releasing

Lane Holloway edited this page Oct 26, 2026 · 1 revision

Releasing

The live site is a static build on Cloudflare (Workers static assets). It changes in two ways: the weekly refresh, which redeploys with fresh prices, stock and new boards when its audit is clean, and a deploy by hand after a code or data change.

The weekly refresh

scripts/refresh.sh runs every Sunday at 04:00 (or at the next wake) as a launchd agent on the maintainer's Mac. It is safe to run by hand.

What it does, in order:

  1. Logs everything to data/cache/refresh/<date>.log and clears data/cache/refresh/failed.txt.
  2. Re-fetches every vendor: each id in the adapter registry runs pcblib scrape <vendor> --refresh-pages, four at a time. Pages (listings, product pages, prices, stock, new boards) are fetched again; cached build documents are kept. Each vendor gets three tries, 20 s apart, with its output in data/cache/refresh/<vendor>.log; a vendor that fails all three is written to failed.txt and keeps last week's data.
  3. Reports listing changes: the "no longer listed" and "far fewer than the library" lines from the vendor logs (see delisting in How the data is made).
  4. Prints the last lines of pcblib stats.
  5. Rebuilds the graph (scripts/graphify_export.py with graphify's interpreter) if graphify is installed, whether or not the site deploys. See The graph.
  6. Audits: pcblib audit --fail-on-added. If the run added flags to boards that were already there (exit code 3), it stops without deploying and posts a macOS notification pointing at data/cache/audit/parts-audit.html. Any other failure also stops it. Flags on boards that are new this week do not stop it.
  7. Deploys: npm run deploy in app/. The notification lists any vendors that failed to refresh.

Install or remove the agent:

scripts/install-refresh.sh                                         # installs scripts/akashic-refresh.plist
launchctl bootout gui/$(id -u)/com.cryptideffects.akashic-refresh  # removes it

When a refresh holds the deploy, read the added flags in the report, fix the parser or add a correction (Fixing a parse), then deploy by hand. The audit's baseline moves with every run, so a second pcblib audit will not show the same flags as added again.

Deploying by hand

cd app
npx wrangler login     # once; opens the browser
npm run deploy

npm run deploy runs scripts/deploy.sh:

  1. pcblib export in scraper/: metadata, BOMs and links only;
  2. npm run build in app/;
  3. npx wrangler deploy, with the config in app/wrangler.toml (Worker akashic, custom domain akashic.cryptideffects.com, assets from ./build). Extra arguments to npm run deploy -- pass through to wrangler.

Never deploy a bundle exported with pcblib export --images: it contains the vendors' schematic renders, which are cached for local use only. deploy.sh always exports without it, so do not build and upload app/build by other means after an --images export.

Before a deploy by hand, the same checks as a pull request: npm run check and npm run build pass, and the audit's added flags have been read.

infra/cryptid-fx-redirect/ is a separate Worker that redirects the typo domain; deploy it from its own directory with npx wrangler deploy.

Changelog and release notes

CHANGELOG.md has an Unreleased section at the top with ### Added, ### Changed and ### Fixed lists. Every change users would notice gets a line there in the same pull request: what changed, in plain words, with names and counts where they help.

When a version is tagged, the Unreleased section becomes a version section (## 0.1.0 — 2026-09-17 is the first) and that section's text is the GitHub Release notes. Cutting a release is a manual step; no workflow creates it. The test workflow does run on v* tags.

The site's own changes page is built separately, from git log at export time (changes.json, grouped by week), so commit subjects should read well on their own.

Continuous integration

.github/workflows/test.yml runs on pushes to main, v* tags, pull requests and by hand:

  • Scraper: uv sync --frozen, pcblib vendors (every adapter imports), a value normalization smoke test (resistor, capacitor, pot, zener, IC and original-name cases), and an export of an empty library.
  • App: export, npm ci, npm run check, npm run build on Node 22.

Dependabot

.github/dependabot.yml opens weekly update pull requests for:

  • npm in app/, grouped into one pull request;
  • pip in scraper/;
  • GitHub Actions.

Held back by hand (major versions ignored):

  • @sveltejs/kit: SvelteKit 3 needs @vite-pwa/sveltekit to support it (1.1.0 accepts kit 1 or 2) and moves the config out of svelte.config.js. @sveltejs/adapter-static 4 and vite-plugin-pwa 2 go with it. Migrate the three together, by hand.
  • typescript: SvelteKit pins the TypeScript major it supports; bump it with the kit.

Minor and patch updates of all of these still come through. Security alerts and fixes are enabled in the repository settings.

Clone this wiki locally