diff --git a/.github/workflows/dev-daily-fixed.yml b/.github/workflows/dev-daily-fixed.yml index 9039096..9697718 100644 --- a/.github/workflows/dev-daily-fixed.yml +++ b/.github/workflows/dev-daily-fixed.yml @@ -226,3 +226,80 @@ jobs: exit 1 fi gh release upload "$FIXED_DEV_TAG" "${assets[@]}" --repo "$GITHUB_REPOSITORY" --clobber + + update-dev-release-notes: + needs: + - prepare + - dev-mac-arm64 + - dev-linux + - dev-win-x64 + - dev-win-arm64 + if: always() && needs.prepare.result == 'success' + runs-on: ubuntu-latest + steps: + - name: Update fixed dev release notes + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + FIXED_DEV_TAG: ${{ env.FIXED_DEV_TAG }} + shell: bash + run: | + set -euo pipefail + + TAG="$FIXED_DEV_TAG" + REPO="$GITHUB_REPOSITORY" + RELEASE_PAGE="https://github.com/$REPO/releases/tag/$TAG" + + if ! gh release view "$TAG" --repo "$REPO" >/dev/null 2>&1; then + echo "Release $TAG not found, skip notes update." + exit 0 + fi + + ASSETS_JSON="$(gh release view "$TAG" --repo "$REPO" --json assets)" + + pick_asset() { + local pattern="$1" + echo "$ASSETS_JSON" | jq -r --arg p "$pattern" '[.assets[].name | select(test($p))][0] // ""' + } + + WINDOWS_ASSET="$(pick_asset "dev-x64-Setup[.]exe$")" + WINDOWS_ARM64_ASSET="$(pick_asset "dev-arm64-Setup[.]exe$")" + MAC_ASSET="$(pick_asset "dev-arm64[.]dmg$")" + LINUX_TAR_ASSET="$(pick_asset "dev-linux[.]tar[.]gz$")" + LINUX_APPIMAGE_ASSET="$(pick_asset "dev-linux[.]AppImage$")" + + build_link() { + local name="$1" + if [ -n "$name" ]; then + echo "https://github.com/$REPO/releases/download/$TAG/$name" + fi + } + + WINDOWS_URL="$(build_link "$WINDOWS_ASSET")" + WINDOWS_ARM64_URL="$(build_link "$WINDOWS_ARM64_ASSET")" + MAC_URL="$(build_link "$MAC_ASSET")" + LINUX_TAR_URL="$(build_link "$LINUX_TAR_ASSET")" + LINUX_APPIMAGE_URL="$(build_link "$LINUX_APPIMAGE_ASSET")" + + cat > dev_release_notes.md </dev/null 2>&1; then + echo "Release $TAG not found (possibly all publish jobs failed), skip notes update." + exit 0 + fi + + ASSETS_JSON="$(gh release view "$TAG" --repo "$REPO" --json assets)" + + pick_asset() { + local pattern="$1" + echo "$ASSETS_JSON" | jq -r --arg p "$pattern" '[.assets[].name | select(test($p))][0] // ""' + } + + WINDOWS_ASSET="$(pick_asset "x64.*[.]exe$")" + if [ -z "$WINDOWS_ASSET" ]; then + WINDOWS_ASSET="$(echo "$ASSETS_JSON" | jq -r '[.assets[].name | select(test("[.]exe$")) | select(test("arm64") | not)][0] // ""')" + fi + WINDOWS_ARM64_ASSET="$(pick_asset "arm64.*[.]exe$")" + MAC_ASSET="$(pick_asset "[.]dmg$")" + LINUX_TAR_ASSET="$(pick_asset "[.]tar[.]gz$")" + LINUX_APPIMAGE_ASSET="$(pick_asset "[.]AppImage$")" + + build_link() { + local name="$1" + if [ -n "$name" ]; then + echo "https://github.com/$REPO/releases/download/$TAG/$name" + fi + } + + WINDOWS_URL="$(build_link "$WINDOWS_ASSET")" + WINDOWS_ARM64_URL="$(build_link "$WINDOWS_ARM64_ASSET")" + MAC_URL="$(build_link "$MAC_ASSET")" + LINUX_TAR_URL="$(build_link "$LINUX_TAR_ASSET")" + LINUX_APPIMAGE_URL="$(build_link "$LINUX_APPIMAGE_ASSET")" + + cat > preview_release_notes.md < 隐私与安全性」中允许打开。 + - 若仍被拦截,可执行: + - \`xattr -dr com.apple.quarantine "/Applications/WeFlow.app"\` + + > 如某个平台链接暂未生成,请前往发布页查看最新资源:$RELEASE_PAGE + EOF + + gh release edit "$TAG" --repo "$REPO" --notes-file preview_release_notes.md diff --git a/electron/main.ts b/electron/main.ts index 57be647..355693a 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -57,9 +57,13 @@ const normalizeUpdateTrack = (raw: unknown): 'stable' | 'preview' | 'dev' | null return null } -const applyAutoUpdateChannel = (reason: 'startup' | 'settings' = 'startup') => { +const getEffectiveUpdateTrack = (): 'stable' | 'preview' | 'dev' => { const configuredTrack = normalizeUpdateTrack(configService?.get('updateChannel')) - const track: 'stable' | 'preview' | 'dev' = configuredTrack || defaultUpdateTrack + return configuredTrack || defaultUpdateTrack +} + +const applyAutoUpdateChannel = (reason: 'startup' | 'settings' = 'startup') => { + const track = getEffectiveUpdateTrack() const baseUpdateChannel = track === 'stable' ? 'latest' : track autoUpdater.allowPrerelease = track !== 'stable' autoUpdater.allowDowngrade = isPrereleaseBuild && track === 'stable' @@ -273,6 +277,14 @@ const normalizeReleaseNotes = (rawReleaseNotes: unknown): string => { return cleaned } +const getDialogReleaseNotes = (rawReleaseNotes: unknown): string => { + const track = getEffectiveUpdateTrack() + if (track !== 'stable') { + return '修复了一些已知问题' + } + return normalizeReleaseNotes(rawReleaseNotes) +} + type AnnualReportYearsLoadStrategy = 'cache' | 'native' | 'hybrid' type AnnualReportYearsLoadPhase = 'cache' | 'native' | 'scan' | 'done' @@ -1275,7 +1287,7 @@ function registerIpcHandlers() { return { hasUpdate: true, version: latestVersion, - releaseNotes: normalizeReleaseNotes(result.updateInfo.releaseNotes), + releaseNotes: getDialogReleaseNotes(result.updateInfo.releaseNotes), minimumVersion: (result.updateInfo as any).minimumVersion } } @@ -2740,7 +2752,7 @@ function checkForUpdatesOnStartup() { // 通知渲染进程有新版本 mainWindow.webContents.send('app:updateAvailable', { version: latestVersion, - releaseNotes: normalizeReleaseNotes(result.updateInfo.releaseNotes), + releaseNotes: getDialogReleaseNotes(result.updateInfo.releaseNotes), minimumVersion: (result.updateInfo as any).minimumVersion }) }