- Shell 50.5%
- Dockerfile 49.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Jobs reach a docker:dind sidecar over DOCKER_HOST rather than a host Docker socket. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
| .forgejo/workflows | ||
| test | ||
| Dockerfile | ||
| README.md | ||
hitoma-dyndns
qdm12/ddns-updater rebuilt from its latest release with the current stable Go (golang:alpine) and the latest golang.org/x/net, x/sys and x/crypto, so CVE fixes land without waiting for an upstream release. Runtime behaviour and environment variables match upstream.
docker pull forgejo.hitoma.com/root/hitoma-dyndns:latest
Tests
Every build has to pass both of these before it's pushed:
- test/verify-image.sh, which needs no network:
- the image runs as a non-root user
- the binary reports the release it was built from, matching the image's version label
- the binary carries its own CA roots, which it needs because the image is
FROM scratch
- test/smoke.sh, which starts the updater with an empty config, so no DNS provider is contacted:
- the web UI loads, and the
healthchecksubcommand passes - the config is written to the data directory, so it's writable by the non-root user
- the logs show no errors
- the web UI loads, and the
Both run locally too: test/verify-image.sh IMAGE, then test/smoke.sh IMAGE.
CI
.forgejo/workflows/build.yml builds on every push to main, weekly (Monday 06:37 UTC, without cache, to pick up Go and module updates), and on manual dispatch. Dispatch takes an optional version input to build a specific upstream tag; otherwise the latest GitHub release is used. Pull requests are built and tested but not pushed. The workflow only resolves the upstream tag. Building, testing, scanning and pushing happen in the shared hitoma-image-ci pipeline.
Tags: latest, the upstream release (e.g. v2.10.0), YYYYMMDD, and sha-<short>.
Each build is scanned with Trivy after it passes the tests. Builds of main force-push the badge above and the full JSON report to the single-commit badges branch. The run fails when there are fixable HIGH or CRITICAL findings. The image is still pushed, but the red run shows that a Go or module bump is needed.
Go isn't pinned to upstream's go.mod minimum because the latest golang.org/x modules only support the two newest Go releases. If a module bump breaks the build, the job fails and latest stays on the last good image.
Setup:
- Repository secrets
REGISTRY_USERandREGISTRY_TOKEN(a Forgejo access token withwrite:packagescope). - A Forgejo runner with the
dockerlabel whose job containers can reach a Docker daemon, such as adocker:dindsidecar throughDOCKER_HOST. - Actions enabled on the repository (Settings → Units → Actions).