docs: update image path after repository rename

This commit is contained in:
Sedat Qaja
2026-09-28 13:13:05 +02:00
parent 45bbbd7379
commit 11e3f90c81
2 changed files with 13 additions and 7 deletions
+12 -6
View File
@@ -53,7 +53,7 @@ separate, manual, and need no code change:
| Component | Released by | Deployed by | | Component | Released by | Deployed by |
| --- | --- | --- | | --- | --- | --- |
| Web (ghcr.io image) | `healthchat-v*` tag push → `:latest` moves | `gh workflow run deploy.yml` on the ansible repo | | Web (ghcr.io image) | `healthchat-v*` tag push → `:latest` moves | `gh workflow run deploy.yml` on the ansible repo |
| Desktop (update feed) | `healthchat-v*` tag push → feed tarball on the Release | `gh workflow run deploy-healthchat-desktop.yaml` | | Desktop (update feed) | `healthchat-v*` tag push → staged feed archive on packages.healthchat.ch | `gh workflow run deploy-healthchat-desktop.yaml` |
Writing the desktop feed pushes an update to **every installed client**, so it is a Writing the desktop feed pushes an update to **every installed client**, so it is a
deployment, not a publication step — hence the same manual gate as the server side. deployment, not a publication step — hence the same manual gate as the server side.
@@ -137,10 +137,16 @@ Actions UI.
Publishing the image does **not** deploy it. Deployment is a separate manual Publishing the image does **not** deploy it. Deployment is a separate manual
dispatch against the ansible repo — but it needs **no code change anywhere**: the dispatch against the ansible repo — but it needs **no code change anywhere**: the
inventory pins `matrix_client_element_container_image` to inventory pins `matrix_client_element_container_image` to
`ghcr.io/novaloop-ag/element-web/healthchat-web:latest`, and the ansible role pulls `ghcr.io/novaloop-ag/healthchat-web/healthchat-web:latest`, and the ansible role pulls
with `pull: always`, so it picks up whatever `:latest` now points at and restarts with `pull: always`, so it picks up whatever `:latest` now points at and restarts
the container only if the digest actually moved. the container only if the digest actually moved.
The image path is derived from the repository name
(`format('{0}/healthchat-web', github.repository)`). Renaming the repository moves
the image to a new package and the old one stops receiving builds, so the inventory
pin must follow. This happened on 2026-07-29 when `element-web` became
`healthchat-web`; 1.7.0 was the first release that hit it.
Wait for the release workflow to go green first (the deploy pulls whatever is in the Wait for the release workflow to go green first (the deploy pulls whatever is in the
registry at that moment), then: registry at that moment), then:
@@ -170,7 +176,7 @@ gh workflow run deploy.yml \
--repo Novaloop-AG/matrix-docker-ansible-deploy \ --repo Novaloop-AG/matrix-docker-ansible-deploy \
--ref release/healthchat \ --ref release/healthchat \
-f command="install-service client-element" \ -f command="install-service client-element" \
-f extra_args="-e matrix_client_element_container_image=ghcr.io/novaloop-ag/element-web/healthchat-web:1.5.0" -f extra_args="-e matrix_client_element_container_image=ghcr.io/novaloop-ag/healthchat-web/healthchat-web:1.5.0"
``` ```
Note this is a one-shot override: the *next* plain deploy returns to `:latest`. For a Note this is a one-shot override: the *next* plain deploy returns to `:latest`. For a
@@ -309,7 +315,7 @@ warning. Prefer fixing the changelog over relying on the fallback.
## After the release ## After the release
- [ ] Workflow run is green in GitHub Actions. - [ ] Workflow run is green in GitHub Actions.
- [ ] `docker pull ghcr.io/novaloop-ag/element-web/healthchat-web:<version>` succeeds. - [ ] `docker pull ghcr.io/novaloop-ag/healthchat-web/healthchat-web:<version>` succeeds.
(Note the image path contains the repo segment — the workflow builds it as (Note the image path contains the repo segment — the workflow builds it as
`format('{0}/healthchat-web', github.repository)`.) `format('{0}/healthchat-web', github.repository)`.)
- [ ] GitHub Release exists at - [ ] GitHub Release exists at
@@ -319,8 +325,8 @@ warning. Prefer fixing the changelog over relying on the fallback.
`:<version>`: `:<version>`:
```bash ```bash
docker buildx imagetools inspect ghcr.io/novaloop-ag/element-web/healthchat-web:latest docker buildx imagetools inspect ghcr.io/novaloop-ag/healthchat-web/healthchat-web:latest
docker buildx imagetools inspect ghcr.io/novaloop-ag/element-web/healthchat-web:<version> docker buildx imagetools inspect ghcr.io/novaloop-ag/healthchat-web/healthchat-web:<version>
``` ```
For an `-rc`/`-hotfix`/`-dryrun` tag the opposite is expected: `:latest` must For an `-rc`/`-hotfix`/`-dryrun` tag the opposite is expected: `:latest` must
+1 -1
View File
@@ -133,4 +133,4 @@ Conventions unique to this fork that span multiple files:
`pnpm link` is **not** used (it mutates `package.json`/lockfile). Instead, the `postinstall` hook runs `scripts/pnpm-link.ts`, which reads a `.link-config` file of `DEPENDENCY=PATH` lines and replaces those `node_modules` entries with symlinks. To develop against a local SDK, add a line like `matrix-js-sdk=/abs/path/to/matrix-js-sdk` to `.link-config` (not committed) and re-run `pnpm install`. `pnpm link` is **not** used (it mutates `package.json`/lockfile). Instead, the `postinstall` hook runs `scripts/pnpm-link.ts`, which reads a `.link-config` file of `DEPENDENCY=PATH` lines and replaces those `node_modules` entries with symlinks. To develop against a local SDK, add a line like `matrix-js-sdk=/abs/path/to/matrix-js-sdk` to `.link-config` (not committed) and re-run `pnpm install`.
### Releasing HealthChat ### Releasing HealthChat
Releases are cut by pushing a `healthchat-v<semver>` tag against `release/healthchat`, which triggers `.github/workflows/build-healthchat.yaml` (web) and `build-healthchat-desktop.yaml` (desktop). Release notes come from `HEALTHCHAT_CHANGES.md` (kept separate from upstream `CHANGELOG.md`); the healthchat-workspace plugin ref is pinned in `.healthchat-workspace-version`. The image is published to `ghcr.io/novaloop-ag/element-web/healthchat-web` as `:<version>`, `:<sha>`, and `:latest` — where `:latest` moves **only** for a clean `X.Y.Z` tag push, never for `-rc`/`-hotfix` tags or manual dispatch runs. **Deploying is a separate manual step for both halves** and needs no version bump anywhere: the web side is a `gh workflow run deploy.yml` against the ansible repo (whose inventory tracks `:latest`), and the desktop side is `deploy-healthchat-desktop.yaml`, which publishes the update feed to healthchat.ch. Cutting a tag never pushes an update to installed desktop clients — `build-healthchat-desktop.yaml` only attaches a staged `healthchat-desktop-feed-<version>.tar.gz` to the Release. Full runbook: `releasing-healthchat` skill. Releases are cut by pushing a `healthchat-v<semver>` tag against `release/healthchat`, which triggers `.github/workflows/build-healthchat.yaml` (web) and `build-healthchat-desktop.yaml` (desktop). Release notes come from `HEALTHCHAT_CHANGES.md` (kept separate from upstream `CHANGELOG.md`); the healthchat-workspace plugin ref is pinned in `.healthchat-workspace-version`. The image is published to `ghcr.io/novaloop-ag/healthchat-web/healthchat-web` as `:<version>`, `:<sha>`, and `:latest` — where `:latest` moves **only** for a clean `X.Y.Z` tag push, never for `-rc`/`-hotfix` tags or manual dispatch runs. **Deploying is a separate manual step for both halves** and needs no version bump anywhere: the web side is a `gh workflow run deploy.yml` against the ansible repo (whose inventory tracks `:latest`), and the desktop side is `deploy-healthchat-desktop.yaml`, which publishes the update feed to packages.healthchat.ch. Cutting a tag never pushes an update to installed desktop clients — `build-healthchat-desktop.yaml` only stages the feed archive at `packages.healthchat.ch/desktop-releases/<version>/`. Full runbook: `releasing-healthchat` skill.