Files
刚刚andCodex a3858db878 修复下载页面的稳定版、预发布版和 Nightly 通道 (#326)
下载页面目前只有稳定版和预发布版两个通道,并将 GitHub 返回的第一个预发布版本作为普通预发布版。官方新增 Nightly 后,这会误选
`nightly`,并拼出错误的版本标签和下载地址。

此次修改为中英文下载页面补齐稳定版、预发布版、开发版(Nightly)三个通道。普通预发布版明确排除 Nightly
和草稿;下载链接按发布资产中的真实文件名和地址匹配,支持 Nightly 标签与安装包版本号不同的情况。

各通道分别处理接口失败,稳定版和预发布版保留版本回退,Nightly 无法加载或暂无资产时提供官方发布页入口。同步将预发布版回退版本更新为
`2.7.0`。

验证:

- `pnpm docs:build` 构建通过。
- `pnpm exec eslint useLatestVersion.ts releaseUtils.ts metadata.data.ts
tests/releaseUtils.test.ts` 检查通过。
- `node --experimental-strip-types --test tests/releaseUtils.test.ts`:6
项回归测试通过,覆盖通道区分、Nightly 下载地址、GUI 资产版本差异、Android 安装包、缺失资产和接口失败回退。
- 浏览器验证中英文通道切换、操作系统和架构筛选、GitHub 加速前缀及构建后的页面预览。

Co-authored-by: Codex <codex@local>
2026-10-17 12:21:24 +08:00

10 KiB
Raw Permalink Blame History

home
home
hello
<script setup lang="ts"> import { computed, ref } from 'vue' import { data } from '../metadata.data.js' import { resolveDownloadUrl } from '../releaseUtils.ts' import { useLatestVersion } from '../useLatestVersion.ts' const { latestVersion, prereleaseVersion, latestRelease, prereleaseRelease, nightlyRelease, loading } = useLatestVersion() interface Package { os: string arch: string gui_pkg_tmpl: Record cli_pkg_tmpl: Record // key: format, value: url comment?: string } function gen_pkg_without_gui(os: string, archs: string[]): Package[] { return archs.map(arch => { return { os, arch, gui_pkg_tmpl: {}, cli_pkg_tmpl: { "zip": `https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-${arch}-v{}.zip`, }, } }) } const packages = ref([ { os: 'Windows', arch: 'x86_64', gui_pkg_tmpl: { "exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64-setup.exe' }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-x86_64-v{}.zip' }, comment: "Windows 7 需要是 SP1 及以上, 并且需要安装 KB3063858、KB4474419 这两个补丁,并关闭 QUIC 输入。" }, { os: "Windows", arch: "arm64", gui_pkg_tmpl: { "exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64-setup.exe' }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-arm64-v{}.zip' }, }, { os: "Linux", arch: "x86_64", gui_pkg_tmpl: { "deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.deb', "AppImage": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.AppImage', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-x86_64-v{}.zip', }, }, { os: "Linux", arch: "aarch64", gui_pkg_tmpl: { "deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64.deb', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-aarch64-v{}.zip', }, }, ...gen_pkg_without_gui("Linux", ["arm", "armhf", "armv7", "armv7hf", "mips", "mipsel"]), { os: "MacOS", arch: "x86_64", gui_pkg_tmpl: { "dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64.dmg', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-x86_64-v{}.zip', }, comment: "安装 GUI 后需要手动执行 xattr -c /Applications/easytier-gui.app, 否则会提示文件损坏" }, { os: "MacOS", arch: "aarch64", gui_pkg_tmpl: { "dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_aarch64.dmg', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-aarch64-v{}.zip', }, comment: "安装 GUI 后需要手动执行 xattr -c /Applications/easytier-gui.app, 否则会提示文件损坏" }, { os: "Android", arch: "arm64", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-arm64-release.apk', }, cli_pkg_tmpl: {}, comment: "近十年内的安卓移动设备都可以选择此版本。遇到显示界面显示异常,请尝试升级 WebView" }, { os: "Android", arch: "arm", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-arm-release.apk', }, cli_pkg_tmpl: {}, comment: "较旧的安卓设备可以选择此版本。遇到显示界面显示异常,请尝试升级 WebView" }, { os: "Android", arch: "x86_64", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-x86_64-release.apk', }, cli_pkg_tmpl: {}, comment: "遇到显示界面显示异常,请尝试升级 WebView" }, { os: "Android", arch: "x86", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-x86-release.apk', }, cli_pkg_tmpl: {}, comment: "遇到显示界面显示异常,请尝试升级 WebView" }, { os: "Android Magisk 面具模块", arch: "aarch64", gui_pkg_tmpl: {}, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/Easytier-Magisk-v{}.zip' }, comment: "支持 Magisk/KernelSU/Apatch。会在开机后启动一个 easytier-core 实例,配置位于 /data/adb/modules/easytier_magisk/config/ 目录下" }, { os: "FreeBSD 13.2", arch: "x86_64", gui_pkg_tmpl: {}, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-freebsd-13.2-x86_64-v{}.zip', }, } ]) const all_archs = new Set(packages.value.map(pkg => pkg.arch)) const all_os = new Set(packages.value.map(pkg => pkg.os)) const all_proxy = new Set(data.github_accels) const channel = ref('easytier_latest_version') const url = 'https://github.com/EasyTier/EasyTier/releases/tag/' const filter_os = ref('') const filter_arch = ref('') const accel_proxy = ref('') const vers = computed(() => ({ easytier_latest_version: latestVersion.value ?? data.easytier_latest_version, easytier_pre_release_version: prereleaseVersion.value ?? data.easytier_pre_release_version, })) const currentVersion = computed(() => vers.value[channel.value as keyof typeof vers.value]) const currentRelease = computed(() => { if (channel.value === 'nightly') return nightlyRelease.value return channel.value === 'easytier_latest_version' ? latestRelease.value : prereleaseRelease.value }) const currentTag = computed(() => channel.value === 'nightly' ? 'nightly' : currentRelease.value?.tag_name ?? `v${currentVersion.value}`) const currentTitle = computed(() => channel.value === 'nightly' ? 'Nightly' : currentTag.value) function renderLinks(templates: Record) { return Object.entries(templates).flatMap(([format, template]) => { const downloadUrl = resolveDownloadUrl(template, currentRelease.value, channel.value === 'nightly' ? undefined : currentVersion.value) return downloadUrl ? [{ format, url: accel_proxy.value + downloadUrl }] : [] }) } </script>

下载

您可以直接前往 GitHub Release 页面 查看所有版本的下载链接,或者使用下面的表格查找适合您的版本。

命令行程序的压缩包中包含四个可执行程序:

  • easytier-core:EasyTier 的核心程序
  • easytier-cli:EasyTier 管理程序,启动 easytier-core 后,可以使用 easytier-cli 查看虚拟网信息
  • easytier-web: 用于自建 EasyTier 的 Web 控制台后端,一般情况下无需自建,使用官方提供的 Web 控制台即可
  • easytier-web-embed: 与 easytier-web 功能相同,但内置了 Web 前端。

切换下载通道

稳定版(v{{ vers.easytier_latest_version }}) 预发布版(v{{ vers.easytier_pre_release_version }}) 开发版(Nightly)

Nightly 跟随 main 分支更新,适合测试最新功能,可能不稳定。

EasyTier {{ currentTitle }}

正在加载 Nightly 下载文件… 暂时无法获取 Nightly 下载文件,请前往 Nightly 发布页。

  • Github 加速

    直连 {{ p }}
  • 根据操作系统筛选

    全部 {{ os }}
  • 根据硬件架构筛选

    全部 {{ arch }}
操作系统 硬件架构 图形界面程序 GUI 命令行程序 CLI 注意事项
{{ pkg.os }} {{ pkg.arch }} {{link.format}} {{link.format}} {{ pkg.comment }}