Guides
Continuous Integration
GitHub Actions checks every pull request to main, every push to main, and
every manual CI run. CI verifies changes; it does not publish Atom or create
release tags. The separate tag-only publishing workflow is described below.
Required Checks
The primary workflow is .github/workflows/ci.yml and contains these jobs:
package (node-22)builds Atom and runs the package test suite on Node 22.package (node-24)repeats the package checks on Node 24.playgroundtype-checks and builds the browser workbench on Node 24.packed packagecreates the real npm archive, verifies its paths, and checks every JavaScript and declaration export target.consumer (react-18)installs that archive in a clean React 18 project.consumer (react-19)installs that archive in a clean React 19 project.
The consumer checks compile strict TypeScript imports and perform a small React server render. This verifies the package consumers install, rather than only the source tree used to create it.
Local Commands
Run the package checks:
npm ci
npm run ci:package
Run the playground check:
npm ci
npm ci --prefix playground
npm run ci:playground
Create and inspect a real archive:
npm run build
mkdir -p /tmp/atom-ui-ci-package
npm pack --pack-destination /tmp/atom-ui-ci-package
npm run verify:pack -- /tmp/atom-ui-ci-package
Smoke test the archive with both supported React lines:
npm run verify:consumer -- /tmp/atom-ui-ci-package 18
npm run verify:consumer -- /tmp/atom-ui-ci-package 19
The consumer script uses pinned React, React DOM, type, and TypeScript versions so an unrelated upstream release cannot unpredictably change existing CI runs.
Dependency Audit
.github/workflows/dependency-audit.yml runs every Monday and can also be run
manually. It audits the package and playground lockfiles for high-severity
vulnerabilities. It is intentionally separate from required pull-request CI so
a registry or advisory-service outage does not block an unrelated change.
Dependabot checks the pinned GitHub Action revisions weekly. npm dependency updates remain a deliberate maintainer task.
Trusted Publishing
.github/workflows/publish.yml runs only when a semantic version tag such as
v0.6.3 is pushed. It repeats the package, archive, and React consumer checks,
then publishes the verified archive through npm trusted publishing and GitHub
OIDC. It has no manual-dispatch or branch-push trigger and stores no npm write
token.
The job rejects mismatched tag/package versions, tagged commits outside
main, incorrect repository metadata, and versions already present on npm.
The npm GitHub environment is the deployment boundary and should require
maintainer approval. npm must trust organization flowstack-ui, repository
atom, workflow publish.yml, environment npm, with publish-only access.
Security And Publishing Boundary
CI has read-only repository permissions and checkout does not preserve write
credentials. Only the tag-gated publishing job receives id-token: write, and
that short-lived OIDC identity is restricted by npm to the exact repository,
workflow, and environment. Version changes, Git tags, and GitHub releases remain
deliberate maintainer actions.
Updating Matrices
Update Node versions when an audited line becomes end-of-life. Update React consumer versions intentionally when qualifying a newer supported peer line. Keep required job names stable unless branch protection is updated at the same time.