Add docker/ci/Dockerfile with Node 20, Python 3.12, pinned uv, and pre-synced dev dependencies
Add .gitea/workflows/ci-image.yml to build and push gitea.lille-vemmelund.dk/brian/python-repositories-ci nightly, on uv.lock changes, and manually
Migrate Python workflows to runs-on: python-repositories-ci with fast uv sync --frozen (removes repeated setup-python + pip install uv)
Document setup in docs/ci-image.md (registry auth via homelab-platform secret, bootstrap order, ci-bot credentials)
Test plan
Merge and run Build CI Image workflow manually once to seed latest in Gitea registry
Confirm python-repositories-ci label and gitea-registry-dockerconfig are active on k8s runners
Open a follow-up PR or push to verify test.yml and code-quality.yml pass on the new image
Confirm integration tests still pull redis/minio via Harbor
## Summary
- Add `docker/ci/Dockerfile` with Node 20, Python 3.12, pinned `uv`, and pre-synced dev dependencies
- Add `.gitea/workflows/ci-image.yml` to build and push `gitea.lille-vemmelund.dk/brian/python-repositories-ci` nightly, on `uv.lock` changes, and manually
- Migrate Python workflows to `runs-on: python-repositories-ci` with fast `uv sync --frozen` (removes repeated `setup-python` + `pip install uv`)
- Document setup in `docs/ci-image.md` (registry auth via homelab-platform secret, bootstrap order, `ci-bot` credentials)
## Test plan
- [ ] Merge and run **Build CI Image** workflow manually once to seed `latest` in Gitea registry
- [ ] Confirm `python-repositories-ci` label and `gitea-registry-dockerconfig` are active on k8s runners
- [ ] Open a follow-up PR or push to verify `test.yml` and `code-quality.yml` pass on the new image
- [ ] Confirm integration tests still pull redis/minio via Harbor
Pre-build Python, uv, and locked deps in a Gitea container image so daily jobs skip repeated bootstrap; document runner registry auth and ci-bot credentials.
Co-authored-by: Cursor <[email protected]>
Avoid hardcoding 3.12 in the Dockerfile so the CI image tracks the same source of truth as local tooling and uv sync.
Co-authored-by: Cursor <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
docker/ci/Dockerfilewith Node 20, Python 3.12, pinneduv, and pre-synced dev dependencies.gitea/workflows/ci-image.ymlto build and pushgitea.lille-vemmelund.dk/brian/python-repositories-cinightly, onuv.lockchanges, and manuallyruns-on: python-repositories-ciwith fastuv sync --frozen(removes repeatedsetup-python+pip install uv)docs/ci-image.md(registry auth via homelab-platform secret, bootstrap order,ci-botcredentials)Test plan
latestin Gitea registrypython-repositories-cilabel andgitea-registry-dockerconfigare active on k8s runnerstest.ymlandcode-quality.ymlpass on the new imageTest Coverage Report: