GitHub Actions only loads workflow YAML from .github/workflows/ (repo root). Executable files use the release-* prefix there; this folder is the index and runbook for semver releases.
Pipeline map: .github/CI-CD.md · Release guide: docs/RELEASE.md
| Workflow | File | Job | Trigger | Purpose |
|---|---|---|---|---|
| Release / GitHub | ../release-github.yml |
Create GitHub Release | Tag v* |
Full CI parity, dist tarball, CycloneDX SBOM, release notes |
| Release / Docker Hub | ../release-docker-hub.yml |
Build and push | Tag v* |
Push image to Docker Hub, smoke test, Hub metadata + tag prune |
Tag vX.Y.Z must match package.json version.
No workflow_dispatch — tag push only (use git tag vX.Y.Z && git push origin vX.Y.Z).
git tag v1.2.3 && git push origin v1.2.3
│
├── release-github.yml → GitHub Release + assets
├── release-docker-hub.yml → Hub push (if secrets set)
└── deploy-pages.yml → docs site (if docs changed since last deploy)
| Secret | Workflow | Required |
|---|---|---|
GITHUB_TOKEN |
release-github.yml |
Auto |
DOCKERHUB_USERNAME |
release-docker-hub.yml |
Optional — skip push if unset |
DOCKERHUB_TOKEN |
release-docker-hub.yml |
Optional |
Docker Hub jobs use environment docker. See docs/DOCKER.md and ACTIONS-SECRETS.md.
make check
npm run build && npm run build:server
# Tag must match package.json:
node -p "require('./package.json').version"| Topic | Doc |
|---|---|
| Hub tag policy | docs/dockerhub/HUB-SETTINGS.md |
| Ops (metadata / prune) | ../ops/README.md |
| Publishing overview | docs/PUBLISHING.md |