Deployment Strategy
Overview
Section titled “Overview”semtest is distributed through multiple channels. All channels install the same npm package — there are no standalone binaries. The two registries serve different purposes:
| Registry | Purpose | Trigger | Audience |
|---|---|---|---|
| GitHub Packages | Internal testing (RC builds) | Push to release | Contributors |
| Public npm | Stable releases | Push to main | End users |
Deployment flow
Section titled “Deployment flow”The diagram below shows the full deployment pipeline after a push to either branch.
Registry details
Section titled “Registry details”GitHub Packages (internal)
Section titled “GitHub Packages (internal)”RC builds are published to GitHub Packages under the @westopp scope. This requires authentication to install — contributors need a .npmrc with a PAT that has read:packages scope.
@westopp:registry=https://npm.pkg.github.com//npm.pkg.github.com/:_authToken=YOUR_PAT_HEREInstall the latest RC:
pnpm add @westopp/semtest@rcPublic npm (stable)
Section titled “Public npm (stable)”Stable releases are published to the public npm registry. No authentication required to install.
npm install -g @westopp/semtestHomebrew tap sync
Section titled “Homebrew tap sync”After each stable publish, the CI pipeline automatically updates the Homebrew formula in westopp/homebrew-semtest:
- Reads the version from
packages/semtest/package.json - Constructs the tarball URL:
https://registry.npmjs.org/@westopp/semtest/-/semtest-<VERSION>.tgz - Downloads the tarball and computes its SHA256 (retries up to 5 times for registry propagation)
- Writes
Formula/semtest.rbwith the updated URL and hash - Commits and pushes to the tap repo
This requires a GitHub PAT stored as secrets.HOMEBREW_TAP_TOKEN with repo scope on the semtest repository.
Installation channels
Section titled “Installation channels”All channels resolve to the same npm package on the public registry:
| Channel | Command | Notes |
|---|---|---|
| npm | npm install -g @westopp/semtest | Requires Node >= 20 |
| npx | npx @westopp/semtest run | No install, downloads on each run |
| Homebrew | brew install westopp/semtest/semtest | Manages Node dependency automatically |
| curl | curl -fsSL .../install.sh | bash | Checks prerequisites, installs via npm |
Secrets required
Section titled “Secrets required”| Secret | Used in | Purpose |
|---|---|---|
GITHUB_TOKEN | rc.yml | Publish RC to GitHub Packages (automatic) |
NPM_TOKEN | publish.yml | Publish stable to public npm |
HOMEBREW_TAP_TOKEN | publish.yml | Push formula updates to the tap repo |