From e9f7bc99e9dac13ffc5721b9d0ad7014e6d3df6a Mon Sep 17 00:00:00 2001 From: Melorise <0d00@0721.hk> Date: Tue, 1 Sep 2026 22:58:01 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E8=B0=83=E6=95=B4=20Arch=20=E5=8C=85?= =?UTF-8?q?=E4=B8=BA=20deb=20=E9=87=8D=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 默认 PKGBUILD 改为复用官方 deb,并保留 PKGBUILD-from-source 源码构建入口。 AI-assisted-by: Codex AI-model: gpt-5.6-sol AI-reasoning-effort: medium Co-authored-by: Codex --- .github/workflows/release.yml | 1 + packaging/README.md | 4 +-- packaging/arch/PKGBUILD | 55 ++++++++++------------------- packaging/arch/PKGBUILD-from-source | 50 ++++++++++++++++++++++++++ packaging/arch/README.md | 22 ++++++++++-- 5 files changed, 91 insertions(+), 41 deletions(-) create mode 100644 packaging/arch/PKGBUILD-from-source diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 508c0c9..aba2ee4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -213,6 +213,7 @@ jobs: run: | cp flake.lock release/flake.lock cp packaging/arch/PKGBUILD release/PKGBUILD + cp packaging/arch/PKGBUILD-from-source release/PKGBUILD-from-source - uses: softprops/action-gh-release@v2 with: diff --git a/packaging/README.md b/packaging/README.md index a11a3a1..f9649ae 100644 --- a/packaging/README.md +++ b/packaging/README.md @@ -57,7 +57,7 @@ packaging/rpm/build-rpm.sh ## Arch/pacman -参见 [`arch/README.md`](arch/README.md)。PKGBUILD 在干净 chroot 中从源码构建 Electron 应用和 Fcitx5 addon。 +参见 [`arch/README.md`](arch/README.md)。默认 `PKGBUILD` 解包同版本官方 deb 并重打包为 pacman 包;`PKGBUILD-from-source` 保留在干净 chroot 中构建 Electron 应用和 Fcitx5 addon 的原有流程。 ## Nix flake @@ -72,6 +72,6 @@ flake 使用 nixpkgs 的 Electron,Node 依赖由 `pnpm-lock.yaml` 和固定输 - 发布前确认仓库地址和许可证元数据; - 明确项目许可证,并替换临时的 `LicenseRef-Proprietary`/Nix license; -- 生成 Arch 源码归档真实 SHA-256; +- 生成 Arch bin 版 deb 和源码版源码归档的真实 SHA-256; - 在干净的 Debian、RPM、Arch 和 Nix 构建环境逐一构建、安装、卸载; - 验证 Fcitx5 能发现 addon,桌面菜单/托盘图标、自启动开关和包升级均正常。 diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD index c010f20..f3541ce 100644 --- a/packaging/arch/PKGBUILD +++ b/packaging/arch/PKGBUILD @@ -2,49 +2,32 @@ pkgname=tama-asr pkgver=1.0.1 pkgrel=1 pkgdesc='Web-backed voice input for Fcitx5' -arch=('x86_64') +arch=('x86_64' 'aarch64') url='https://github.com/Melorise/TamaASR' license=('MPL2') depends=('fcitx5' 'gtk3' 'nss' 'libxss' 'mesa' 'alsa-lib') conflicts=('meloasr') provides=('meloasr') replaces=('meloasr') -makedepends=('nodejs' 'pnpm' 'cmake' 'gcc' 'nlohmann-json') -source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz") -sha256sums=('SKIP') - -_source_dir="TamaASR-${pkgver}" - -build() { - cd "${srcdir}/${_source_dir}" - pnpm install --frozen-lockfile - pnpm run build:linux:dir - cmake -S linux/fcitx5 -B build/fcitx5 \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr - cmake --build build/fcitx5 --parallel -} - -check() { - cd "${srcdir}/${_source_dir}" - pnpm test - ctest --test-dir build/fcitx5 --output-on-failure -} +options=('!strip') +source_x86_64=("${pkgname}-${pkgver}-x86_64.deb::${url}/releases/download/v${pkgver}/${pkgname}_${pkgver}_amd64.deb") +source_aarch64=("${pkgname}-${pkgver}-aarch64.deb::${url}/releases/download/v${pkgver}/${pkgname}_${pkgver}_arm64.deb") +sha256sums_x86_64=('SKIP') +sha256sums_aarch64=('SKIP') +noextract=("${pkgname}-${pkgver}-x86_64.deb" "${pkgname}-${pkgver}-aarch64.deb") package() { - cd "${srcdir}/${_source_dir}" + local deb_file="${srcdir}/${pkgname}-${pkgver}-${CARCH}.deb" + local deb_root="${srcdir}/deb-root" + local data_archives - install -d "${pkgdir}/opt/tama-asr" - cp -a release/linux-unpacked/. "${pkgdir}/opt/tama-asr/" - install -Dm755 packaging/assets/tama-asr-wrapper "${pkgdir}/usr/bin/tama-asr" - install -Dm644 packaging/assets/tama-asr.desktop \ - "${pkgdir}/usr/share/applications/tama-asr.desktop" - install -Dm644 packaging/assets/tama-asr-autostart.desktop \ - "${pkgdir}/etc/xdg/autostart/tama-asr.desktop" - install -Dm644 packaging/assets/tama-asr.metainfo.xml \ - "${pkgdir}/usr/share/metainfo/tama-asr.metainfo.xml" - install -Dm644 src/assets/logo.png \ - "${pkgdir}/usr/share/pixmaps/tama-asr.png" - - DESTDIR="${pkgdir}" cmake --install build/fcitx5 + rm -rf -- "${deb_root}" + mkdir -p "${deb_root}" + bsdtar -xf "${deb_file}" -C "${deb_root}" + data_archives=("${deb_root}"/data.tar.*) + if (( ${#data_archives[@]} != 1 )) || [[ ! -f "${data_archives[0]}" ]]; then + error '无法从 deb 包中找到唯一的 data.tar.* 归档' + return 1 + fi + bsdtar -xf "${data_archives[0]}" -C "${pkgdir}" } diff --git a/packaging/arch/PKGBUILD-from-source b/packaging/arch/PKGBUILD-from-source new file mode 100644 index 0000000..c010f20 --- /dev/null +++ b/packaging/arch/PKGBUILD-from-source @@ -0,0 +1,50 @@ +pkgname=tama-asr +pkgver=1.0.1 +pkgrel=1 +pkgdesc='Web-backed voice input for Fcitx5' +arch=('x86_64') +url='https://github.com/Melorise/TamaASR' +license=('MPL2') +depends=('fcitx5' 'gtk3' 'nss' 'libxss' 'mesa' 'alsa-lib') +conflicts=('meloasr') +provides=('meloasr') +replaces=('meloasr') +makedepends=('nodejs' 'pnpm' 'cmake' 'gcc' 'nlohmann-json') +source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('SKIP') + +_source_dir="TamaASR-${pkgver}" + +build() { + cd "${srcdir}/${_source_dir}" + pnpm install --frozen-lockfile + pnpm run build:linux:dir + cmake -S linux/fcitx5 -B build/fcitx5 \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build/fcitx5 --parallel +} + +check() { + cd "${srcdir}/${_source_dir}" + pnpm test + ctest --test-dir build/fcitx5 --output-on-failure +} + +package() { + cd "${srcdir}/${_source_dir}" + + install -d "${pkgdir}/opt/tama-asr" + cp -a release/linux-unpacked/. "${pkgdir}/opt/tama-asr/" + install -Dm755 packaging/assets/tama-asr-wrapper "${pkgdir}/usr/bin/tama-asr" + install -Dm644 packaging/assets/tama-asr.desktop \ + "${pkgdir}/usr/share/applications/tama-asr.desktop" + install -Dm644 packaging/assets/tama-asr-autostart.desktop \ + "${pkgdir}/etc/xdg/autostart/tama-asr.desktop" + install -Dm644 packaging/assets/tama-asr.metainfo.xml \ + "${pkgdir}/usr/share/metainfo/tama-asr.metainfo.xml" + install -Dm644 src/assets/logo.png \ + "${pkgdir}/usr/share/pixmaps/tama-asr.png" + + DESTDIR="${pkgdir}" cmake --install build/fcitx5 +} diff --git a/packaging/arch/README.md b/packaging/arch/README.md index 3340bbd..8ee7376 100644 --- a/packaging/arch/README.md +++ b/packaging/arch/README.md @@ -1,6 +1,10 @@ -# Arch Linux 构建 +# Arch Linux 打包 -远程 Release 会附带当前版本的 `PKGBUILD`。下载后直接运行: +## 默认:从官方 deb 重打包 + +远程 Release 附带的 `PKGBUILD` 是 bin 版。它根据当前 Arch 架构下载同一 Release 中的 `amd64.deb` 或 `arm64.deb`,解出已经构建好的 Electron 应用、桌面文件和 Fcitx5 addon,再交给 `makepkg` 生成 pacman 包,不会在本地重复编译源码。 + +下载后直接运行: ```bash curl --fail --location --remote-name \ @@ -8,4 +12,16 @@ curl --fail --location --remote-name \ makepkg --syncdeps --cleanbuild ``` -`PKGBUILD` 会根据 `pkgver` 直接下载 GitHub Release 标签对应的源码归档,无需手动下载、重命名或放置源码包。源码地址固定为 `https://github.com/Melorise/TamaASR/archive/refs/tags/v${pkgver}.tar.gz`,因此同一份 `PKGBUILD` 可以重复构建该版本。 +`x86_64` 使用 `tama-asr__amd64.deb`,`aarch64` 使用 `tama-asr__arm64.deb`。这两个 deb 与 Arch 包来自同一版本的官方 Release。 + +## 可选:从源码构建 + +需要完整源码构建时,使用 Release 同时附带的 `PKGBUILD-from-source`: + +```bash +curl --fail --location --remote-name \ + https://github.com/Melorise/TamaASR/releases/download/v1.0.1/PKGBUILD-from-source +makepkg --syncdeps --cleanbuild -p PKGBUILD-from-source +``` + +源码版保留原有流程:下载对应 Git 标签的源码归档,安装锁文件依赖,构建 Electron 应用和 Fcitx5 addon,运行测试后再生成 pacman 包。