Pick a skill: the parts where I use it light up on the map and I tell you what for.
- Terraform
- Formatting and validation in CI with no state; the PR's plan and a saved plan applied as is.
- Ansible
- ansible-lint with a baseline, affected playbooks in dry-run and this site deployed with its role.
- LXC
- Forgejo and the runner, each in its own unprivileged container; the runner is rebuilt from scratch.
- Forgejo · Actions
- Git server with PRs, protected branches, Actions and webhooks; runners in host mode, each with just what it needs, and fleet updates at the press of a button.
- Renovate
- Weekly PRs for new versions with their official checksum, grouped when they must go together and majors with prior approval.
- Git
- Origin at home, a backup on every commit, the old central read-only and GitHub as the public copy.
- Linux (Debian, Alpine, Arch)
- Debian containers with pinned versions and checked checksums for every binary.
- Linux / SSH hardening
- A runner with no secrets, gitleaks over the whole history and a leak check before publishing.
- PostgreSQL
- A socket-only PostgreSQL on the runner: each test creates its own database.
- Rust
- This site's CI: formatting, clippy, tests and the build, cached between runs.