feat(desktop): enable Linux AppImage updates

This commit is contained in:
tianma-if committed 2026-09-09 13:32:10 +08:00
1 parent ac7f953c94
commit 930d2d7e36
20 files changed
+373 -42

No files matched your search

+57 -8
View File
@@ -132,9 +132,10 @@ jobs:
--pattern 'latest-windows.json.sig' \
--pattern 'SHA256SUMS-windows.txt' \
--pattern 'EdgeEver-*-linux-x64.AppImage' \
--pattern 'latest-linux.yml' \
--pattern 'SHA256SUMS-linux.txt' \
--dir "$RUNNER_TEMP/native-assets"
test "$(find "$RUNNER_TEMP/native-assets" -type f | wc -l | tr -d ' ')" = "16"
test "$(find "$RUNNER_TEMP/native-assets" -type f | wc -l | tr -d ' ')" = "17"
gh release upload "$CURRENT_TAG" "$RUNNER_TEMP/native-assets/"* \
--repo "$GITHUB_REPOSITORY" \
--clobber
@@ -618,6 +619,43 @@ jobs:
- name: Build x64 Rust sidecar
run: cargo build --manifest-path crates/desktop-sidecar/Cargo.toml --release
- name: Build Linux automatic update predecessor
env:
GH_TOKEN: ${{ github.token }}
PREVIOUS_TAG: ${{ needs.release-plan.outputs.previous_tag }}
run: |
if [[ -n "$PREVIOUS_TAG" ]]; then
git fetch --depth=1 origin "refs/tags/${PREVIOUS_TAG}:refs/tags/${PREVIOUS_TAG}"
if git show "${PREVIOUS_TAG}:apps/desktop/src/main/index.mjs" | grep -q 'linuxUpdateTestMode'; then
previous_directory="$RUNNER_TEMP/edgeever-previous-linux-x64"
mkdir -p "$previous_directory"
gh release download "$PREVIOUS_TAG" \
--repo "$GITHUB_REPOSITORY" \
--pattern 'EdgeEver-*-linux-x64.AppImage' \
--dir "$previous_directory"
previous_app_image="$(find "$previous_directory" -maxdepth 1 -name 'EdgeEver-*-linux-x64.AppImage' -type f -print -quit)"
test -n "$previous_app_image"
test "$(find "$previous_directory" -maxdepth 1 -name 'EdgeEver-*-linux-x64.AppImage' -type f | wc -l | tr -d ' ')" = "1"
mv "$previous_app_image" "$RUNNER_TEMP/EdgeEver-linux-update-source.AppImage"
chmod +x "$RUNNER_TEMP/EdgeEver-linux-update-source.AppImage"
exit 0
fi
fi
# The first release that enables Linux updates has no update-capable
# predecessor in the wild. Build the same packaged updater at an older
# version so the bootstrap release still exercises a real replacement.
package_backup="$RUNNER_TEMP/edgeever-desktop-package.json"
cp apps/desktop/package.json "$package_backup"
trap 'cp "$package_backup" apps/desktop/package.json' EXIT
node -e "const fs=require('fs');const path='apps/desktop/package.json';const value=JSON.parse(fs.readFileSync(path,'utf8'));value.version='0.0.1';fs.writeFileSync(path, JSON.stringify(value, null, 2)+'\n')"
EDGE_EVER_DESKTOP_ARCH=x64 EDGE_EVER_DESKTOP_TARGET=linux \
bun scripts/run-desktop-builder.mjs --publish never
mv release/desktop/EdgeEver-0.0.1-linux-x64.AppImage \
"$RUNNER_TEMP/EdgeEver-linux-update-source.AppImage"
cp "$package_backup" apps/desktop/package.json
trap - EXIT
- name: Package Linux AppImage
env:
EDGE_EVER_DESKTOP_ARCH: x64
@@ -667,12 +705,26 @@ jobs:
sha256sum "EdgeEver-${version}-linux-x64.AppImage" > SHA256SUMS-linux.txt
sha256sum --check SHA256SUMS-linux.txt
- name: Verify Linux automatic update metadata
run: |
version="$(node -p "JSON.parse(require('fs').readFileSync('apps/desktop/package.json', 'utf8')).version")"
node scripts/verify-linux-update-release.mjs release/desktop "$version"
- name: Verify real Linux AppImage automatic update
run: |
version="$(node -p "JSON.parse(require('fs').readFileSync('apps/desktop/package.json', 'utf8')).version")"
xvfb-run -a bun scripts/verify-linux-appimage-update.mjs \
"$RUNNER_TEMP/EdgeEver-linux-update-source.AppImage" \
"release/desktop/EdgeEver-${version}-linux-x64.AppImage" \
"$version"
- name: Stage Linux Preview assets
uses: actions/upload-artifact@v6
with:
name: edgeever-desktop-Linux-x64-staging
path: |
release/desktop/EdgeEver-*-linux-x64.AppImage
release/desktop/latest-linux.yml
release/desktop/SHA256SUMS-linux.txt
if-no-files-found: error
retention-days: 14
@@ -750,7 +802,7 @@ jobs:
run: |
version="$(node -p "JSON.parse(require('fs').readFileSync('apps/desktop/package.json', 'utf8')).version")"
node scripts/create-mac-update-metadata.mjs release/desktop "$version"
(cd release/desktop && sha256sum --check SHA256SUMS-linux.txt)
node scripts/verify-linux-update-release.mjs release/desktop "$version"
asset_ready="$(
find release/desktop -maxdepth 1 -type f -exec basename {} \; |
node scripts/check-native-release-assets.mjs desktop true "v${version}" "$version" allow-missing-windows-signature
@@ -837,12 +889,9 @@ jobs:
gh release download "$RELEASE_TAG" \
--repo "$GITHUB_REPOSITORY" \
--pattern 'EdgeEver-*-linux-x64.AppImage' \
--pattern 'latest-linux.yml' \
--pattern 'SHA256SUMS-linux.txt' \
--dir release/desktop
- name: Verify Linux checksum
run: |
app_image="$(find release/desktop -maxdepth 1 -name 'EdgeEver-*-linux-x64.AppImage' -type f -print -quit)"
test -n "$app_image"
test "$(find release/desktop -maxdepth 1 -name 'EdgeEver-*-linux-x64.AppImage' -type f | wc -l | tr -d ' ')" = "1"
(cd release/desktop && sha256sum --check SHA256SUMS-linux.txt)
- name: Verify Linux automatic update release
run: node scripts/verify-linux-update-release.mjs release/desktop