# build-windows.yml # Reusable workflow that builds the Windows versions of Libation. --- name: build on: workflow_call: inputs: version_override: type: string description: "Version number override" required: false run_unit_tests: type: boolean description: "Skip running unit tests" required: false default: true env: DOTNET_CONFIGURATION: "Release" DOTNET_VERSION: "8.0.x" jobs: build: name: "${{ matrix.os }}-${{ matrix.release_name }}" runs-on: windows-latest strategy: matrix: os: [Windows] ui: [Avalonia] release_name: [chardonnay] include: - os: Windows ui: WinForms release_name: classic prefix: Classic- steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} env: NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Get version id: get_version run: | if ("${{ inputs.version_override }}".length -gt 0) { $version = "${{ inputs.version_override }}" } else { $version = (Select-Xml -Path "./Source/AppScaffolding/AppScaffolding.csproj" -XPath "/Project/PropertyGroup/Version").Node.InnerXML.Trim() } "version=$version" >> $env:GITHUB_OUTPUT - name: Unit test if: ${{ inputs.run_unit_tests }} working-directory: ./Source run: dotnet test - name: Publish working-directory: ./Source run: | dotnet publish ` Libation${{ matrix.ui }}/Libation${{ matrix.ui }}.csproj ` --configuration ${{ env.DOTNET_CONFIGURATION }} ` --output bin/Publish/${{ matrix.os }}-${{ matrix.release_name }} ` -p:PublishProfile=Libation${{ matrix.ui }}/Properties/PublishProfiles/${{ matrix.os }}Profile.pubxml dotnet publish ` LoadByOS/${{ matrix.os }}ConfigApp/${{ matrix.os }}ConfigApp.csproj ` --configuration ${{ env.DOTNET_CONFIGURATION }} ` --output bin/Publish/${{ matrix.os }}-${{ matrix.release_name }} ` -p:PublishProfile=LoadByOS/${{ matrix.os }}ConfigApp/PublishProfiles/${{ matrix.os }}Profile.pubxml dotnet publish ` LibationCli/LibationCli.csproj ` --configuration ${{ env.DOTNET_CONFIGURATION }} ` --output bin/Publish/${{ matrix.os }}-${{ matrix.release_name }} ` -p:DefineConstants="${{ matrix.release_name }}" ` -p:PublishProfile=LibationCli/Properties/PublishProfiles/${{ matrix.os }}Profile.pubxml dotnet publish ` Hangover${{ matrix.ui }}/Hangover${{ matrix.ui }}.csproj ` --configuration ${{ env.DOTNET_CONFIGURATION }} ` --output bin/Publish/${{ matrix.os }}-${{ matrix.release_name }} ` -p:PublishProfile=Hangover${{ matrix.ui }}/Properties/PublishProfiles/${{ matrix.os }}Profile.pubxml - name: Zip artifact id: zip working-directory: ./Source/bin/Publish run: | $bin_dir = "${{ matrix.os }}-${{ matrix.release_name }}\" $delfiles = @( "libmp3lame.x64.so", "libmp3lame.arm64.so", "libmp3lame.x64.dylib", "libmp3lame.arm64.dylib", "ffmpegaac.x64.so", "ffmpegaac.arm64.so", "ffmpegaac.x64.dylib", "ffmpegaac.arm64.dylib", "WindowsConfigApp.exe", "WindowsConfigApp.runtimeconfig.json", "WindowsConfigApp.deps.json" ) foreach ($file in $delfiles){ if (test-path $bin_dir$file){ Remove-Item $bin_dir$file } } $artifact="${{ matrix.prefix }}Libation.${{ steps.get_version.outputs.version }}-" + "${{ matrix.os }}".ToLower() + "-${{ matrix.release_name }}" "artifact=$artifact" >> $env:GITHUB_OUTPUT Compress-Archive -Path "${bin_dir}*" -DestinationPath "$artifact.zip" - name: Publish artifact uses: actions/upload-artifact@v4 with: name: ${{ steps.zip.outputs.artifact }}.zip path: ./Source/bin/Publish/${{ steps.zip.outputs.artifact }}.zip if-no-files-found: error retention-days: 7