Skip to content

Deployment Strategy

semtest is distributed through multiple channels. All channels install the same npm package — there are no standalone binaries. The two registries serve different purposes:

RegistryPurposeTriggerAudience
GitHub PackagesInternal testing (RC builds)Push to releaseContributors
Public npmStable releasesPush to mainEnd users

The diagram below shows the full deployment pipeline after a push to either branch.

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_HERE

Install the latest RC:

Terminal window
pnpm add @westopp/semtest@rc

Stable releases are published to the public npm registry. No authentication required to install.

Terminal window
npm install -g @westopp/semtest

After each stable publish, the CI pipeline automatically updates the Homebrew formula in westopp/homebrew-semtest:

  1. Reads the version from packages/semtest/package.json
  2. Constructs the tarball URL: https://registry.npmjs.org/@westopp/semtest/-/semtest-<VERSION>.tgz
  3. Downloads the tarball and computes its SHA256 (retries up to 5 times for registry propagation)
  4. Writes Formula/semtest.rb with the updated URL and hash
  5. 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.

All channels resolve to the same npm package on the public registry:

ChannelCommandNotes
npmnpm install -g @westopp/semtestRequires Node >= 20
npxnpx @westopp/semtest runNo install, downloads on each run
Homebrewbrew install westopp/semtest/semtestManages Node dependency automatically
curlcurl -fsSL .../install.sh | bashChecks prerequisites, installs via npm
SecretUsed inPurpose
GITHUB_TOKENrc.ymlPublish RC to GitHub Packages (automatic)
NPM_TOKENpublish.ymlPublish stable to public npm
HOMEBREW_TAP_TOKENpublish.ymlPush formula updates to the tap repo