CI: build and publish the container image to GHCR
publish image / image (push) Canceled after 0s

The Dockerfile's builder stage already runs the unit suite, so the workflow
deliberately has no separate test job -- a red test cannot produce an image.

After pushing, the published artifact is smoke-tested by digest: `--version`
covers a runtime stage missing a shared library, and `--check` against a
throwaway credentials file covers the config baked into the image. Both were
failure modes a green build would not have caught. The `--check` invocation is
verified locally against docker/openvpngate.conf.

`latest` follows the newest v* tag rather than the branch head; master head is
published as `master`. Registry paths are lowercased explicitly rather than
relying on metadata-action, since the same value is reused for the smoke test.

GHCR_TOKEN / GHCR_USER / GHCR_IMAGE override the built-ins so this still works
from a mirror or a Gitea/Forgejo runner, where the ambient token authenticates
to the wrong registry. On github.com none of them need to be set.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
iceBear67
2026-07-28 06:04:51 +00:00
co-authored by Claude Opus 5
parent f37cd0a125
commit 40b47a8f66
5 changed files with 220 additions and 2 deletions
+4
View File
@@ -11,6 +11,10 @@ build*/
.gitignore
.dockerignore
# CI definitions cannot affect the build, and leaving them in means editing a
# workflow invalidates the COPY layer and recompiles openvpn3 for nothing.
.github/
# Runtime state. The node cache and the outcome history belong to whichever
# machine produced them; the container gets its own in a volume.
var/