v0.5.0 — Container image + Helm chart
A packaging and operations release. No runtime behavior changes — the server behaves identically to 0.4.0 for its consumers. This release ships the deployment substrate and CI/CD pipeline for distributing the server as a container image and Helm chart on ghcr.io.
🐳 Container
- Multi-stage
Dockerfile(node:24-alpine), non-root execution asuid 1000 - Compatible with
readOnlyRootFilesystem: true(writable/tmponly) - Drop-ALL capabilities,
seccompProfile: RuntimeDefault
docker run -e GITLAB_PERSONAL_ACCESS_TOKEN=glpat-xxx -p 3000:3000 \
ghcr.io/yoda-digital/mcp-gitlab-server:0.5.0⛵ Helm chart
Production-ready chart with five fail-loud guards that catch operator footguns at helm template time rather than at apply / runtime:
- Empty
GITLAB_PERSONAL_ACCESS_TOKENin PAT mode withoutexistingSecret - Both
existingSecretAND inlinesecret.GITLAB_PERSONAL_ACCESS_TOKENset (silent precedence trap) - PDB
minAvailable >= replicaCount(drain deadlock) - PDB both
minAvailableANDmaxUnavailableset (K8s rejects at apply time) - Invalid
AUTH_MODEvalue (server-side, exits with clear message)
helm install gitlab-mcp oci://ghcr.io/yoda-digital/charts/gitlab-mcp \
--version 0.5.0 \
--set secret.GITLAB_PERSONAL_ACCESS_TOKEN=glpat-xxxAll v0.4.0 transport env vars wired in values.yaml: AUTH_MODE, USE_STREAMABLE_HTTP, CORS_ALLOW_ORIGINS, HEALTHZ_MAX_SESSIONS.
🛠️ Build & Publish workflow
.github/workflows/build.yml — three-job pipeline with release-discriminated CI:
validate(every PR + push): hadolint,helm lint,helm templatesmoke test. Now in the branch-protection required-checks list.docker(push to main + tags):docker/metadata-action@v5—sha-<short>on main,<semver>+:lateston tag pushes only.helm(tag pushes only):helm package --version+ OCI push toghcr.io. Chart version mutation viayqwith post-mutation assertion.
🔐 Provenance
The npm package continues to ship via OIDC Trusted Publishing with Sigstore SLSA v1 provenance. Verify with:
npm view @yoda.digital/gitlab-mcp-server@0.5.0 dist.attestations👏 Credits
- Implementation: @ecthelion77 (Olivier Gintrand)
- Maintainer rebase + additional guards: @nalyk
- Reviewed via #29 → merged via #44
Full notes: CHANGELOG.md.