From f203566b8136853c0239a6d8f7c6f6c8691f9e78 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Fri, 15 Aug 2025 19:35:16 +0800 Subject: [PATCH] [feat] use dynamic version number --- .github/workflows/build.yaml | 67 ++++++++++++++++++++++++--------- scripts/linux/pkg_x86_64.sh | 5 ++- scripts/macosx/pkg_arm64.sh | 6 +-- scripts/macosx/pkg_x86_64.sh | 6 +-- scripts/windows/nsis_script.nsi | 4 +- 5 files changed, 62 insertions(+), 26 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7876fde..c4dfe95 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -23,6 +23,24 @@ jobs: image: crossdesk/ubuntu22.04:latest options: --user root steps: + - name: Extract version number + id: version + run: | + VERSION="${GITHUB_REF##*/}" + VERSION_NUM="${VERSION#v}" + echo "VERSION_NUM=${VERSION_NUM}" >> $GITHUB_ENV + + - name: Set legal Debian version + shell: bash + id: set_deb_version + run: | + if [[ ! "${VERSION_NUM}" =~ ^[0-9] ]]; then + LEGAL_VERSION="0.0.0-${VERSION_NUM}" + else + LEGAL_VERSION="${VERSION_NUM}" + fi + echo "LEGAL_VERSION=${LEGAL_VERSION}" >> $GITHUB_ENV + - name: Checkout code uses: actions/checkout@v4 with: @@ -45,13 +63,13 @@ jobs: - name: Package run: | chmod +x ./scripts/linux/pkg_x86_64.sh - ./scripts/linux/pkg_x86_64.sh + ./scripts/linux/pkg_x86_64.sh ${LEGAL_VERSION} - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: crossdesk-linux-x86_64 - path: ${{ github.workspace }}/CrossDesk-0.0.1.deb + name: crossdesk-linux-x86_64-${{ env.LEGAL_VERSION }} + path: ${{ github.workspace }}/crossdesk-linux-x86_64-${{ env.LEGAL_VERSION }}.deb # macOS build-macos: @@ -64,16 +82,22 @@ jobs: runner: macos-13 cache-key: intel out-dir: ./build/macosx/x86_64/release/crossdesk - artifact-name: crossdesk-macos-x86_64 package_script: ./scripts/macosx/pkg_x86_64.sh - arch: arm64 runner: macos-14 cache-key: arm out-dir: ./build/macosx/arm64/release/crossdesk - artifact-name: crossdesk-macos-arm64 package_script: ./scripts/macosx/pkg_arm64.sh steps: + - name: Extract version number + id: version + run: | + VERSION="${GITHUB_REF##*/}" + VERSION_NUM="${VERSION#v}" + echo "VERSION_NUM=${VERSION_NUM}" >> $GITHUB_ENV + echo "VERSION_NUM=${VERSION_NUM}" + - name: Cache xmake dependencies uses: actions/cache@v4 with: @@ -103,18 +127,18 @@ jobs: - name: Package CrossDesk app run: | chmod +x ${{ matrix.package_script }} - ${{ matrix.package_script }} + ${{ matrix.package_script }} ${VERSION_NUM} - name: Upload build artifacts uses: actions/upload-artifact@v4 with: - name: ${{ matrix.artifact-name }} - path: crossdesk-macos-${{ matrix.arch }}-v0.0.1.pkg + name: crossdesk-macos-${{ matrix.arch }}-${{ env.VERSION_NUM }} + path: crossdesk-macos-${{ matrix.arch }}-${{ env.VERSION_NUM }}.pkg - name: Move files to release dir run: | mkdir -p release - cp crossdesk-macos-${{ matrix.arch }}-v0.0.1.pkg release/ + cp crossdesk-macos-${{ matrix.arch }}-${{ env.VERSION_NUM }}.pkg release/ # Windows build-windows: @@ -123,6 +147,14 @@ jobs: env: XMAKE_GLOBALDIR: D:\xmake_global steps: + - name: Extract version number + shell: pwsh + run: | + $ref = $env:GITHUB_REF + $version = $ref -replace '^refs/(tags|heads)/', '' + $version = $version -replace '/', '-' + echo "VERSION_NUM=$version" >> $env:GITHUB_ENV + - name: Cache xmake dependencies uses: actions/cache@v4 with: @@ -177,15 +209,16 @@ jobs: [System.IO.File]::WriteAllBytes('certs\crossdesk.cn_root.crt', [Convert]::FromBase64String('${{ secrets.CROSSDESK_CERT_BASE64 }}')) - name: Package + shell: pwsh run: | - cd ${{ github.workspace }}/scripts/windows - makensis nsis_script.nsi + cd "${{ github.workspace }}\scripts\windows" + makensis /DVERSION=$env:VERSION_NUM nsis_script.nsi - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: crossdesk-win-x86_64 - path: ${{ github.workspace }}/scripts/windows/CrossDesk-0.0.1.exe + name: crossdesk-win-x86_64-${{ env.VERSION_NUM }} + path: ${{ github.workspace }}/scripts/windows/crossdesk-win-x86_64-${{ env.VERSION_NUM }}.exe release: name: Publish Release @@ -212,10 +245,10 @@ jobs: - name: Rename artifacts run: | mkdir -p release - cp artifacts/crossdesk-macos-x86_64/* release/crossdesk-macos-x86_64-v${{ steps.version.outputs.VERSION_NUM }}.pkg - cp artifacts/crossdesk-macos-arm64/* release/crossdesk-macos-aarch64-v${{ steps.version.outputs.VERSION_NUM }}.pkg - cp artifacts/crossdesk-linux-x86_64/* release/crossdesk-linux-x86_64-v${{ steps.version.outputs.VERSION_NUM }}.deb - cp artifacts/crossdesk-win-x86_64/* release/crossdesk-win-x86_64-v${{ steps.version.outputs.VERSION_NUM }}.exe + cp artifacts/crossdesk-macos-x86_64/* release/crossdesk-macos-x86_64-${{ steps.version.outputs.VERSION_NUM }}.pkg + cp artifacts/crossdesk-macos-arm64/* release/crossdesk-macos-arm64-${{ steps.version.outputs.VERSION_NUM }}.pkg + cp artifacts/crossdesk-linux-x86_64/* release/crossdesk-linux-x86_64-${{ steps.version.outputs.VERSION_NUM }}.deb + cp artifacts/crossdesk-win-x86_64/* release/crossdesk-win-x86_64-${{ steps.version.outputs.VERSION_NUM }}.exe - name: Upload to Versioned GitHub Release uses: softprops/action-gh-release@v2 diff --git a/scripts/linux/pkg_x86_64.sh b/scripts/linux/pkg_x86_64.sh index b71b424..17130a0 100644 --- a/scripts/linux/pkg_x86_64.sh +++ b/scripts/linux/pkg_x86_64.sh @@ -3,7 +3,7 @@ set -e # 配置变量 APP_NAME="CrossDesk" -APP_VERSION="0.0.1" +APP_VERSION="$1" ARCHITECTURE="amd64" MAINTAINER="Junkun Di " DESCRIPTION="A simple cross-platform remote desktop client." @@ -120,6 +120,9 @@ chmod +x "$DEBIAN_DIR/postinst" # 构建 .deb 包 dpkg-deb --build "$DEB_DIR" +OUTPUT_FILE="crossdesk-linux-x86_64-$APP_VERSION.deb" +mv "$DEB_DIR.deb" "$OUTPUT_FILE" + # 清理构建目录 rm -rf "$DEB_DIR" diff --git a/scripts/macosx/pkg_arm64.sh b/scripts/macosx/pkg_arm64.sh index 0f27cf0..6d2665b 100644 --- a/scripts/macosx/pkg_arm64.sh +++ b/scripts/macosx/pkg_arm64.sh @@ -5,7 +5,7 @@ set -e # 遇错退出 APP_NAME="crossdesk" APP_NAME_UPPER="CrossDesk" # 这个变量用来指定大写的应用名 EXECUTABLE_PATH="./build/macosx/arm64/release/crossdesk" # 可执行文件路径 -APP_VERSION="0.0.1" +APP_VERSION="$1" PLATFORM="macos" ARCH="arm64" IDENTIFIER="cn.crossdesk.app" @@ -20,8 +20,8 @@ CONTENTS_DIR="${APP_BUNDLE}/Contents" MACOS_DIR="${CONTENTS_DIR}/MacOS" RESOURCES_DIR="${CONTENTS_DIR}/Resources" -PKG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-v${APP_VERSION}.pkg" # 保持安装包名称小写 -DMG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-v${APP_VERSION}.dmg" +PKG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-${APP_VERSION}.pkg" # 保持安装包名称小写 +DMG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-${APP_VERSION}.dmg" VOL_NAME="Install ${APP_NAME_UPPER}" # === 清理旧文件 === diff --git a/scripts/macosx/pkg_x86_64.sh b/scripts/macosx/pkg_x86_64.sh index d30fc23..5a2f82b 100644 --- a/scripts/macosx/pkg_x86_64.sh +++ b/scripts/macosx/pkg_x86_64.sh @@ -5,7 +5,7 @@ set -e # 遇错退出 APP_NAME="crossdesk" APP_NAME_UPPER="CrossDesk" # 这个变量用来指定大写的应用名 EXECUTABLE_PATH="build/macosx/x86_64/release/crossdesk" # 可执行文件路径 -APP_VERSION="0.0.1" +APP_VERSION="$1" PLATFORM="macos" ARCH="x86_64" IDENTIFIER="cn.crossdesk.app" @@ -20,8 +20,8 @@ CONTENTS_DIR="${APP_BUNDLE}/Contents" MACOS_DIR="${CONTENTS_DIR}/MacOS" RESOURCES_DIR="${CONTENTS_DIR}/Resources" -PKG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-v${APP_VERSION}.pkg" # 保持安装包名称小写 -DMG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-v${APP_VERSION}.dmg" +PKG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-${APP_VERSION}.pkg" # 保持安装包名称小写 +DMG_NAME="${APP_NAME}-${PLATFORM}-${ARCH}-${APP_VERSION}.dmg" VOL_NAME="Install ${APP_NAME_UPPER}" # === 清理旧文件 === diff --git a/scripts/windows/nsis_script.nsi b/scripts/windows/nsis_script.nsi index 5564e4a..ce7be8a 100644 --- a/scripts/windows/nsis_script.nsi +++ b/scripts/windows/nsis_script.nsi @@ -3,7 +3,7 @@ ; װʼ峣 !define PRODUCT_NAME "CrossDesk" -!define PRODUCT_VERSION "0.0.1" +!define PRODUCT_VERSION "${VERSION}" !define PRODUCT_PUBLISHER "CrossDesk" !define PRODUCT_WEB_SITE "https://www.crossdesk.cn/" !define APP_NAME "CrossDesk" @@ -33,7 +33,7 @@ RequestExecutionLevel admin ; ------ MUI ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile "CrossDesk-${PRODUCT_VERSION}.exe" +OutFile "crossdesk-win-x86_64-${PRODUCT_VERSION}.exe" InstallDir "$PROGRAMFILES\CrossDesk" ShowInstDetails show