From d400a53784f0137dfc5a8322eb4989245b7ab443 Mon Sep 17 00:00:00 2001 From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com> Date: Wed, 11 Jun 2025 14:46:41 +0800 Subject: [PATCH] feat: update publish.yml and release-tag.yml for improved artifact handling and new platform support. --- .github/workflows/publish.yml | 245 ++++++++++++++++++++---------- .github/workflows/release-tag.yml | 232 ++++++++++++++++++---------- 2 files changed, 317 insertions(+), 160 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0638b94..bc330ee 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,130 +3,211 @@ name: Publish Demo on: workflow_dispatch: inputs: - platform: - description: 'Platform to publish' - required: true - default: 'all' - type: choice - options: - - 'windows' - - 'linux' - - 'android' - - 'all' - win64: + win-x64: description: 'Windows x64' required: true - default: true + default: false type: boolean - win64_aot: + win-x64-aot: description: 'Windows x64 AOT' required: true - default: true + default: false type: boolean - linux64: + linux-x64: description: 'Linux x64' required: true - default: true + default: false type: boolean - linux64_drm: - description: 'Linux x64 DRM' + linux-x64-aot: + description: 'Linux x64 AOT' required: true - default: true + default: false + type: boolean + drm-linux-x64: + description: 'DRM Linux x64' + required: true + default: false + type: boolean + drm-linux-x64-aot: + description: 'DRM Linux x64 AOT' + required: true + default: false + type: boolean + osx-arm64: + description: 'macOS arm64' + required: true + default: false + type: boolean + osx-arm64-aot: + description: 'macOS arm64 AOT' + required: true + default: false + type: boolean + android-arm64: + description: 'Android arm64' + required: true + default: false type: boolean jobs: - windows: - if: ${{ github.event.inputs.platform == 'windows' || github.event.inputs.platform == 'all' }} + win-x64: + if: ${{ github.event.inputs.win-x64 == 'true' }} runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@v4.1.1 - - - name: Make upload directory - run: mkdir upload - + uses: actions/checkout@v4.2.2 - name: Publish win-x64 - if: ${{ github.event.inputs.win64 == 'true' }} - run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish/win64 --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - - - name: Zip win-x64 - if: ${{ github.event.inputs.win64 == 'true' }} - run: | - $files = Get-ChildItem -Path publish/win64/* -Recurse -Exclude *.pdb - Compress-Archive -Path $files.FullName -DestinationPath upload/Semi.Avalonia.Demo.Desktop.win-x64.zip + 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 + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.win-x64 + path: | + publish + !publish/*.pdb + win-x64-aot: + if: ${{ github.event.inputs.win-x64-aot == 'true' }} + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 - name: Enable Native AOT in .csproj - if: ${{ github.event.inputs.win64_aot == 'true' }} run: | sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj - - name: Publish win-x64 AOT - if: ${{ github.event.inputs.win64_aot == 'true' }} - run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish/win64-aot - - - name: Zip win-x64 AOT - if: ${{ github.event.inputs.win64_aot == 'true' }} - run: | - $files = Get-ChildItem -Path publish/win64-aot/* -Recurse -Exclude *.pdb - Compress-Archive -Path $files.FullName -DestinationPath upload/Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT.zip - + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish - name: Upload a Build Artifact - uses: actions/upload-artifact@v4.3.1 + uses: actions/upload-artifact@v4.6.2 with: - name: windows - path: upload + name: Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT + path: | + publish + !publish/*.pdb - linux: - if: ${{ github.event.inputs.platform == 'linux' || github.event.inputs.platform == 'all' }} + linux-x64: + if: ${{ github.event.inputs.linux-x64 == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.1.1 - - - name: Make upload directory - run: mkdir upload - + uses: actions/checkout@v4.2.2 - name: Publish linux-x64 - if: ${{ github.event.inputs.linux64 == 'true' }} - run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish/linux64 --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - - - name: Zip linux-x64 - if: ${{ github.event.inputs.linux64 == 'true' }} - run: zip -j -r upload/Semi.Avalonia.Demo.Desktop.linux-x64.zip publish/linux64 -x "*.pdb" - - - name: Publish linux-x64 DRM - if: ${{ github.event.inputs.linux64_drm == 'true' }} - run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish/drm --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - - - name: Zip linux-x64 DRM - if: ${{ github.event.inputs.linux64_drm == 'true' }} - run: zip -j -r upload/Semi.Avalonia.Demo.Drm.linux-x64.zip publish/drm -x "*.pdb" - + 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 - uses: actions/upload-artifact@v4.3.1 + uses: actions/upload-artifact@v4.6.2 with: - name: linux - path: upload + name: Semi.Avalonia.Demo.Desktop.linux-x64 + path: | + publish + !publish/*.pdb - android: - if: ${{ github.event.inputs.platform == 'android' || github.event.inputs.platform == 'all' }} + linux-x64-aot: + if: ${{ github.event.inputs.linux-x64-aot == 'true' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - name: Enable Native AOT in .csproj + run: | + sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish linux-x64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT + path: | + publish + !publish/*.pdb + + drm-linux-x64: + if: ${{ github.event.inputs.drm-linux-x64 == 'true' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - 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 + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Drm.linux-x64 + path: | + publish + !publish/*.pdb + + drm-linux-x64-aot: + if: ${{ github.event.inputs.drm-linux-x64-aot == 'true' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - name: Enable Native AOT in .csproj + run: | + sed -i 's##true#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj + sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish linux-x64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT + path: | + publish + !publish/*.pdb + + osx-arm64: + if: ${{ github.event.inputs.osx-arm64 == 'true' }} + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - 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: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-arm64 + path: | + publish + !publish/*.pdb + + osx-arm64-aot: + if: ${{ github.event.inputs.osx-arm64-aot == 'true' }} + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - name: Enable Native AOT in .csproj + run: | + sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish osx-arm64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT + path: | + publish + !publish/*.pdb + + android-arm64: + if: ${{ github.event.inputs.android-arm64 == 'true' }} runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@v4.1.1 - + uses: actions/checkout@v4.2.2 - name: CD Android run: cd demo/Semi.Avalonia.Demo.Android - - name: Restore Dependencies run: dotnet restore - - name: Publish Android run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net8.0-android --no-restore -o publish -p:RuntimeIdentifier=android-arm64 - - name: Upload a Build Artifact - uses: actions/upload-artifact@v4.3.1 + uses: actions/upload-artifact@v4.6.2 with: - name: android + name: android-arm64 path: publish/*Signed.apk diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index b208355..d614c8d 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -7,140 +7,216 @@ on: workflow_dispatch: jobs: - pack: + nuget: runs-on: ubuntu-latest - steps: - name: Checkout - uses: actions/checkout@v4 - + uses: actions/checkout@v4.2.2 - name: Pack Semi.Avalonia run: dotnet pack src/Semi.Avalonia -o nugets - - name: Pack Semi.Avalonia.ColorPicker run: dotnet pack src/Semi.Avalonia.ColorPicker -o nugets + - name: Pack Semi.Avalonia.DataGrid + run: dotnet pack src/Semi.Avalonia.DataGrid -o nugets + - name: Pack Semi.Avalonia.TreeDataGrid + run: dotnet pack src/Semi.Avalonia.TreeDataGrid -o nugets - name: Upload a Build Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v4.6.2 with: name: nugets path: nugets - publish-windows: + win-x64: runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@v4 - - - name: Make upload directory - run: mkdir upload - + uses: actions/checkout@v4.2.2 - name: Publish win-x64 - run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish/win64 --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - - - name: Zip win-x64 - run: | - $files = Get-ChildItem -Path publish/win64/* -Recurse -Exclude *.pdb - Compress-Archive -Path $files.FullName -DestinationPath upload/Semi.Avalonia.Demo.Desktop.win-x64.zip + 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 + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.win-x64 + path: | + publish + !publish/*.pdb + win-x64-aot: + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 - name: Enable Native AOT in .csproj run: | sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj - - name: Publish win-x64 AOT - run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish/win64-aot - - - name: Zip win-x64 AOT - run: | - $files = Get-ChildItem -Path publish/win64-aot/* -Recurse -Exclude *.pdb - Compress-Archive -Path $files.FullName -DestinationPath upload/Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT.zip - + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish - name: Upload a Build Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v4.6.2 with: - name: windows - path: upload + name: Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT + path: | + publish + !publish/*.pdb - publish-linux: + linux-x64: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 - - - name: Make upload directory - run: mkdir upload - + uses: actions/checkout@v4.2.2 - name: Publish linux-x64 - run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish/linux64 --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - - - name: Zip linux-x64 - run: zip -j -r upload/Semi.Avalonia.Demo.Desktop.linux-x64.zip publish/linux64 -x "*.pdb" - - - name: Publish linux-x64 DRM - run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish/drm --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true - - - name: Zip linux-x64 DRM - run: zip -j -r upload/Semi.Avalonia.Demo.Drm.linux-x64.zip publish/drm -x "*.pdb" - + 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 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v4.6.2 with: - name: linux - path: upload + name: Semi.Avalonia.Demo.Desktop.linux-x64 + path: | + publish + !publish/*.pdb - publish-android: + linux-x64-aot: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - name: Enable Native AOT in .csproj + run: | + sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish linux-x64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT + path: | + publish + !publish/*.pdb + + drm-linux-x64: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - 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 + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Drm.linux-x64 + path: | + publish + !publish/*.pdb + + drm-linux-x64-aot: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - name: Enable Native AOT in .csproj + run: | + sed -i 's##true#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj + sed -i 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish linux-x64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT + path: | + publish + !publish/*.pdb + + osx-arm64: + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - 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: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-arm64 + path: | + publish + !publish/*.pdb + + osx-arm64-aot: + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + - name: Enable Native AOT in .csproj + run: | + sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + sed -i '' 's##true#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj + - name: Publish osx-arm64 AOT + run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish + - name: Upload a Build Artifact + uses: actions/upload-artifact@v4.6.2 + with: + name: Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT + path: | + publish + !publish/*.pdb + + android-arm64: runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@v4 - + uses: actions/checkout@v4.2.2 - name: CD Android run: cd demo/Semi.Avalonia.Demo.Android - - name: Restore Dependencies run: dotnet restore - - name: Publish Android run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net8.0-android --no-restore -o publish -p:RuntimeIdentifier=android-arm64 - - name: Upload a Build Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v4.6.2 with: - name: android + name: android-arm64 path: publish/*Signed.apk draft-release: - needs: [ pack, publish-windows, publish-linux, publish-android ] + needs: [ + nuget, + win-x64,win-x64-aot, + linux-x64,linux-x64-aot, + drm-linux-x64,drm-linux-x64-aot, + osx-arm64,osx-arm64-aot, + android-arm64 + ] runs-on: ubuntu-latest steps: - - name: Download nugets Artifacts - uses: actions/download-artifact@v4 - with: - name: nugets + - uses: actions/download-artifact@v4.3.0 - - name: Download windows Artifacts - uses: actions/download-artifact@v4 - with: - name: windows + - name: Display structure of downloaded files + run: ls -R - - name: Download linux Artifacts - uses: actions/download-artifact@v4 - with: - name: linux + - name: Zip artifacts + run: | + zip -r Semi.Avalonia.Demo.Desktop.win-x64.zip Semi.Avalonia.Demo.Desktop.win-x64 + zip -r Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT.zip Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT + zip -r Semi.Avalonia.Demo.Desktop.linux-x64.zip Semi.Avalonia.Demo.Desktop.linux-x64 + zip -r Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT.zip Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT + zip -r Semi.Avalonia.Demo.Drm.linux-x64.zip Semi.Avalonia.Demo.Drm.linux-x64 + zip -r Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT.zip Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT + zip -r Semi.Avalonia.Demo.Desktop.osx-arm64.zip Semi.Avalonia.Demo.Desktop.osx-arm64 + zip -r Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT.zip Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT - - name: Download android Artifacts - uses: actions/download-artifact@v4 - with: - name: android + - name: Display structure of zipped files + run: ls -R - name: Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v2.3.2 if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' with: generate_release_notes: true draft: true files: | - *.nupkg - *.zip - *.apk + nugets/*.nupkg + android-arm64/*.apk + *.zip \ No newline at end of file