The full CI/CD pipeline (gatekeeper.yml) triggers automatically on push to main or a v* tag. It runs four security gates in parallel, then deploys if all pass:
- Lint + Tests (
lint-and-test.yml) - CodeQL (
codeql.yml) - Secrets scanning (
secrets-scanning.yml) - Trivy security scan (
security-update.yml)
If all four pass → docker-publish.yml runs → then publish-npm.yml runs.
Single-Instance Requirement: memory-journal-mcp is designed for single-instance operation. If you run multiple instances (e.g., behind a load balancer), you MUST explicitly document and enforce single-writer / single-instance behavior for the restore_backup tool to prevent database corruption during an active restore operation.
Option A — Automatic (push to main or tag): Simply merge/push a tag (e.g., v7.3.0) to main. (Note: Pushing directly to main without a tag will just run the validation gates without publishing).
Option B — Manual npm publish only (no Docker): Go to Actions → "Publish to NPM" → Run workflow. Useful if Docker already published but npm failed.
Make sure these are set in Settings → Secrets → Actions:
| Secret | Purpose |
|---|---|
DOCKER_USERNAME |
Docker Hub login (writenotenow) |
DOCKER_PASSWORD |
Docker Hub password or access token |
NPM_TOKEN |
npm automation token |
Two protected environments must exist with appropriate approval rules:
| Environment | Used by | URL |
|---|---|---|
production |
Docker manifest push (on tags) | https://hub.docker.com/r/writenotenow/memory-journal-mcp |
npm |
npm publish | https://www.npmjs.com/package/memory-journal-mcp |
- Docker Hub:
writenotenow/memory-journal-mcp:latest,writenotenow/memory-journal-mcp:v<version>, and a short SHA tag. Multi-arch: linux/amd64 + linux/arm64. - npm:
memory-journal-mcp(public, with provenance). Version is read frompackage.json. If the current version is already on npm, publish is skipped silently.
Per the release process memory:
- Update
package.jsonversion - Update
package-lock.json(runnpm install) - Update
server.jsonversion field - Update the OCI identifier tag in
server.json
A security scan runs before any image is pushed. If Docker Scout finds critical/high CVEs with available fixes, the build fails and nothing publishes (neither Docker nor npm). You'll need to address the CVEs first.