This instance runs Gitea 1.26.4. Per the naming decision on Scribe #2272, "Fabled-Git" is the standing name for the service and the engine is named only where it is load-bearing (version-specific API behaviour, act_runner quirks, click-through UI). Service-level prose only. Deliberately NOT touched: - `.forgejo/workflows/` paths, which resolve on this Gitea only because GITEA__actions__WORKFLOW_DIRS lists them. - anything naming the upstream Forgejo PROJECT (the artifact-action forks). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
53 lines
2.1 KiB
Markdown
53 lines
2.1 KiB
Markdown
# CI Requirements — StashHandler
|
||
|
||
> Spec lives in [`docs/process.md`](https://git.fabledsword.com/bvandeusen/CI-runner/src/branch/main/docs/process.md)
|
||
> in the CI-Runner repo.
|
||
|
||
## Runtime image
|
||
|
||
The runner image this project's CI consumes via `container.image`.
|
||
|
||
```
|
||
git.fabledsword.com/bvandeusen/ci-python:3.14
|
||
```
|
||
|
||
CI lints and tests under 3.14; the **shipped** runtime is Python 3.12 (the app
|
||
`Dockerfile` is `FROM python:3.12-slim`). The code targets 3.12+ features only
|
||
(walrus, `datetime.now(timezone.utc)`), so the version gap is intentional and
|
||
harmless.
|
||
|
||
## Image deps used
|
||
|
||
Tools/libraries already in the image that this project actually relies on:
|
||
|
||
- python 3.14 (test interpreter)
|
||
- ruff (lint lane — runs with no per-job install)
|
||
- docker CLI + buildx (used by the `publish` job's build-push step)
|
||
|
||
## Per-job tool installs
|
||
|
||
Anything CI installs *at job time* (not in the image):
|
||
|
||
- `pip`/`uv install -r requirements.txt pytest blake3` in the **unit** job.
|
||
- `pytest` — test runner (not in the image).
|
||
- `blake3` — optional runtime hash backend (`HASH_ALGORITHM=blake3`),
|
||
exercised by the hasher tests. Not in `requirements.txt` because the
|
||
default `sha256` path uses stdlib `hashlib`.
|
||
|
||
## Notes
|
||
|
||
Friction, expectations, and anything the maintainer wouldn't see otherwise:
|
||
|
||
- **No integration lane.** StashHandler persists to SQLite (per-run tmpfiles in
|
||
tests) and talks to qBittorrent/Stash over HTTP at runtime only — there is no
|
||
service container to stand up, so family rules 79–82 don't apply here.
|
||
- **Three lanes:** `lint` (ruff) → `unit` (pytest) → `publish` (gated image
|
||
build+push, family rule 46 tag scheme). Publish image is
|
||
`git.fabledsword.com/bvandeusen/stashhandler` (lowercase — matches the prod
|
||
compose pull).
|
||
- Unit suite is a starter set covering the pure logic (hashing, SQLite dedup,
|
||
media-extension filter, file transfer modes). Grow it as behavior is added.
|
||
- Requires repo Actions secret **`REGISTRY_TOKEN`** (Fabled-Git PAT,
|
||
`read:package` + `write:package`) for the publish lane — the injected
|
||
`GITHUB_TOKEN` can't push to the registry (family rule 7).
|