跳到主要内容

打包与发布约 6 分钟

自动更新

checkUpdate 的端点约定、签名产物与命名规则,以及更新后为什么必须退出。

打包不会自动开启更新。运行中的应用会调用 @gpuix/native 上的 checkUpdate。HTTP 使用的是与 <img> 相同的 reqwest_client。不存在第二个原生插件。

托管到 GitHub Releases

先创建 release。CI 会在每个操作系统上打包、签名,并上传 bundle 及其 .sig。应用会访问 https://github.com/OWNER/REPO/releases/latest。它会被重写为 https://api.github.com/repos/OWNER/REPO/releases/latest。更新器读取 tag_name 与 assets,然后 GET 同级的 {name}.sig。

只需签名一次

cargo packager signer generate

将私钥及其密码作为仓库密钥 CARGO_PACKAGER_SIGN_PRIVATE_KEY 与 CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD 存储。把公钥放入应用。

import { checkUpdate } from '@gpuix/native'
import { render } from '@gpuix/react'
import { App } from './app'

async function maybeUpdate() {
  const update = await checkUpdate('0.1.0', {
    endpoints: ['https://github.com/OWNER/REPO/releases/latest'],
    pubkey: '<public key from signer generate>',
  })
  if (update) await update.downloadAndInstall()
}

maybeUpdate()
render(<App />)

https://github.com/OWNER/REPO 是同一个端点。

上传产物

请自行创建 GitHub release,然后再打包并上传。--clobber 会在 CI 重试时替换某个 asset。不要上传 feed JSON。

# macOS
bun build --compile app.tsx --outfile dist/app
cargo packager --release --config packager.json
gh release upload v0.1.0 \
  "bundle/My App.app.tar.gz" \
  "bundle/My App.app.tar.gz.sig" \
  --clobber

# Linux
bun build --compile app.tsx --outfile dist/app
cargo packager --release --config packager.json
gh release upload v0.1.0 \
  bundle/app_0.1.0_x86_64.AppImage \
  bundle/app_0.1.0_x86_64.AppImage.sig \
  --clobber

# Windows
bun build --compile app.tsx --outfile dist/app.exe
cargo packager --release --config packager.json
gh release upload v0.1.0 \
  bundle/app_0.1.0_x64-setup.exe \
  bundle/app_0.1.0_x64-setup.exe.sig \
  --clobber

平台支持

HTTPS 支持位于原生 crate 中。这在 Bun 与 hermes-node 上可用。它在浏览器的 wasm 构建中不存在。

仓库必须是 public 的,否则 GitHub 的 API 会返回 404。可选:在 api.github.com 前放一层 Cloudflare 缓存。用的是同一份 GitHub JSON,并非自定义 schema。

文件名约定

这些约定必须与 packager 的输出一致,否则更新器会找不到同级的 .sig:

OS 需要上传的文件
macOS My App.app.tar.gz + My App.app.tar.gz.sig
Linux app_0.1.0_x86_64.AppImage + .sig
Windows app_0.1.0_x64-setup.exe + .sig

详见打包成带图标的 App。