diff --git a/.claude/skills/releasing-healthchat/SKILL.md b/.claude/skills/releasing-healthchat/SKILL.md index a69a3d1f16..a7fe7bbd38 100644 --- a/.claude/skills/releasing-healthchat/SKILL.md +++ b/.claude/skills/releasing-healthchat/SKILL.md @@ -34,9 +34,9 @@ Releases are driven by git tags of the form `healthchat-v` pushed to - `.github/workflows/deploy-healthchat-desktop.yaml` (desktop deploy) — **manual dispatch only.** Fetches the staged archive for the requested version and mirrors it to the live feed at `https://packages.healthchat.ch/desktop/` over FTPS (the private - GitHub Release can serve neither end users nor the auto-updater), plus the legacy - `https://healthchat.ch/packages/desktop/` path while clients built <= 1.5.0 are still - in the field. This is what makes installed apps + GitHub Release can serve neither end users nor the auto-updater). The pre-1.6.0 feed + at `https://healthchat.ch/packages/desktop/` is retired and frozen at 1.5.0 — installs + that old must reinstall once from the new download URL. This is what makes installed apps self-update; see `apps/desktop/element.io/healthchat/README` for the feed layout and the two caveats (first install is manual; Windows auto-update needs the Setup.exe path, not the .msi). @@ -341,7 +341,7 @@ release"): - [ ] Web deployed and `curl -fsS https://app.healthchat.ch/version` reports the new version. - [ ] Desktop feed deployed: the "Deploy HealthChat Desktop" run is green. Its own verify - step already asserts the feed URLs (canonical + legacy) return 200, so a green run is + step already asserts the feed URLs return 200, so a green run is the check. - [ ] `releases.json` now advertises the new version: `curl -fsS https://packages.healthchat.ch/desktop/update/macos/releases.json | jq -r '.releases[0].updateTo.version'` @@ -356,7 +356,7 @@ Configured in repo Settings → Secrets and variables → Actions: |---|---| | `HEALTHCHAT_WORKSPACE_TOKEN` | PAT with read access to `Novaloop-AG/healthchat-workspace`. Needed by `actions/checkout` for the private plugin repo. | | `GITHUB_TOKEN` | Auto-provided. Used for ghcr.io login and GitHub Release creation. No manual setup required. | -| `FTP_SERVER` / `FTP_USERNAME` / `FTP_PASSWORD` | Credentials for the healthchat.ch FTP(S) account (docroot of packages.healthchat.ch is `/public_html/packages`). Used by the `release` job of `build-healthchat-desktop.yaml` to stage the feed archive under `/public_html/packages/desktop-releases//`, and by `deploy-healthchat-desktop.yaml` to publish the live feed under `/public_html/packages/desktop/` plus, during the URL migration, the legacy `/public_html/healthchat.ch/packages/desktop/`. `FTP_SERVER` is the hostname only (explicit FTPS / AUTH TLS). | +| `FTP_SERVER` / `FTP_USERNAME` / `FTP_PASSWORD` | Credentials for the healthchat.ch FTP(S) account (docroot of packages.healthchat.ch is `/public_html/packages`). Used by the `release` job of `build-healthchat-desktop.yaml` to stage the feed archive under `/public_html/packages/desktop-releases//`, and by `deploy-healthchat-desktop.yaml` to publish the live feed under `/public_html/packages/desktop/`. `FTP_SERVER` is the hostname only (explicit FTPS / AUTH TLS). | Desktop signing additionally requires two GitHub **environments** (Settings → Environments). Without them the desktop builds still run but produce diff --git a/.github/workflows/deploy-healthchat-desktop.yaml b/.github/workflows/deploy-healthchat-desktop.yaml index c2ee1b3b5e..e58dac45c5 100644 --- a/.github/workflows/deploy-healthchat-desktop.yaml +++ b/.github/workflows/deploy-healthchat-desktop.yaml @@ -40,7 +40,7 @@ jobs: deploy: name: Publish update feed to packages.healthchat.ch runs-on: ubuntu-latest - # Fetches ~2 GiB from the archive and uploads it twice (canonical + legacy path). + # Fetches ~2 GiB from the archive and uploads it to the live feed. timeout-minutes: 60 steps: - name: Resolve version @@ -135,14 +135,6 @@ jobs: # *.nupkg are preserved (Squirrel.Windows delta history) and only the staged files # are written/overwritten. If the host's FTPS cert is untrusted, set # ssl:verify-certificate to no. - # - # Dual-publish during the URL migration: /public_html/packages is the docroot of - # packages.healthchat.ch (the canonical feed URL since builds > 1.5.0), while - # /public_html/healthchat.ch/packages/desktop serves the legacy - # healthchat.ch/packages/desktop URL that clients built <= 1.5.0 still poll — - # they only learn the new URL by installing an update delivered over the old - # feed. Drop the legacy mirror (and its verify checks below) once the installed - # base is on a build carrying the new update_base_url. lftp -u "$FTP_USERNAME" --env-password "$FTP_SERVER" </dev/null || echo "000") if [[ "$code" == "200" ]]; then echo "ok $code $url"; else echo "FAIL $code $url"; fail=1; fi done diff --git a/HEALTHCHAT_CHANGES.md b/HEALTHCHAT_CHANGES.md index 43915f6a58..a2e22ae1e5 100644 --- a/HEALTHCHAT_CHANGES.md +++ b/HEALTHCHAT_CHANGES.md @@ -18,9 +18,9 @@ One section per released version, newest on top. Upstream element-hq 🧹 Internal - Desktop installers and the auto-update feed are now hosted at - `https://packages.healthchat.ch/desktop/`. Already-installed apps keep updating: - releases are also published to the legacy `https://healthchat.ch/packages/desktop/` - feed until all clients are on a build that knows the new address. + `https://packages.healthchat.ch/desktop/`; the old address is retired. Apps on + version 1.5.0 or older do not check the new address — download the current + installer once from the new URL, and updates resume automatically afterwards. ## Changes in 1.5.0 (2026-07-28) diff --git a/apps/desktop/element.io/healthchat/README b/apps/desktop/element.io/healthchat/README index d45d8fff92..4650bb1519 100644 --- a/apps/desktop/element.io/healthchat/README +++ b/apps/desktop/element.io/healthchat/README @@ -128,11 +128,10 @@ Add these repo secrets: FTP_PASSWORD Caveats: - - URL migration: builds <= 1.5.0 poll the legacy feed at - https://healthchat.ch/packages/desktop/ (docroot /public_html/healthchat.ch/packages/) — - they only learn the new URL by installing an update delivered over that old feed. The - deploy workflow therefore dual-publishes to both directories; drop the legacy mirror and - its verify checks once the installed base is on a build carrying the new update_base_url. + - Builds <= 1.5.0 polled the retired feed at https://healthchat.ch/packages/desktop/, which + is frozen at 1.5.0 — those installs never see newer versions. Users on them must download + the current installer once from the packages.healthchat.ch install/ URL; updates resume + automatically afterwards. - First install is manual. Apps already installed without update_base_url (<= 1.1.2) cannot self-update to the first build that carries it; users must download once from the install/ URL. Every release after that updates automatically.