Files
2026-05-07 23:17:26 +00:00

130 lines
3.4 KiB
Markdown

# Gitea Actions runner setup for this repo
This repository expects a Gitea Actions runner with the label:
- `alpine-latest:docker://node:20-alpine`
That label is intentional:
- `actions/checkout@v4` needs a Node-capable job image
- the build itself wants `apk`, which is easiest on Alpine
- the workflow then compiles a static `musl` binary directly inside the job container
## Recommended placement in your infra
Best fit: **your NL dedicated Debian 12 server**.
Why:
- separate from the Gitea host, which is the recommended topology
- always-on box
- Docker is straightforward there
- enough resources for lightweight source builds
Home server also works, but the NL dedicated host is the cleaner default.
## 1. Confirm Actions are enabled in Gitea
Your Gitea is `1.26.1`, so instance-level Actions support is already built in by default.
Still verify:
- repo: `xnullzz/static-musl-builds`
- open `Settings -> Actions`
- ensure **Enable Repository Actions** is on
The workflow is already detected by Gitea, so the remaining missing piece is the runner.
## 2. Get a registration token
You can create either:
- an **instance runner** token in `Site Administration -> Actions -> Runners`, or
- a **repository runner** token in `xnullzz/static-musl-builds -> Settings -> Actions -> Runners`
For this project, a repository runner is enough.
## 3. Install Docker on the runner host
On Debian 12:
```bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl docker.io
sudo systemctl enable --now docker
```
## 4. Run act_runner in Docker
Create a directory:
```bash
sudo mkdir -p /opt/gitea-runner
sudo chown "$USER":"$USER" /opt/gitea-runner
cd /opt/gitea-runner
```
Create `docker-compose.yml`:
```yaml
services:
runner:
image: docker.io/gitea/act_runner:0.2.11
restart: always
environment:
CONFIG_FILE: /config.yaml
GITEA_INSTANCE_URL: "https://g.o4kosebezablokiruyte.ru"
GITEA_RUNNER_REGISTRATION_TOKEN: "PUT_TOKEN_HERE"
GITEA_RUNNER_NAME: "nl-dedicated-static-builder"
volumes:
- ./config.yaml:/config.yaml
- ./data:/data
- /var/run/docker.sock:/var/run/docker.sock
```
Generate a starter config:
```bash
docker run --rm --entrypoint="" docker.io/gitea/act_runner:0.2.11 \
act_runner generate-config > config.yaml
mkdir -p data
```
Then edit `config.yaml` and replace the default `runner.labels` block with:
```yaml
runner:
labels:
- "alpine-latest:docker://node:20-alpine"
- "ubuntu-latest:docker://node:20-bookworm"
```
This matters because when `config.yaml` already contains `runner.labels`, the container startup env `GITEA_RUNNER_LABELS` is ignored.
Then start it:
```bash
docker compose up -d
```
## 5. Verify the runner
In Gitea, confirm the runner appears as online.
You should see labels including:
- `alpine-latest`
- `ubuntu-latest`
## 6. Trigger a test build
After the runner is online, either:
- re-run the queued workflow from the Actions UI, or
- push any small commit to `main`
Expected result:
- workflow builds `iperf3`
- a release tagged like `iperf3-v3.21` appears
- release assets include the static binary, tarball, and sha256 file
## Notes
- The queued run already visible in Gitea means repo Actions are working; only execution capacity is missing.
- If you later add more binaries, the same runner can be reused.
- If you want stricter isolation later, you can move to ephemeral runners, but for a personal infra repo this persistent Docker runner is a good starting point.