From ef8ba3f01f736a3ed8bbe7808945cbbe78bba9f9 Mon Sep 17 00:00:00 2001 From: Mikkeli Matlock Date: Wed, 10 Jun 2026 00:15:29 +0900 Subject: [PATCH] feat: add shared runner Dockerfile and document rebuild process MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All wiki pipelines share novoyuuparosk-wiki-runner:latest — a locally-built image with git, pandoc, ca-certificates, and Python packages pre-installed. Eliminates the apt-get and pip install steps from every job run. Rebuild manually on the Pi when deps change. Co-Authored-By: Claude Sonnet 4.6 --- Dockerfile | 8 ++++++++ README.md | 11 +++++++++++ 2 files changed, 19 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ed3a301 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM python:3.12-slim + +RUN apt-get update -qq \ + && apt-get install -y --no-install-recommends git pandoc ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +COPY pipelines/songs/requirements.txt /tmp/songs-requirements.txt +RUN pip install --no-cache-dir -r /tmp/songs-requirements.txt diff --git a/README.md b/README.md index 53b3b9c..20e42a0 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,17 @@ One `act_runner` instance serves all pipelines. Runs on a Pi 5 (Raspberry Pi OS Container network mode: `host` — required so job containers can reach `localhost:3005` (Gitea) and resolve mDNS hostnames. +### Job container image + +All pipelines share a single pre-built Docker image: `novoyuuparosk-wiki-runner:latest`. The `Dockerfile` is at the repo root. It bakes in system deps (git, pandoc, ca-certificates) and all pipeline Python packages so job containers start instantly with no install steps. + +The image is built manually on the Pi and stored in the local Docker daemon (`pull_image: false` in act_runner config). Rebuild after any change to the `Dockerfile` or a pipeline `requirements.txt`: + +```bash +docker build -t novoyuuparosk-wiki-runner:latest \ + /home/mikkeli/dev/novoyuuparosk-auto-wiki +``` + ## Gitea Actions setup (cross-cutting) Secrets and variables are scoped to user `mikkeli` (no orgs on this instance), inherited by all repos under that account.