Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/publish-github-release/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ runs:
trap 'rm -f "$NOTES_FILE"' EXIT
bash scripts/release/generate-release-notes.sh "$TAG" "$GH_REPO" docs/zh-CN/CHANGELOG.md > "$NOTES_FILE"
mapfile -t FILES < <(find "$ASSETS_DIR" -type f \( \
-name '*.exe' -o -name '*.zip' -o -name '*.dmg' -o -name '*.AppImage' -o -name '*.deb' \
-name '*.exe' -o -name '*.zip' -o -name '*.dmg' -o -name '*.AppImage' -o -name '*.AppImage.zsync' -o -name '*.deb' \
\) | sort)
if [ "${#FILES[@]}" -eq 0 ]; then
echo "No release assets found."
Expand Down
25 changes: 24 additions & 1 deletion .github/workflows/release-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,16 @@ jobs:
matrix:
include:
- arch: x86_64
appimage_arch: amd64
rust_target: x86_64-unknown-linux-gnu
runner: ubuntu-22.04
- arch: arm64
appimage_arch: aarch64
rust_target: aarch64-unknown-linux-gnu
runner: ubuntu-22.04-arm
runs-on: ${{ matrix.runner }}
env:
LDAI_UPDATE_INFORMATION: gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|CodexManager_*_${{ matrix.appimage_arch }}.AppImage.zsync

steps:
- name: Checkout
Expand All @@ -233,7 +237,7 @@ jobs:
- name: Install Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf libsoup-3.0-dev squashfs-tools zip
sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf libsoup-3.0-dev squashfs-tools zip zsync

- name: Test AppImage icon portability repair
run: bash scripts/release/tests/ensure-appimage-diricon.test.sh
Expand All @@ -254,6 +258,24 @@ jobs:
shell: bash
run: bash scripts/release/ensure-appimage-diricon.sh "${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release/bundle/appimage/"*.AppImage

# Icon/permission repairs can rewrite the image, invalidating the
# bundler's zsync checksums. Always regenerate from the final bytes.
- name: Generate final AppImage update metadata
shell: bash
env:
APPIMAGE_DIR: ${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release/bundle/appimage
run: |
set -euo pipefail
for image in "$APPIMAGE_DIR/"*.AppImage; do
# A sidecar alone cannot tell update clients where to find releases.
embedded="$("$image" --appimage-updateinformation)"
if [[ "$embedded" != "$LDAI_UPDATE_INFORMATION" ]]; then
echo "Missing or unexpected embedded update information in $image" >&2
exit 1
fi
zsyncmake -u "$(basename -- "$image")" -o "$image.zsync" "$image"
done

- name: Stage portable package
shell: bash
run: bash scripts/release/stage-linux-portable.sh "${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release" "${{ matrix.arch }}"
Expand All @@ -264,6 +286,7 @@ jobs:
name: codexmanager-linux-${{ matrix.arch }}
path: |
${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release/bundle/**/*.AppImage
${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release/bundle/**/*.AppImage.zsync
${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release/bundle/**/*.deb
${{ env.CARGO_TARGET_DIR }}/${{ matrix.rust_target }}/release/portable/*.zip
if-no-files-found: error
Expand Down
2 changes: 2 additions & 0 deletions docs/en/release/build-release-and-scripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ pwsh -NoLogo -NoProfile -File scripts/rebuild.ps1 -Bundle nsis -CleanDist -Porta

Linux packaging requires `squashfs-tools`. The release workflow pins Tauri CLI 2.11.4 and checks that each AppImage's root `.DirIcon` resolves entirely inside the bundle, repairing missing, dangling, or build-machine links. Bundle permissions are also normalized so ordinary users can traverse directories, execute launchers, and read resources. Verify the launcher as an unprivileged user; access by the build account or root is insufficient. Repacking after repairs uses runtime-compatible gzip compression and verifies a fresh extraction. Before publishing, also check the artifact's own `--appimage-extract` on its native architecture. Successful `unsquashfs` extraction or files remaining on the build machine do not prove runtime compatibility. Run the regression suite with `bash scripts/release/tests/ensure-appimage-diricon.test.sh`.

Linux releases include architecture-specific update information and matching `.AppImage.zsync` files for Gear Lever/AppImageUpdate, targeting the current repository’s latest stable release. Sidecars are regenerated after icon/permission repairs. Older AppImages without update information need a one-time manual replacement.

The interface language defaults to **Auto-detect**, following the system language in the desktop app or the browser language in Web mode. Chinese, English, Russian, and Korean are supported; other languages fall back to English. Choose Auto-detect or a fixed language in Settings or the header; the choice applies immediately and remains saved.

## GitHub Actions
Expand Down
2 changes: 2 additions & 0 deletions docs/zh-CN/release/构建发布与脚本说明.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ pwsh -NoLogo -NoProfile -File scripts/rebuild.ps1 -Bundle nsis -CleanDist -Porta

Linux 打包需要 `squashfs-tools`。发布流程固定使用 Tauri CLI 2.11.4,并检查每个 AppImage 根目录的 `.DirIcon` 是否能在包内独立解析;缺失、悬空或指向构建机的链接会被修复。包内权限也会统一规范,确保普通用户可遍历目录、执行启动器并读取资源;验证需以普通用户检查启动器,不能只依赖构建账号或 root 的访问结果。修复后重新打包使用运行时兼容的 gzip 压缩,并再次提取到独立目录验证。发布前还需在产物对应的原生架构环境中,通过产物自身的 `--appimage-extract` 验证运行时能成功解包;不能仅以 `unsquashfs` 成功或构建机上文件存在作为兼容性依据。回归测试可运行 `bash scripts/release/tests/ensure-appimage-diricon.test.sh`。

Linux 发布会嵌入按架构区分的更新地址,并上传配套 `.AppImage.zsync`,供 Gear Lever/AppImageUpdate 检查当前仓库的最新稳定版。侧车文件在图标和权限修复后重新生成。缺少更新信息的旧 AppImage 需要手动替换为新版本一次。

界面语言默认选择“自动检测”,桌面端跟随系统语言,Web 端跟随浏览器语言;支持中文、英文、俄文和韩文,其他语言回退英文。可以在设置或顶部栏选择“自动检测”或固定语言,立即生效并持久化保存。

## GitHub Actions
Expand Down
Loading