Skip to content

Add Docker image release pipeline - #10

Merged
maksimu merged 1 commit into
mainfrom
ci/docker-publish
Aug 27, 2026
Merged

Add Docker image release pipeline#10
maksimu merged 1 commit into
mainfrom
ci/docker-publish

Conversation

@maksimu

@maksimu maksimu commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds the release pipeline for keeper/gchat-app, published to DockerHub for linux/amd64 and linux/arm64.

  • ci.yml — builds both architectures on pull requests and pushes to main, and runs the offline flow plus a container smoke test
  • docker-release.yml — on a v* tag, publishes :vX.Y.Z and :<short-sha>; never modifies :latest
  • docker-promote-latest.yml — manual step that moves :latest by copying an already-published digest

Also adds Taskfile.yml, .dockerignore, docker-compose.example.yml, CHANGELOG.md and RELEASING.md; moves the image to Node 22 with npm ci against the lockfile and no fallback; and fixes the README Docker section, which referenced a docker-compose.yml that gchat-app-setup generates rather than one committed here.

Context

Keeper Commander's gchat-app-setup generates customer compose files that pin keeper/gchat-app:latest, but that image has never been published, so the documented setup flow cannot complete. This repository had no release plumbing.

Two design points worth noting during review:

  • :latest is moved by copying a published digest rather than by rebuilding, so the image customers receive is the same one verified in a real deployment. It also cannot be pointed at a prerelease or moved backwards.
  • Publishing happens only in CI. The image is multi-arch, so a local docker push would publish a single-architecture image.

The release process is documented in RELEASING.md.

Required before the first release

A GitHub environment named release holding DOCKERHUB_USERNAME and DOCKERHUB_TOKEN as environment secrets, with read and write access to keeper/gchat-app.

Publishes keeper/gchat-app to DockerHub for linux/amd64 and linux/arm64.

- ci.yml builds both architectures on pull requests and runs a smoke test
- docker-release.yml publishes :vX.Y.Z and :<short-sha> on a version tag
- docker-promote-latest.yml moves :latest by copying an already-published
  digest, so :latest resolves to an image that was verified in a deployment
- Taskfile provides the tag/tag-rc/promote entry points and dev helpers
- Dockerfile: Node 22, and npm ci against the lockfile with no fallback
- Add .dockerignore, docker-compose.example.yml, CHANGELOG.md, RELEASING.md
- Fix the README Docker section, which referenced a docker-compose.yml that
  gchat-app-setup generates rather than one committed to the repo
- Ignore the generated docker-compose.yml; it embeds a KSM config and API key
- Remove the setup:pubsub script; scripts/setup_pubsub.js does not exist
@maksimu
maksimu merged commit c9a46e9 into main Aug 27, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant