This repository contains Docker images I build and publish for my home cluster.
images/<image>/Dockerfile.dockerignoreREADME.md(image-specific notes: upstream, config, usage)image.toml(metadata used by CI)
scripts/- repo automation (matrix generation, local build helpers)
.github/workflows/- CI and publish workflows
Required keys:
image(string): image name segment used in the registry path (defaults to folder name if omitted).
Optional keys:
version(string): if set, CI publishes this tag as well (example:"1.2.3"or"v1.2.3").platforms(array of strings): defaults to["linux/amd64", "linux/arm64"].build_args(table of string keys/values): passed todocker buildas--build-arg KEY=VALUE.
Example:
image = "kube-tools"
version = "1.30.4"
platforms = ["linux/amd64", "linux/arm64"]
build_args = { TOOL_VERSION = "v1.30.4" }- Registry: GHCR.
- Image reference format:
ghcr.io/<owner>/<repo>/<image>. - On push to
main, for each changed image:- always push
:latest - always push
:sha-<shortsha> - if
versionis set inimage.toml, also push:<version>
- always push
Notes:
- Version tags are not immutable by default. If you re-run CI with the same
version, it can republish that tag.
- Use
miseto install tool dependencies in CI (viajdx/mise-action). - Builds must be multi-arch with Buildx (at least
linux/amd64andlinux/arm64). - PRs should validate Dockerfiles (lint + build) but must not push to GHCR.
- CI must run repo linting via
./scripts/lint.sh(ShellCheck forscripts/*.sh, Hadolint forimages/*/Dockerfile).
- Run locally:
./scripts/lint.sh - CI must run this script on PRs and on
mainpublishes so linting stays consistent across sessions.
- Create
images/<image>/Dockerfileand.dockerignore. - Add
images/<image>/image.toml(setversionif you want a stable tag). - Add a short
images/<image>/README.md.