Repository navigation
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.
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:
-
Logs everything to
data/cache/refresh/<date>.logand clearsdata/cache/refresh/failed.txt. -
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 indata/cache/refresh/<vendor>.log; a vendor that fails all three is written tofailed.txtand keeps last week's data. - 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).
-
Prints the last lines of
pcblib stats. -
Rebuilds the graph (
scripts/graphify_export.pywith graphify's interpreter) if graphify is installed, whether or not the site deploys. See The graph. -
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 atdata/cache/audit/parts-audit.html. Any other failure also stops it. Flags on boards that are new this week do not stop it. -
Deploys:
npm run deployinapp/. 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 itWhen 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.
cd app
npx wrangler login # once; opens the browser
npm run deploynpm run deploy runs scripts/deploy.sh:
-
pcblib exportinscraper/: metadata, BOMs and links only; -
npm run buildinapp/; -
npx wrangler deploy, with the config inapp/wrangler.toml(Workerakashic, custom domainakashic.cryptideffects.com, assets from./build). Extra arguments tonpm 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.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.
.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 buildon Node 22.
.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/sveltekitto support it (1.1.0 accepts kit 1 or 2) and moves the config out ofsvelte.config.js.@sveltejs/adapter-static4 andvite-plugin-pwa2 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.