CI: the job image has no node, so the checkout cannot run; the install is not --locked and only 3.14 is tested #8
Labels
No labels
bug
documentation
enhancement
security
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo-mcp#8
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found on 2026-09-29 in a read-only review of postulo-mcp at
0b29e70b9, comparing.forgejo/workflows/ci.ymlwith the workflows of the other repositories.The workflow runs in
python:3.14-slim-bookworm. Forgejo runsactions/checkoutas JavaScript inside the job container, and that image has nonode. That is the fault postulo/postulo-helloworld#2 and postulo/postulo-imap#1 described in their own repositories ("the checkout dies before any step"), fixed there by moving tonode:22-bookworm; every other repository in the project, the core included, now uses that image, and postulo-mcp is the only one still on the Python image. On that evidence no lint or test in this repository is being run by CI. Two smaller gaps sit behind it and would show as soon as it runs..forgejo/workflows/ci.yml:13-14(the container image),.forgejo/workflows/ci.yml:26-27(uv sync),pyproject.toml:6(requires-python = ">=3.12"),pyproject.toml:46(target-version = "py312")actions/checkout@v4needsnodein the container;python:3.14-slim-bookwormhas none, so the run stops at the first step. Theapt-get install curlin the next step would be unnecessary onnode:22-bookworm, which carries curl and git.uv syncwithout--lockedre-resolves whenpyproject.tomlanduv.lockdisagree, instead of failing. The server tracks the MCP SDK closely (mcp.server.mcpserver,mcp_types, theTokenVerifierandAuthSettingsshapes), so a lower bound bumped without re-locking would be tested against a resolution nobody reviewed. Every other Python repository runsuv sync --locked --python 3.14and says why in a comment (for example postulo-dav.forgejo/workflows/ci.yml:50-53).>=3.12and ruff targets py312, but the job tests one version. Unlike the plugins, which run inside the core's Python (and the core tests 3.12–3.14 in a matrix), this server is installed on its own withuv tool installunder whatever Python the person has, so the versions it claims are the ones people run.node:22-bookwormwithpersist-credentials: falseon the checkout, as the plugin repositories do; install withuv sync --locked; run the tests over a 3.12 / 3.13 / 3.14 matrix (uv sync --locked --python ${{ matrix.python-version }}), or raiserequires-pythonto what is tested. Pinning the uv installer version (astral.sh/uv/${UV_VERSION}/install.sh, as the core does) is worth doing in the same change.Done when
uv.lockon a branch makes the install step fail.install.shwith no version and no checksum; the core fixed this in #790 #20