From 1136c1948e02b7bdf66ebbcd5d5d9a14e47aa78b Mon Sep 17 00:00:00 2001 From: lucaronin Date: Sun, 26 Apr 2026 14:29:47 +0200 Subject: [PATCH] fix: clarify macos release artifact names --- .github/workflows/release-stable.yml | 12 +++++++---- .github/workflows/release.yml | 6 +++--- docs/ABSTRACTIONS.md | 4 ++-- docs/ARCHITECTURE.md | 4 ++-- src/utils/releaseDownloadPage.test.ts | 30 +++++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release-stable.yml b/.github/workflows/release-stable.yml index f7349803..96ed90b3 100644 --- a/.github/workflows/release-stable.yml +++ b/.github/workflows/release-stable.yml @@ -503,6 +503,8 @@ jobs: run: | normalize_macos_artifacts() { local arch="$1" + local normalized_updater="$2" + local normalized_dmg="$3" local updater_dir="updater-${arch}" local updater_file updater_file=$(find "$updater_dir" -maxdepth 1 -name "*.app.tar.gz" -print -quit) @@ -517,7 +519,6 @@ jobs: return 1 fi - local normalized_updater="${updater_dir}/Tolaria_${arch}.app.tar.gz" local normalized_sig="${normalized_updater}.sig" if [ "$updater_file" != "$normalized_updater" ]; then mv "$updater_file" "$normalized_updater" @@ -534,14 +535,17 @@ jobs: return 1 fi - local normalized_dmg="${dmg_dir}/Tolaria_${arch}.dmg" if [ "$dmg_file" != "$normalized_dmg" ]; then mv "$dmg_file" "$normalized_dmg" fi } - normalize_macos_artifacts aarch64 - normalize_macos_artifacts x86_64 + normalize_macos_artifacts aarch64 \ + "updater-aarch64/Tolaria_${{ needs.version.outputs.version }}_macOS_Silicon.app.tar.gz" \ + "dmg-aarch64/Tolaria_${{ needs.version.outputs.version }}_macOS_Silicon.dmg" + normalize_macos_artifacts x86_64 \ + "updater-x86_64/Tolaria_${{ needs.version.outputs.version }}_macOS_Intel.app.tar.gz" \ + "dmg-x86_64/Tolaria_${{ needs.version.outputs.version }}_macOS_Intel.dmg" - name: Generate release notes run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cb16f29d..e8cceb06 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -557,6 +557,7 @@ jobs: run: | normalize_updater() { local arch="$1" + local normalized_updater="$2" local artifact_dir="updater-${arch}" local updater_file updater_file=$(find "$artifact_dir" -maxdepth 1 -name "*.app.tar.gz" -print -quit) @@ -571,7 +572,6 @@ jobs: return 1 fi - local normalized_updater="${artifact_dir}/Tolaria_${arch}.app.tar.gz" local normalized_sig="${normalized_updater}.sig" if [ "$updater_file" != "$normalized_updater" ]; then mv "$updater_file" "$normalized_updater" @@ -581,8 +581,8 @@ jobs: fi } - normalize_updater aarch64 - normalize_updater x86_64 + normalize_updater aarch64 "updater-aarch64/Tolaria_${{ needs.version.outputs.version }}_macOS_Silicon.app.tar.gz" + normalize_updater x86_64 "updater-x86_64/Tolaria_${{ needs.version.outputs.version }}_macOS_Intel.app.tar.gz" - name: Generate release notes run: | diff --git a/docs/ABSTRACTIONS.md b/docs/ABSTRACTIONS.md index 627f8681..7120a39a 100644 --- a/docs/ABSTRACTIONS.md +++ b/docs/ABSTRACTIONS.md @@ -721,6 +721,6 @@ Managed by `useSettings` hook and `SettingsPanel` component. `theme_mode` is ins - **`download_and_install_app_update`** — Channel-aware download/install with streamed progress events. ### CI/CD -- **`.github/workflows/release.yml`** — Alpha prereleases from every push to `main` using calendar-semver technical versions (`YYYY.M.D-alpha.N`) and clean `Alpha YYYY.M.D.N` release names. GitHub alpha tags zero-pad the prerelease sequence (`alpha-vYYYY.M.D-alpha.NNNN`) so GitHub release ordering stays chronological while the shipped app version remains `YYYY.M.D-alpha.N`. Publishes `alpha/latest.json` with macOS Apple Silicon/Intel, Linux x64, and Windows x64 updater entries, then refreshes the legacy `latest.json` / `latest-canary.json` aliases to the alpha feed. -- **`.github/workflows/release-stable.yml`** — Stable releases from `stable-vYYYY.M.D` tags. Publishes `stable/latest.json`, macOS Apple Silicon and Intel DMG/updater artifacts, Windows x64 installers/updater bundles, and Linux x86_64 `.deb` / AppImage artifacts. +- **`.github/workflows/release.yml`** — Alpha prereleases from every push to `main` using calendar-semver technical versions (`YYYY.M.D-alpha.N`) and clean `Alpha YYYY.M.D.N` release names. GitHub alpha tags zero-pad the prerelease sequence (`alpha-vYYYY.M.D-alpha.NNNN`) so GitHub release ordering stays chronological while the shipped app version remains `YYYY.M.D-alpha.N`. Publishes `alpha/latest.json` with macOS Apple Silicon/Intel, Linux x64, and Windows x64 updater entries, then refreshes the legacy `latest.json` / `latest-canary.json` aliases to the alpha feed. macOS release assets use `Tolaria__macOS_Silicon` and `Tolaria__macOS_Intel` base names. +- **`.github/workflows/release-stable.yml`** — Stable releases from `stable-vYYYY.M.D` tags. Publishes `stable/latest.json`, macOS Apple Silicon and Intel DMG/updater artifacts, Windows x64 installers/updater bundles, and Linux x86_64 `.deb` / AppImage artifacts. Stable macOS DMG/updater assets use the same `Tolaria__macOS_Silicon` and `Tolaria__macOS_Intel` base names. - **Beta cohorts** are handled in PostHog targeting only. There is no beta updater feed. diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index d20756a9..58eda5b8 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -823,7 +823,7 @@ push to main → build job: → pnpm install, stamp version, pnpm build, tauri build --target aarch64-apple-darwin --bundles app → pnpm install, stamp version, pnpm build, tauri build --target x86_64-apple-darwin --bundles app - → upload signed Apple Silicon and Intel .app.tar.gz + .sig updater artifacts + → upload signed Apple Silicon and Intel .app.tar.gz + .sig updater artifacts named Tolaria__macOS_Silicon and Tolaria__macOS_Intel → build-windows job: → pnpm install, stamp version, tauri build --target x86_64-pc-windows-msvc --bundles nsis → upload NSIS installer, optional MSI artifacts, and signed Windows updater bundles @@ -846,7 +846,7 @@ push stable-vYYYY.M.D tag → build job: → pnpm install, stamp version, pnpm build, tauri build --target aarch64-apple-darwin → pnpm install, stamp version, pnpm build, tauri build --target x86_64-apple-darwin - → upload signed Apple Silicon and Intel .app.tar.gz + .sig and .dmg artifacts + → upload signed Apple Silicon and Intel .app.tar.gz + .sig and .dmg artifacts named Tolaria__macOS_Silicon and Tolaria__macOS_Intel → build-linux job: → pnpm install, stamp version, tauri build --target x86_64-unknown-linux-gnu --bundles deb,appimage → upload .deb, .AppImage, and signed Linux updater bundles diff --git a/src/utils/releaseDownloadPage.test.ts b/src/utils/releaseDownloadPage.test.ts index 8337e0b8..bb86048d 100644 --- a/src/utils/releaseDownloadPage.test.ts +++ b/src/utils/releaseDownloadPage.test.ts @@ -1,3 +1,4 @@ +import { readFileSync } from 'node:fs' import { buildStableDownloadRedirectPage, extractStableDownloadTargets, @@ -5,6 +6,35 @@ import { resolveStableDownloadTargets, } from './releaseDownloadPage' +describe('release workflow macOS artifact names', () => { + it('publishes versioned Silicon and Intel artifact names', () => { + const alphaWorkflow = readFileSync(`${process.cwd()}/.github/workflows/release.yml`, 'utf8') + const stableWorkflow = readFileSync( + `${process.cwd()}/.github/workflows/release-stable.yml`, + 'utf8', + ) + + expect(alphaWorkflow).toContain( + 'Tolaria_${{ needs.version.outputs.version }}_macOS_Silicon.app.tar.gz', + ) + expect(alphaWorkflow).toContain( + 'Tolaria_${{ needs.version.outputs.version }}_macOS_Intel.app.tar.gz', + ) + expect(stableWorkflow).toContain( + 'Tolaria_${{ needs.version.outputs.version }}_macOS_Silicon.app.tar.gz', + ) + expect(stableWorkflow).toContain( + 'Tolaria_${{ needs.version.outputs.version }}_macOS_Intel.app.tar.gz', + ) + expect(stableWorkflow).toContain( + 'Tolaria_${{ needs.version.outputs.version }}_macOS_Silicon.dmg', + ) + expect(stableWorkflow).toContain( + 'Tolaria_${{ needs.version.outputs.version }}_macOS_Intel.dmg', + ) + }) +}) + describe('extractStableDownloadTargets', () => { it('returns stable downloads for each supported desktop platform when present', () => { expect(