From bc9f4ddeee1a590115c335bfde54d9ca93398841 Mon Sep 17 00:00:00 2001 From: reonokiy <65524316+reonokiy@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:48:48 +0800 Subject: [PATCH] docs: add docs for release versions (#669) --- .../components/ReleaseDownloads.vue | 147 +++++++++++++++ docs/.vitepress/components/ReleasesList.vue | 177 ++++++++++++++++++ docs/.vitepress/data/releases.data.ts | 148 +++++++++++++++ docs/content/en/docs/manual/versions/index.md | 60 ++++++ .../zh-Hans/docs/manual/versions/index.md | 60 ++++++ packages/i18n/src/locales/en/docs/index.ts | 2 + .../i18n/src/locales/en/docs/versions.yaml | 22 +++ .../i18n/src/locales/zh-Hans/docs/index.ts | 2 + .../src/locales/zh-Hans/docs/versions.yaml | 22 +++ 9 files changed, 640 insertions(+) create mode 100644 docs/.vitepress/components/ReleaseDownloads.vue create mode 100644 docs/.vitepress/components/ReleasesList.vue create mode 100644 docs/.vitepress/data/releases.data.ts create mode 100644 packages/i18n/src/locales/en/docs/versions.yaml create mode 100644 packages/i18n/src/locales/zh-Hans/docs/versions.yaml diff --git a/docs/.vitepress/components/ReleaseDownloads.vue b/docs/.vitepress/components/ReleaseDownloads.vue new file mode 100644 index 000000000..3f576418c --- /dev/null +++ b/docs/.vitepress/components/ReleaseDownloads.vue @@ -0,0 +1,147 @@ + + + + + + + + + + {{ t(stableConfig.titleKey) }} + + {{ latestStable.tag_name }} + + + + + + + {{ t(useCase) }} + + + + + + {{ t('docs.versions.download-buttons.download') }} + + + + + + + + + {{ t(prereleaseConfig.titleKey) }} + + {{ latestPrerelease.tag_name }} + + + + + + + {{ t(useCase) }} + + + + + + {{ t('docs.versions.download-buttons.download') }} + + + + + + diff --git a/docs/.vitepress/components/ReleasesList.vue b/docs/.vitepress/components/ReleasesList.vue new file mode 100644 index 000000000..0dace2ccb --- /dev/null +++ b/docs/.vitepress/components/ReleasesList.vue @@ -0,0 +1,177 @@ + + + + + + + + {{ item.title }} + + + {{ getVersionLabel(item) }} + + + + {{ t(item.dateLabel) }} {{ formatDate(item.date) }} + + + + + + + + + {{ t(emptyStateConfig.linkTextKey) }} + + + + + + + diff --git a/docs/.vitepress/data/releases.data.ts b/docs/.vitepress/data/releases.data.ts new file mode 100644 index 000000000..f32dd792a --- /dev/null +++ b/docs/.vitepress/data/releases.data.ts @@ -0,0 +1,148 @@ +import { defineLoader } from 'vitepress' + +export interface Release { + name: string + tag_name: string + html_url: string + published_at: string + prerelease: boolean + draft: boolean + body: string +} + +export interface NightlyBuild { + id: number + name: string + html_url: string + created_at: string + updated_at: string + status: string + conclusion: string + workflow_name: string + head_sha: string + head_commit_message: string +} + +export interface ReleasesData { + stable: Release[] + prerelease: Release[] + nightly: NightlyBuild[] + nightlyUrl: string +} + +declare const data: ReleasesData +export { data } + +export default defineLoader({ + async load(): Promise { + const nightlyUrl = 'https://github.com/moeru-ai/airi/actions/workflows/release-tamagotchi.yml' + + try { + // Fetch releases from GitHub API + const releasesResponse = await fetch('https://api.github.com/repos/moeru-ai/airi/releases', { + headers: { + 'Accept': 'application/vnd.github.v3+json', + 'User-Agent': 'VitePress', + }, + }) + + if (!releasesResponse.ok) { + throw new Error(`GitHub API request failed: ${releasesResponse.statusText}`) + } + + const releases: Release[] = await releasesResponse.json() + + // Filter out drafts and mark beta/alpha as prereleases + const publishedReleases = releases.filter(r => !r.draft).map((r) => { + // Mark releases with beta or alpha in tag_name as prereleases + const isPrerelease = r.prerelease + || r.tag_name.includes('-beta') + || r.tag_name.includes('-alpha') + + return { + ...r, + prerelease: isPrerelease, + } + }) + + // Separate stable and prerelease + const stable = publishedReleases + .filter(r => !r.prerelease) + .slice(0, 10) // Get latest 10 stable releases + + const prerelease = publishedReleases + .filter(r => r.prerelease) + .slice(0, 10) // Get latest 10 prereleases + + // Fetch nightly builds from GitHub Actions + let nightlyBuilds: NightlyBuild[] = [] + try { + // https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-repository + const actionsResponse = await fetch( + 'https://api.github.com/repos/moeru-ai/airi/actions/workflows/release-tamagotchi.yml/runs?status=success&per_page=10', + { + headers: { + 'Accept': 'application/vnd.github.v3+json', + 'User-Agent': 'VitePress', + }, + }, + ) + + if (actionsResponse.ok) { + const actionsData = await actionsResponse.json() + nightlyBuilds = actionsData.workflow_runs?.map((run: { + id: number + name: string + head_sha: string + html_url: string + created_at: string + updated_at: string + status: string + conclusion: string + head_commit?: { + message: string + } + }) => { + const shortSha = run.head_sha.substring(0, 7) + // Get first line of commit message + const commitMessage = run.head_commit?.message || 'Nightly Build' + const firstLine = commitMessage.split('\n')[0] + + return { + id: run.id, + name: firstLine, + html_url: run.html_url, + created_at: run.created_at, + updated_at: run.updated_at, + status: run.status, + conclusion: run.conclusion, + workflow_name: run.name, + head_sha: shortSha, + head_commit_message: commitMessage, + } + }) || [] + } + } + catch (nightlyError) { + console.warn('Failed to fetch nightly builds:', nightlyError) + } + + return { + stable, + prerelease, + nightly: nightlyBuilds, + nightlyUrl, + } + } + catch (error) { + console.error('Failed to fetch releases:', error) + // Return empty data if fetch fails + return { + stable: [], + prerelease: [], + nightly: [], + nightlyUrl, + } + } + }, +}) diff --git a/docs/content/en/docs/manual/versions/index.md b/docs/content/en/docs/manual/versions/index.md index e69de29bb..0582b11a7 100644 --- a/docs/content/en/docs/manual/versions/index.md +++ b/docs/content/en/docs/manual/versions/index.md @@ -0,0 +1,60 @@ +--- +title: Versions +description: Different versions of AIRI and how to get them +--- + + + +AIRI offers multiple release channels to suit different needs. Whether you want the most stable experience or the latest features, we've got you covered. + +## Stable Releases & Pre-releases + +Official releases include both **stable** versions (thoroughly tested and recommended for most users) and **pre-releases** (beta and alpha versions with new features ready for testing). + +Pre-releases are tagged with `-beta.X` or `-alpha.X` suffixes (e.g., `v0.7.2-beta.3`). + + + +### Recent Stable & Pre-release Versions + + + +[View all releases on GitHub →](https://github.com/moeru-ai/airi/releases) + +## Nightly Builds + +::: warning EXPERIMENTAL +Nightly builds are **experimental** and may contain bugs or unstable features. Use them at your own risk and always keep a stable version as backup. +::: + +Nightly builds are automatically generated every day from the latest `main` branch code. They contain the absolute newest features and bug fixes. + +**Best for:** +- Developers and contributors +- Testing the latest bug fixes +- Users who need a specific fix that hasn't been released yet + +### How to Get Nightly Builds + +1. Visit the [Nightly Build Workflow](https://github.com/moeru-ai/airi/actions/workflows/release-tamagotchi.yml) page +2. Click on the most recent successful run (indicated by a green checkmark ✓) +3. Scroll down to the **Artifacts** section +4. Download the build for your platform: + - **Windows**: `AIRI_*_x64_en-US.exe` + - **macOS (Intel)**: `AIRI_*_x64.dmg` + - **macOS (Apple Silicon)**: `AIRI_*_arm64.dmg` + - **Linux (x64)**: `airi_*_amd64.deb` or `airi-*.x86_64.rpm` + - **Linux (ARM64)**: `airi_*_arm64.deb` or `airi-*.aarch64.rpm` + +::: tip +Nightly builds run automatically at **00:00 UTC** every day. If you encounter an issue with the latest stable release, try the latest nightly build to see if it has been fixed. +::: + +### Recent Nightly Builds + + + +[View all nightly builds →](https://github.com/moeru-ai/airi/actions/workflows/release-tamagotchi.yml) diff --git a/docs/content/zh-Hans/docs/manual/versions/index.md b/docs/content/zh-Hans/docs/manual/versions/index.md index e69de29bb..9a16a4bdf 100644 --- a/docs/content/zh-Hans/docs/manual/versions/index.md +++ b/docs/content/zh-Hans/docs/manual/versions/index.md @@ -0,0 +1,60 @@ +--- +title: 不同的版本 +description: AIRI 的不同版本以及如何获取它们 +--- + + + +AIRI 提供多个发布渠道以满足不同需求。无论你想要最稳定的体验还是最新的功能,我们都能满足你的需求。 + +## 稳定版本 & 预发布版本 + +正式发布版本包括**稳定版本**(经过充分测试,推荐大多数用户使用)和**预发布版本**(包含已准备好测试的新功能的 beta 和 alpha 版本)。 + +预发布版本会带有 `-beta.X` 或 `-alpha.X` 后缀标识(例如 `v0.7.2-beta.3`)。 + + + +### 最近的稳定版本和预发布版本 + + + +[在 GitHub 上查看所有版本 →](https://github.com/moeru-ai/airi/releases) + +## 每夜构建版本 (Nightly Builds) + +每夜构建版本每天自动从最新的 \`main\` 分支代码生成。它们包含最新的功能和错误修复。 + +::: warning 实验性功能 +每夜构建版本是**实验性的**,可能包含错误或不稳定的功能。使用时请自行承担风险,并始终保留一个稳定版本作为备份。 +::: + +**适合以下用户:** +- 开发者和贡献者 +- 测试最新的错误修复 +- 需要特定修复但尚未发布的用户 + +### 如何获取每夜构建版本 + +1. 访问 [每夜构建工作流](https://github.com/moeru-ai/airi/actions/workflows/release-tamagotchi.yml) 页面 +2. 点击最近一次成功的运行(以绿色对勾 ✓ 标识) +3. 向下滚动到 **Artifacts** (构建产物) 部分 +4. 下载适合你平台的构建版本: + - **Windows**: \`AIRI_*_x64_en-US.exe\` + - **macOS (Intel)**: \`AIRI_*_x64.dmg\` + - **macOS (Apple Silicon)**: \`AIRI_*_arm64.dmg\` + - **Linux (x64)**: \`airi_*_amd64.deb\` 或 \`airi-*.x86_64.rpm\` + - **Linux (ARM64)**: \`airi_*_arm64.deb\` 或 \`airi-*.aarch64.rpm\` + +::: tip 提示 +每夜构建版本在每天 **UTC 时间 00:00** 自动运行。如果你在最新稳定版本中遇到问题,可以尝试最新的每夜构建版本,看看问题是否已经被修复。 +::: + +### 最近的每夜构建版本 + + + +[查看所有每夜构建版本 →](https://github.com/moeru-ai/airi/actions/workflows/release-tamagotchi.yml) diff --git a/packages/i18n/src/locales/en/docs/index.ts b/packages/i18n/src/locales/en/docs/index.ts index d00f39316..73db92d8e 100644 --- a/packages/i18n/src/locales/en/docs/index.ts +++ b/packages/i18n/src/locales/en/docs/index.ts @@ -1,5 +1,7 @@ import theme from './theme.yaml' +import versions from './versions.yaml' export default { theme, + versions, } diff --git a/packages/i18n/src/locales/en/docs/versions.yaml b/packages/i18n/src/locales/en/docs/versions.yaml new file mode 100644 index 000000000..55aba06cc --- /dev/null +++ b/packages/i18n/src/locales/en/docs/versions.yaml @@ -0,0 +1,22 @@ +download-buttons: + latest-stable: Latest Stable Release + latest-prerelease: Latest Pre-release + latest-nightly: Latest Nightly Build + download: Download + view-release: View Release + stable-use-case-1: Production use + stable-use-case-2: Users who want a stable experience + stable-use-case-3: Live streaming and content creationr + prerelease-use-case-1: Early adopters who want to try new features + prerelease-use-case-2: Testing and providing feedback to developers + prerelease-use-case-3: Users comfortable with occasional bugs +releases-list: + stable: Stable + prerelease: Pre-release + nightly: Nightly + released-on: Released on + built-on: Built on + no-releases: 'No releases available at the moment. Check the {link} directly.' + no-nightly: 'No nightly builds available at the moment. Check the {link} directly.' + releases-page: releases page + workflow-page: workflow page diff --git a/packages/i18n/src/locales/zh-Hans/docs/index.ts b/packages/i18n/src/locales/zh-Hans/docs/index.ts index d00f39316..73db92d8e 100644 --- a/packages/i18n/src/locales/zh-Hans/docs/index.ts +++ b/packages/i18n/src/locales/zh-Hans/docs/index.ts @@ -1,5 +1,7 @@ import theme from './theme.yaml' +import versions from './versions.yaml' export default { theme, + versions, } diff --git a/packages/i18n/src/locales/zh-Hans/docs/versions.yaml b/packages/i18n/src/locales/zh-Hans/docs/versions.yaml new file mode 100644 index 000000000..f53fee086 --- /dev/null +++ b/packages/i18n/src/locales/zh-Hans/docs/versions.yaml @@ -0,0 +1,22 @@ +download-buttons: + latest-stable: 最新稳定版本 + latest-prerelease: 最新预发布版本 + latest-nightly: 最新每夜构建 + download: 下载 + view-release: 查看发布 + stable-use-case-1: 生产环境使用 + stable-use-case-2: 需要稳定体验的用户 + stable-use-case-3: 直播和内容创作 + prerelease-use-case-1: 想要尝试新功能的早期采用者 + prerelease-use-case-2: 测试并向开发者提供反馈 + prerelease-use-case-3: 能够接受偶尔出现问题的用户 +releases-list: + stable: 稳定版 + prerelease: 预发布版 + nightly: 每夜构建 + released-on: 发布于 + built-on: 构建于 + no-releases: 暂无可用版本。请直接查看{link}。 + no-nightly: 暂无可用的每夜构建版本。请直接查看{link}。 + releases-page: 发布页面 + workflow-page: 工作流页面
+ + + {{ t(emptyStateConfig.linkTextKey) }} + + +