Files
StashHandler/ci-requirements.md
T
bvandeusenandClaude Opus 5 c2d27d9a2b
CI / lint (push) Successful in 3s
CI / unit (push) Successful in 5s
CI / publish (push) Successful in 13s
docs(ci): name the service Fabled-Git, not Forgejo
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>
2026-08-01 19:54:43 -04:00

53 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 7982 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).