chore: move desktop packages to packages.healthchat.ch

This commit is contained in:
2026-07-29 22:28:43 +02:00
parent 675e812f00
commit ab295d810c
5 changed files with 51 additions and 26 deletions
@@ -11,7 +11,7 @@ name: Build HealthChat Desktop
#
# Notes:
# - This workflow RELEASES but does not DEPLOY. It attaches the installers and a staged update-feed
# tarball to the GitHub Release; the live auto-update feed at healthchat.ch/packages/desktop/ is
# tarball to the GitHub Release; the live auto-update feed at packages.healthchat.ch/desktop/ is
# only touched by the manually dispatched deploy-healthchat-desktop.yaml. So cutting a tag never
# pushes an update to already-installed apps until a human decides to ship it.
# - The reusable build workflows are pointed at THIS fork (repository/ref inputs) so the Electron
@@ -195,10 +195,10 @@ jobs:
targets: "dmg zip"
# Generates dist/releases.json (the Squirrel.Mac feed manifest). The reusable appends
# `/update/macos/<zip>` to this, so the in-manifest URL becomes
# https://healthchat.ch/packages/desktop/update/macos/<zip>, matching where the
# https://packages.healthchat.ch/desktop/update/macos/<zip>, matching where the
# `release` job publishes the feed. Keep in sync with update_base_url in
# element.io/healthchat/config.json (.../packages/desktop/update/).
base-url: https://healthchat.ch/packages/desktop
# element.io/healthchat/config.json (.../desktop/update/).
base-url: https://packages.healthchat.ch/desktop
windows:
name: Windows ${{ matrix.arch }}
@@ -273,7 +273,7 @@ jobs:
gh release upload "$TAG" release-files/* --clobber
# The GitHub Release above is private (internal fork), so it can't serve end users or the
# Squirrel auto-updater. Those are served from healthchat.ch/packages/desktop/, which is
# Squirrel auto-updater. Those are served from packages.healthchat.ch/desktop/, which is
# published by the SEPARATE, MANUALLY DISPATCHED "Deploy HealthChat Desktop" workflow
# (deploy-healthchat-desktop.yaml) — releasing never touches the live update feed.
# This job only *stages* that feed and attaches it to the Release as a tarball, so the
@@ -1,13 +1,13 @@
name: Deploy HealthChat Desktop
# Publishes an already-released desktop build to healthchat.ch/packages/desktop/ over FTPS.
# Publishes an already-released desktop build to packages.healthchat.ch/desktop/ over FTPS.
#
# This is the DEPLOY half of the desktop pipeline, deliberately split from the release half
# (build-healthchat-desktop.yaml). Cutting a `healthchat-v*` tag builds, signs and attaches the
# installers plus a staged update-feed tarball to the GitHub Release, but never touches the live
# feed. Nothing reaches installed apps until this workflow is dispatched by hand.
#
# Why that split matters: the feed under .../packages/desktop/update/ is what the Squirrel
# Why that split matters: the feed under .../desktop/update/ is what the Squirrel
# auto-updater polls. Writing to it pushes an update to every installed client, so it is a
# deployment, not a publication step — the same reason the ansible playbook's deploy is a manual
# dispatch rather than a release trigger.
@@ -38,7 +38,7 @@ concurrency:
jobs:
deploy:
name: Publish update feed to healthchat.ch
name: Publish update feed to packages.healthchat.ch
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
@@ -126,11 +126,21 @@ 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" <<LFTP
set cmd:fail-exit true
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ssl:verify-certificate true
mkdir -pf /public_html/packages/desktop
mirror -R $MIRROR_OPTS feed/ /public_html/packages/desktop/
mkdir -pf /public_html/healthchat.ch/packages/desktop
mirror -R $MIRROR_OPTS feed/ /public_html/healthchat.ch/packages/desktop/
bye
@@ -140,13 +150,19 @@ jobs:
if: ${{ !inputs.dry_run }}
run: |
set -euo pipefail
base="https://healthchat.ch/packages/desktop"
base="https://packages.healthchat.ch/desktop"
# The legacy healthchat.ch URLs keep clients built <= 1.5.0 updating; drop them
# together with the legacy mirror above once the installed base has migrated.
legacy="https://healthchat.ch/packages/desktop"
fail=0
for url in "$base/update/macos/releases.json" \
"$base/update/win32/x64/RELEASES" \
"$base/update/win32/arm64/RELEASES" \
"$base/install/macos/HealthChat.dmg" \
"$base/install/win32/x64/HealthChat-Setup.exe"; do
"$base/install/win32/x64/HealthChat-Setup.exe" \
"$legacy/update/macos/releases.json" \
"$legacy/update/win32/x64/RELEASES" \
"$legacy/update/win32/arm64/RELEASES"; do
code=$(curl -fsS -o /dev/null -w '%{http_code}' -I "$url" 2>/dev/null || echo "000")
if [[ "$code" == "200" ]]; then echo "ok $code $url"; else echo "FAIL $code $url"; fail=1; fi
done