feat: expose rpm download option
This commit is contained in:
@@ -910,5 +910,5 @@ Managed by `useSettings` hook and `SettingsPanel` component. `theme_mode` is ins
|
||||
|
||||
### 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. The Linux job uses Tauri's stock linuxdeploy AppImage output plugin and validates that installer and updater-signature artifacts exist before upload. The docs/release Pages job reads the stable manifest from the latest stable release asset instead of copying the live Pages URL, uploads the built site as a Pages artifact, and deploys it with GitHub's official Pages action so the public updater JSON changes as part of the release workflow. macOS release assets use `Tolaria_<version>_macOS_Silicon` and `Tolaria_<version>_macOS_Intel` base names. Packaged builds pass the computed version as `VITE_SENTRY_RELEASE`, which is retained as a diagnostic build-version tag but not registered as a normal Sentry release for alpha builds.
|
||||
- **`.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, Linux x86_64 `.deb` / `.rpm` / AppImage artifacts, and a static public download page that starts the selected installer without replacing the page with a blank download navigation. The Linux job uses the same stock Tauri/linuxdeploy AppImage packaging and artifact validation as alpha releases. The Pages job reads the alpha manifest from the latest alpha release asset instead of copying the live Pages URL, uploads the built site as a Pages artifact, and deploys it with GitHub's official Pages action so stable and alpha manifests stay fresh. Stable macOS DMG/updater assets use the same `Tolaria_<version>_macOS_Silicon` and `Tolaria_<version>_macOS_Intel` base names. Packaged builds pass the computed stable version as `VITE_SENTRY_RELEASE`, which is registered as Sentry's release.
|
||||
- **`.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, Linux x86_64 `.deb` / `.rpm` / AppImage artifacts, and a static public download page that starts the selected installer without replacing the page with a blank download navigation. Linux visitors default to the AppImage target while the page exposes RPM as a manual Linux package option when the stable release includes one. The Linux job uses the same stock Tauri/linuxdeploy AppImage packaging and artifact validation as alpha releases. The Pages job reads the alpha manifest from the latest alpha release asset instead of copying the live Pages URL, uploads the built site as a Pages artifact, and deploys it with GitHub's official Pages action so stable and alpha manifests stay fresh. Stable macOS DMG/updater assets use the same `Tolaria_<version>_macOS_Silicon` and `Tolaria_<version>_macOS_Intel` base names. Packaged builds pass the computed stable version as `VITE_SENTRY_RELEASE`, which is registered as Sentry's release.
|
||||
- **Beta cohorts** are handled in PostHog targeting only. There is no beta updater feed.
|
||||
|
||||
@@ -971,7 +971,7 @@ push stable-vYYYY.M.D tag
|
||||
→ build VitePress public docs into the GitHub Pages root
|
||||
→ build static HTML release history page at /releases/
|
||||
→ publish stable/latest.json
|
||||
→ publish stable/download/ and download/ as permanent download pages that keep the browser page visible while the platform installer starts
|
||||
→ publish stable/download/ and download/ as permanent download pages that keep the browser page visible while the platform installer starts, default Linux visitors to AppImage, and expose RPM as a manual Linux option when the stable release includes one
|
||||
→ preserve alpha/latest.json
|
||||
→ deploy to gh-pages
|
||||
```
|
||||
|
||||
@@ -6,7 +6,7 @@ Tolaria is a desktop app built with Tauri. Releases currently target macOS, Wind
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
|
||||
## Support Policy
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ brew install --cask tolaria
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
|
||||
See [Supported Platforms](/reference/supported-platforms) for the current support policy.
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ brew install --cask tolaria
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
|
||||
See [Supported Platforms](/reference/supported-platforms) for the current support policy.
|
||||
|
||||
@@ -1272,7 +1272,7 @@ Tolaria is a desktop app built with Tauri. Releases currently target macOS, Wind
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
|
||||
## Support Policy
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ Tolaria is a desktop app built with Tauri. Releases currently target macOS, Wind
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
|
||||
## Support Policy
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ brew install --cask tolaria
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
|
||||
See [Supported Platforms](/reference/supported-platforms) for the current support policy.
|
||||
|
||||
|
||||
@@ -247,7 +247,7 @@ Tolaria is a desktop app built with Tauri. Releases currently target macOS, Wind
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
|
||||
|
||||
## Support Policy
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ brew install --cask tolaria
|
||||
| --- | --- | --- |
|
||||
| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. |
|
||||
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. |
|
||||
| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
|
||||
|
||||
See [Supported Platforms](/reference/supported-platforms) for the current support policy.
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ describe('extractStableDownloadTargets', () => {
|
||||
url: 'https://example.com/Tolaria-x64.dmg',
|
||||
},
|
||||
'linux-x86_64': {
|
||||
label: 'Linux',
|
||||
label: 'Linux AppImage',
|
||||
url: 'https://example.com/Tolaria.AppImage',
|
||||
},
|
||||
'windows-x86_64': {
|
||||
@@ -176,6 +176,10 @@ describe('resolveStableDownloadTargets', () => {
|
||||
name: 'Tolaria.AppImage',
|
||||
browser_download_url: 'https://example.com/Tolaria.AppImage',
|
||||
},
|
||||
{
|
||||
name: 'Tolaria.rpm',
|
||||
browser_download_url: 'https://example.com/Tolaria.rpm',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
@@ -187,6 +191,10 @@ describe('resolveStableDownloadTargets', () => {
|
||||
'linux-x86_64': {
|
||||
url: 'https://example.com/Tolaria.AppImage',
|
||||
},
|
||||
'linux-x86_64-rpm': {
|
||||
label: 'Linux RPM',
|
||||
url: 'https://example.com/Tolaria.rpm',
|
||||
},
|
||||
'windows-x86_64': {
|
||||
url: 'https://example.com/Tolaria-setup.exe',
|
||||
},
|
||||
@@ -201,9 +209,33 @@ describe('resolveStableDownloadTargets', () => {
|
||||
'linux-x86_64': {
|
||||
url: 'https://example.com/Tolaria.AppImage',
|
||||
},
|
||||
'linux-x86_64-rpm': {
|
||||
label: 'Linux RPM',
|
||||
url: 'https://example.com/Tolaria.rpm',
|
||||
},
|
||||
'windows-x86_64': {
|
||||
url: 'https://example.com/Tolaria-setup.exe',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps AppImage as the Linux auto-download while exposing RPM manually', () => {
|
||||
const html = buildStableDownloadRedirectPage({
|
||||
'linux-x86_64': {
|
||||
buttonLabel: 'Download Tolaria AppImage for Linux',
|
||||
label: 'Linux AppImage',
|
||||
url: 'https://example.com/Tolaria.AppImage',
|
||||
},
|
||||
'linux-x86_64-rpm': {
|
||||
buttonLabel: 'Download Tolaria RPM for Linux',
|
||||
label: 'Linux RPM',
|
||||
url: 'https://example.com/Tolaria.rpm',
|
||||
},
|
||||
})
|
||||
|
||||
expect(html).toContain('linux-x86_64-rpm')
|
||||
expect(html).toContain('Linux AppImage')
|
||||
expect(html).toContain('Linux RPM')
|
||||
expect(html).toContain("if (/Linux/i.test(userAgent) && !/Android/i.test(userAgent)) return 'linux-x86_64';")
|
||||
})
|
||||
})
|
||||
|
||||
@@ -5,12 +5,14 @@ type StablePlatformKey =
|
||||
| 'darwin-aarch64'
|
||||
| 'darwin-x86_64'
|
||||
| 'linux-x86_64'
|
||||
| 'linux-x86_64-rpm'
|
||||
| 'windows-x86_64'
|
||||
|
||||
type PlatformPayload = {
|
||||
dmg_url?: unknown
|
||||
download_url?: unknown
|
||||
installer_url?: unknown
|
||||
rpm_url?: unknown
|
||||
url?: unknown
|
||||
}
|
||||
|
||||
@@ -54,8 +56,12 @@ const PLATFORM_METADATA: Record<StablePlatformKey, { buttonLabel: string; label:
|
||||
label: 'macOS Intel',
|
||||
},
|
||||
'linux-x86_64': {
|
||||
buttonLabel: 'Download Tolaria for Linux',
|
||||
label: 'Linux',
|
||||
buttonLabel: 'Download Tolaria AppImage for Linux',
|
||||
label: 'Linux AppImage',
|
||||
},
|
||||
'linux-x86_64-rpm': {
|
||||
buttonLabel: 'Download Tolaria RPM for Linux',
|
||||
label: 'Linux RPM',
|
||||
},
|
||||
'windows-x86_64': {
|
||||
buttonLabel: 'Download Tolaria for Windows',
|
||||
@@ -71,6 +77,7 @@ const PLATFORM_ORDER: StablePlatformKey[] = [
|
||||
'darwin-x86_64',
|
||||
'windows-x86_64',
|
||||
'linux-x86_64',
|
||||
'linux-x86_64-rpm',
|
||||
]
|
||||
|
||||
const REDIRECT_PAGE_STYLES = `
|
||||
@@ -226,9 +233,19 @@ function extractPlatformDownloadUrl(
|
||||
)
|
||||
case 'linux-x86_64':
|
||||
return normalizeUrl(payload.download_url) ?? normalizeUrl(payload.url)
|
||||
case 'linux-x86_64-rpm':
|
||||
return normalizeUrl(payload.rpm_url)
|
||||
}
|
||||
}
|
||||
|
||||
function getPlatformPayload(
|
||||
platform: StablePlatformKey,
|
||||
platforms: NonNullable<LatestReleasePayload['platforms']>,
|
||||
): PlatformPayload | undefined {
|
||||
const payloadKey = platform === 'linux-x86_64-rpm' ? 'linux-x86_64' : platform
|
||||
return Reflect.get(platforms, payloadKey) as PlatformPayload | undefined
|
||||
}
|
||||
|
||||
export function extractStableDownloadTargets(payload: unknown): StableDownloadTargets {
|
||||
if (!payload || typeof payload !== 'object') return {}
|
||||
|
||||
@@ -237,7 +254,7 @@ export function extractStableDownloadTargets(payload: unknown): StableDownloadTa
|
||||
|
||||
const downloads: StableDownloadTargets = {}
|
||||
for (const platform of PLATFORM_ORDER) {
|
||||
const platformPayload = Reflect.get(platforms, platform) as PlatformPayload | undefined
|
||||
const platformPayload = getPlatformPayload(platform, platforms)
|
||||
const url = extractPlatformDownloadUrl(platform, platformPayload)
|
||||
if (url) Reflect.set(downloads, platform, buildStableDownloadTarget(platform, url))
|
||||
}
|
||||
@@ -282,6 +299,9 @@ function classifyReleaseAsset(name: string): {
|
||||
if (name.endsWith('.AppImage')) {
|
||||
return { platform: 'linux-x86_64', preference: 2 }
|
||||
}
|
||||
if (name.endsWith('.rpm')) {
|
||||
return { platform: 'linux-x86_64-rpm', preference: 1 }
|
||||
}
|
||||
if (name.endsWith('.deb')) {
|
||||
return { platform: 'linux-x86_64', preference: 1 }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user