name: Build Windows Avalonia on: push: branches: - master - develop paths: - '.forgejo/workflows/build-windows-avalonia.yml' - 'Catalog.Communication/**' - 'GitVersion.yml' - 'NuGet.Config' - 'MaddoShared/**' - 'imagecatalog/**' workflow_dispatch: env: DOTNET_VERSION: 10.0.x PROJECT_PATH: imagecatalog/ImageCatalog 2.csproj PUBLISH_DIR: artifacts/publish/win-x64 ARTIFACT_NAME: imagecatalog-windows-avalonia NUGET_SOURCE_NAME: Nuget-Forgejo-AIFotoONLUS NUGET_SOURCE_URL: ${{ vars.AIFOTOONLUS_NUGET_SOURCE_URL || format('{0}/api/packages/{1}/nuget/index.json', github.server_url, vars.AIFOTOONLUS_PACKAGE_OWNER || github.repository_owner) }} jobs: build: runs-on: docker env: FORGEJO_PACKAGE_USERNAME: ${{ secrets.FORGEJO_PACKAGE_USERNAME }} FORGEJO_PACKAGE_TOKEN: ${{ secrets.FORGEJO_PACKAGE_TOKEN }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Validate NuGet secrets run: | set -eu if [ -z "${FORGEJO_PACKAGE_USERNAME}" ]; then echo "secrets.FORGEJO_PACKAGE_USERNAME is required" exit 1 fi if [ -z "${FORGEJO_PACKAGE_TOKEN}" ]; then echo "secrets.FORGEJO_PACKAGE_TOKEN is required" exit 1 fi - name: Configure private NuGet source run: | set -eu temp_config="${RUNNER_TEMP}/nuget.config" cp NuGet.Config "${temp_config}" dotnet nuget update source "${{ env.NUGET_SOURCE_NAME }}" \ --source "${{ env.NUGET_SOURCE_URL }}" \ --username "${FORGEJO_PACKAGE_USERNAME}" \ --password "${FORGEJO_PACKAGE_TOKEN}" \ --store-password-in-clear-text \ --configfile "${temp_config}" echo "NUGET_CONFIG_PATH=${temp_config}" >> "${GITHUB_ENV}" - name: Restore run: dotnet restore "${{ env.PROJECT_PATH }}" -r win-x64 --configfile "${NUGET_CONFIG_PATH}" - name: Publish Windows Avalonia build run: | set -eu dotnet publish "${{ env.PROJECT_PATH }}" \ -c Release \ -r win-x64 \ --self-contained true \ --no-restore \ -p:AvaloniaWindowsCrossPublish=true \ -p:PublishSingleFile=true \ -p:PublishTrimmed=false \ -p:PublishReadyToRun=false \ -o "${{ env.PUBLISH_DIR }}" - name: Validate published executable run: | set -eu exe_count="$(find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f -iname '*.exe' | wc -l | tr -d ' ')" if [ "${exe_count}" -eq 0 ]; then echo "No Windows executable produced in ${{ env.PUBLISH_DIR }}" exit 1 fi legacy_renderer_count="$(find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f \( -iname 'Microsoft.Windows.Compatibility.dll' -o -iname 'System.Private.Windows.GdiPlus.dll' \) | wc -l | tr -d ' ')" if [ "${legacy_renderer_count}" -ne 0 ]; then echo "Legacy GDI compatibility assemblies must not be published:" find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f \( -iname 'Microsoft.Windows.Compatibility.dll' -o -iname 'System.Private.Windows.GdiPlus.dll' \) -print exit 1 fi - name: Upload publish artifact uses: actions/upload-artifact@v3 with: name: ${{ env.ARTIFACT_NAME }} path: ${{ env.PUBLISH_DIR }} if-no-files-found: error