chore(oci): migrate check gate and HTTP service to musl, drop glibc Dockerfile (YTMCP-21) #31

Merged
David merged 1 commit from chore/ytmcp-21-migrate-check-and-service-to-musl into main 2026-06-25 19:57:48 +02:00
Member

Remove the glibc Linux Docker image entirely so the static musl build is the single source for both the check toolchain and the HTTP service container, completing the glibc-removal arc started by YTMCP-20.

Give oci-build/Dockerfile.static a deployable runtime stage: FROM alpine:3 holding the static binary, with ENTRYPOINT ["/youtrack-mcp"] and a /data VOLUME preserving the compose state contract. No ca-certificates layer (rustls compiles CA roots in via webpki, matching the prior scratch posture). Smoke-tested: the container serves --transport http and GET /healthz returns 200.

Repoint compose.yml to build oci-build/Dockerfile.static target runtime; the youtrack-mcp:local tag, --transport http command, youtrack-mcp-data volume, and youtrack-mcp-private network are unchanged. docker compose build succeeds.

Move the check gate to the musl toolchain: dev_image and the pre-commit recipe now use rust-builder-musl, and check-docker builds Dockerfile.static --target builder. build-docker builds the new runtime image; the redundant build-docker-export recipe is removed in favor of build-static.

Delete oci-build/Dockerfile and update CLAUDE.md, README.md, docs/deployment.md, and .dockerignore so no glibc Linux image or glibc check toolchain is described; musl is documented as the single Linux Docker build.

.forgejo/workflows/check.yml is intentionally left unchanged: it runs cargo natively on the runner via JS actions (checkout, rust-cache) that require Node, which the Alpine-based musl image does not ship, so a container: directive would break the job. It already references no glibc image, so the glibc-removal goal holds for it; the musl toolchain lockstep lives in just pre-commit.

The static binary publish workflow (build-binary-static.yml) and the binary export stage are untouched.

Signed-off-by: David Randall David@NiceGuyIT.biz

#YTMCP-21

Remove the glibc Linux Docker image entirely so the static musl build is the single source for both the check toolchain and the HTTP service container, completing the glibc-removal arc started by YTMCP-20. Give oci-build/Dockerfile.static a deployable `runtime` stage: `FROM alpine:3` holding the static binary, with `ENTRYPOINT ["/youtrack-mcp"]` and a `/data` VOLUME preserving the compose state contract. No ca-certificates layer (rustls compiles CA roots in via webpki, matching the prior scratch posture). Smoke-tested: the container serves `--transport http` and `GET /healthz` returns 200. Repoint compose.yml to build `oci-build/Dockerfile.static` target `runtime`; the `youtrack-mcp:local` tag, `--transport http` command, `youtrack-mcp-data` volume, and `youtrack-mcp-private` network are unchanged. `docker compose build` succeeds. Move the check gate to the musl toolchain: `dev_image` and the `pre-commit` recipe now use `rust-builder-musl`, and `check-docker` builds `Dockerfile.static --target builder`. `build-docker` builds the new runtime image; the redundant `build-docker-export` recipe is removed in favor of `build-static`. Delete oci-build/Dockerfile and update CLAUDE.md, README.md, docs/deployment.md, and .dockerignore so no glibc Linux image or glibc check toolchain is described; musl is documented as the single Linux Docker build. `.forgejo/workflows/check.yml` is intentionally left unchanged: it runs cargo natively on the runner via JS actions (checkout, rust-cache) that require Node, which the Alpine-based musl image does not ship, so a `container:` directive would break the job. It already references no glibc image, so the glibc-removal goal holds for it; the musl toolchain lockstep lives in `just pre-commit`. The static binary publish workflow (build-binary-static.yml) and the `binary` export stage are untouched. Signed-off-by: David Randall <David@NiceGuyIT.biz> #YTMCP-21
chore(oci): migrate check gate and HTTP service to musl, drop glibc Dockerfile (YTMCP-21)
All checks were successful
Check / fmt + clippy + build + tests (pull_request) Successful in 22s
Create release / Create release from merged PR (pull_request) Has been skipped
679d8f8345
Remove the glibc Linux Docker image entirely so the static musl build is the single source for both the check toolchain and the HTTP service container, completing the glibc-removal arc started by YTMCP-20.

Give oci-build/Dockerfile.static a deployable `runtime` stage: `FROM alpine:3` holding the static binary, with `ENTRYPOINT ["/youtrack-mcp"]` and a `/data` VOLUME preserving the compose state contract. No ca-certificates layer (rustls compiles CA roots in via webpki, matching the prior scratch posture). Smoke-tested: the container serves `--transport http` and `GET /healthz` returns 200.

Repoint compose.yml to build `oci-build/Dockerfile.static` target `runtime`; the `youtrack-mcp:local` tag, `--transport http` command, `youtrack-mcp-data` volume, and `youtrack-mcp-private` network are unchanged. `docker compose build` succeeds.

Move the check gate to the musl toolchain: `dev_image` and the `pre-commit` recipe now use `rust-builder-musl`, and `check-docker` builds `Dockerfile.static --target builder`. `build-docker` builds the new runtime image; the redundant `build-docker-export` recipe is removed in favor of `build-static`.

Delete oci-build/Dockerfile and update CLAUDE.md, README.md, docs/deployment.md, and .dockerignore so no glibc Linux image or glibc check toolchain is described; musl is documented as the single Linux Docker build.

`.forgejo/workflows/check.yml` is intentionally left unchanged: it runs cargo natively on the runner via JS actions (checkout, rust-cache) that require Node, which the Alpine-based musl image does not ship, so a `container:` directive would break the job. It already references no glibc image, so the glibc-removal goal holds for it; the musl toolchain lockstep lives in `just pre-commit`.

The static binary publish workflow (build-binary-static.yml) and the `binary` export stage are untouched.

Signed-off-by: David Randall <David@NiceGuyIT.biz>

#YTMCP-21
David merged commit 952d0c25af into main 2026-06-25 19:57:48 +02:00
David deleted branch chore/ytmcp-21-migrate-check-and-service-to-musl 2026-06-25 19:57:49 +02:00
Commenting is not possible because the repository is archived.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pandoras-box/youtrack-mcp!31
No description provided.