The Docker image is published to keeper/gchat-app on DockerHub for linux/amd64 and
linux/arm64.
Keeper Commander's gchat-app-setup command generates customer compose files that reference
keeper/gchat-app:latest, so :latest is only ever moved to a tag that has been verified in a
real deployment.
| Workflow | Trigger | Publishes |
|---|---|---|
ci.yml |
Pull requests, pushes to main |
Nothing. Builds both architectures and runs a smoke test. |
docker-release.yml |
Push of a v* tag |
:vX.Y.Z and :<short-sha> |
docker-promote-latest.yml |
Manual | :latest |
Publishing happens only in CI. There is no local push path, because the image is multi-arch.
A GitHub environment named release holding DOCKERHUB_USERNAME and DOCKERHUB_TOKEN as
environment secrets. The token needs read and write access to keeper/gchat-app.
-
Set
versioninpackage.jsonand merge tomain. The release workflow rejects a tag that does not match this value. -
Publish a release candidate:
task tag-rc RC=1
This pushes
vX.Y.Z-rc.N, which publishes the RC tag and leaves:latestuntouched. -
Verify the release candidate end to end:
- Run
gchat-app-setupin Commander, then edit the generateddocker-compose.ymlto reference the RC tag instead of:latest. docker compose up -ddocker logs keeper-serviceshows Commander healthy.docker logs keeper-gchat-appshowsGOOGLE CHAT SERVER STARTEDandKEEPER SERVICE MODE ACCESSIBLE. The second banner confirms the app resolved the Commander service over the compose network.- No warning about the
servercommand being unavailable. Without it, vault deep links fall back to a default domain. - In Google Chat, run
/keeper-request-record "AWS test" need staging access. An approval card appears in the approvals space. Search Records exercises theCARD_CLICKEDPub/Sub path; selecting a record and approving updates the card and sends the requester a direct message.
- Run
-
Publish the release:
task tag
-
Promote
:latestto the verified tag:task promote TAG=vX.Y.Z
This copies the published manifest by digest rather than rebuilding, so
:latestresolves to the same image that was verified in step 3. -
Confirm an unauthenticated pull works, since customers pull anonymously:
docker logout docker pull keeper/gchat-app:latest -
Add the release to
CHANGELOG.md.
- Version tags are immutable. The release workflow fails if the tag already exists on DockerHub; bump the version instead of moving a tag.
- A tag must be an ancestor of
mainto release. :latestcannot be moved backwards, and cannot be pointed at a prerelease.