From 24bd21936fecd589dd5adc9324640324a39c06b9 Mon Sep 17 00:00:00 2001 From: zeje Date: Thu, 21 May 2026 16:53:43 +0800 Subject: [PATCH] create-dmg (#818) * create-dmg * create-dmg-update * Potential fix for pull request finding OK Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .github/workflows/publish.yml | 173 ++++++++++++++++++ .github/workflows/release-tag.yml | 8 +- .../Info-macOS.plist | 20 ++ .../Semi.Avalonia.Demo.Desktop.csproj | 26 ++- 4 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ee4062e..0e43f9e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -35,6 +35,14 @@ on: description: 'macOS arm64 AOT' default: false type: boolean + osx-x64: + description: 'macOS Intel x64' + default: false + type: boolean + osx-x64-aot: + description: 'macOS Intel x64 AOT' + default: false + type: boolean android-arm64: description: 'Android arm64' default: false @@ -65,10 +73,23 @@ on: osx-arm64-aot: type: boolean default: true + osx-x64: + type: boolean + default: true + osx-x64-aot: + type: boolean + default: true android-arm64: type: boolean default: true +# SDK 渠道与各作业的 TargetFramework 对应: +# - net8.0(Semi.Avalonia.Demo.Desktop / Semi.Avalonia.Demo.Drm)→ DOTNET_SDK_VERSION_NET8 +# - net10.0-android(Semi.Avalonia.Demo.Android)→ DOTNET_SDK_VERSION_NET10 +env: + DOTNET_SDK_VERSION_NET8: '8.0.x' + DOTNET_SDK_VERSION_NET10: '10.0.x' + jobs: win-x64: if: ${{inputs.win-x64}} @@ -76,6 +97,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} - name: Publish win-x64 run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - name: Upload a Build Artifact @@ -92,6 +117,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} - name: Enable Native AOT in .csproj run: sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj - name: Publish win-x64 AOT @@ -110,6 +139,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} - name: Publish linux-x64 run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - name: Upload a Build Artifact @@ -126,6 +159,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} - name: Enable Native AOT in .csproj run: sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj - name: Publish linux-x64 AOT @@ -144,6 +181,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} - name: Publish linux-x64 DRM run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - name: Upload a Build Artifact @@ -160,6 +201,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} - name: Enable Native AOT in .csproj run: sed -i 's##true#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj - name: Publish linux-x64 AOT @@ -178,8 +223,41 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 + + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} + - name: Publish osx-arm64 run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true + + - name: Create .app bundle and DMG (create-dmg) + run: | + set -euo pipefail + APP_DIR="bundle/Semi.Avalonia.Demo.app" + MACOS_DIR="${APP_DIR}/Contents/MacOS" + mkdir -p "${MACOS_DIR}" + cp -R publish/. "${MACOS_DIR}/" + chmod +x "${MACOS_DIR}/Semi.Avalonia.Demo.Desktop" + cp publish/Info-macOS.plist "${APP_DIR}/Contents/Info.plist" + codesign --force --deep --sign - "${APP_DIR}" + mkdir -p dmg_stage + ditto "${APP_DIR}" "dmg_stage/Semi.Avalonia.Demo.app" + brew install create-dmg + rm -f Semi.Avalonia.Demo.Desktop.osx-arm64.dmg + create-dmg \ + --volname "Semi Avalonia Demo" \ + --window-pos 200 120 \ + --window-size 640 400 \ + --icon-size 100 \ + --icon "Semi.Avalonia.Demo.app" 175 185 \ + --hide-extension "Semi.Avalonia.Demo.app" \ + --app-drop-link 455 185 \ + --skip-jenkins \ + "Semi.Avalonia.Demo.Desktop.osx-arm64.dmg" \ + "dmg_stage" + - name: Upload a Build Artifact uses: actions/upload-artifact@v4.6.2 with: @@ -188,12 +266,79 @@ jobs: publish !publish/*.pdb + - name: Upload macOS DMG + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-arm64.dmg + path: Semi.Avalonia.Demo.Desktop.osx-arm64.dmg + + osx-x64: + if: ${{inputs.osx-x64}} + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} + + - name: Publish osx-x64 + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true + + - name: Create .app bundle and DMG (create-dmg) + run: | + set -euo pipefail + APP_DIR="bundle/Semi.Avalonia.Demo.app" + MACOS_DIR="${APP_DIR}/Contents/MacOS" + mkdir -p "${MACOS_DIR}" + cp -R publish/. "${MACOS_DIR}/" + chmod +x "${MACOS_DIR}/Semi.Avalonia.Demo.Desktop" + cp publish/Info-macOS.plist "${APP_DIR}/Contents/Info.plist" + codesign --force --deep --sign - "${APP_DIR}" + mkdir -p dmg_stage + ditto "${APP_DIR}" "dmg_stage/Semi.Avalonia.Demo.app" + brew install create-dmg + rm -f Semi.Avalonia.Demo.Desktop.osx-x64.dmg + create-dmg \ + --volname "Semi Avalonia Demo" \ + --window-pos 200 120 \ + --window-size 640 400 \ + --icon-size 100 \ + --icon "Semi.Avalonia.Demo.app" 175 185 \ + --hide-extension "Semi.Avalonia.Demo.app" \ + --app-drop-link 455 185 \ + --skip-jenkins \ + "Semi.Avalonia.Demo.Desktop.osx-x64.dmg" \ + "dmg_stage" + + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-x64 + path: | + publish + !publish/*.pdb + + - name: Upload macOS DMG (Intel) + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-x64.dmg + path: Semi.Avalonia.Demo.Desktop.osx-x64.dmg + osx-arm64-aot: if: ${{inputs.osx-arm64-aot}} runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v5 + + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} + - name: Enable Native AOT in .csproj run: sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj - name: Publish osx-arm64 AOT @@ -206,12 +351,40 @@ jobs: publish !publish/*.pdb + osx-x64-aot: + if: ${{inputs.osx-x64-aot}} + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET8 }} + + - name: Enable Native AOT in .csproj + run: sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish osx-x64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-x64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT + path: | + publish + !publish/*.pdb + android-arm64: if: ${{inputs.android-arm64 }} runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v5 + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ env.DOTNET_SDK_VERSION_NET10 }} - name: Install Android workload run: dotnet workload install android - name: Restore Dependencies diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index e909e8c..9e3d3b7 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -58,6 +58,10 @@ jobs: zip -rj Semi.Avalonia.Demo.Desktop.osx-arm64.zip Semi.Avalonia.Demo.Desktop.osx-arm64 cd Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT zip -r ../Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT.zip . + cd "${GITHUB_WORKSPACE}" + zip -rj Semi.Avalonia.Demo.Desktop.osx-x64.zip Semi.Avalonia.Demo.Desktop.osx-x64 + cd Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT + zip -r ../Semi.Avalonia.Demo.Desktop.osx-x64.NativeAOT.zip . - name: Display structure of zipped files run: ls -R @@ -71,4 +75,6 @@ jobs: files: | nugets/*.nupkg android-arm64/*.apk - *.zip \ No newline at end of file + *.zip + Semi.Avalonia.Demo.Desktop.osx-arm64.dmg/Semi.Avalonia.Demo.Desktop.osx-arm64.dmg + Semi.Avalonia.Demo.Desktop.osx-x64.dmg/Semi.Avalonia.Demo.Desktop.osx-x64.dmg \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist b/demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist new file mode 100644 index 0000000..aadc6f8 --- /dev/null +++ b/demo/Semi.Avalonia.Demo.Desktop/Info-macOS.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + Semi.Avalonia.Demo.Desktop + CFBundleIdentifier + org.avaloniaui.SemiAvaloniaDemo + CFBundleName + Semi Avalonia Demo + CFBundlePackageType + APPL + CFBundleShortVersionString + $(Version) + CFBundleVersion + $(Version) + LSMinimumSystemVersion + 10.15 + + diff --git a/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj b/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj index 4e50e58..85b6898 100644 --- a/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj +++ b/demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj @@ -1,7 +1,24 @@ - + + + + + + + + + + + + WinExe net8.0 + 1.0.0 enable true ..\Semi.Avalonia.Demo\Assets\irihi.ico @@ -29,4 +46,11 @@ + + + +