Files
LanMountainDesktop/.github/workflows/installer-build.yml

103 lines
3.3 KiB
YAML

name: LanDesktopPLONDS Installer Build
on:
push:
tags-ignore:
- '*'
paths:
- '.github/workflows/installer-build.yml'
- 'Directory.Packages.props'
- 'LanDesktopPLONDS.installer/**'
- 'LanMountainDesktop.Shared.Contracts/**'
pull_request:
paths:
- '.github/workflows/installer-build.yml'
- 'Directory.Packages.props'
- 'LanDesktopPLONDS.installer/**'
- 'LanMountainDesktop.Shared.Contracts/**'
workflow_dispatch:
env:
DOTNET_VERSION: '10.0.x'
INSTALLER_PROJECT: LanDesktopPLONDS.installer/LanDesktopPLONDS.installer.csproj
INSTALLER_RUNTIME: win-x64
INSTALLER_ARTIFACT_DIR: artifacts/installer-online/win-x64
DOTNET_gcServer: 1
jobs:
build-installer:
runs-on: windows-latest
name: Build_Installer_${{ matrix.configuration }}
strategy:
fail-fast: false
matrix:
configuration: [Debug, Release]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
dotnet-quality: preview
- name: Restore installer
run: dotnet restore ${{ env.INSTALLER_PROJECT }}
- name: Build installer
run: dotnet build ${{ env.INSTALLER_PROJECT }} --no-restore -c ${{ matrix.configuration }} -v minimal
- name: Publish online installer artifact payload
if: matrix.configuration == 'Release'
shell: pwsh
run: |
$publishDir = Join-Path $env:GITHUB_WORKSPACE '${{ env.INSTALLER_ARTIFACT_DIR }}'
if (Test-Path $publishDir) {
Remove-Item -LiteralPath $publishDir -Recurse -Force
}
New-Item -ItemType Directory -Path $publishDir -Force | Out-Null
dotnet restore '${{ env.INSTALLER_PROJECT }}' -r '${{ env.INSTALLER_RUNTIME }}'
if ($LASTEXITCODE -ne 0) {
throw "Online installer runtime restore failed with exit code $LASTEXITCODE."
}
dotnet publish '${{ env.INSTALLER_PROJECT }}' `
--no-restore `
-c '${{ matrix.configuration }}' `
-r '${{ env.INSTALLER_RUNTIME }}' `
-p:PublishAot=true `
-p:UseAppHost=true `
-o $publishDir `
-v minimal
$installerExe = Join-Path $publishDir 'LanDesktopPLONDS.installer.exe'
if (-not (Test-Path $installerExe)) {
if ($LASTEXITCODE -ne 0) {
throw "Online installer publish failed with exit code $LASTEXITCODE and did not produce $installerExe."
}
throw "Expected online installer executable was not produced: $installerExe"
}
if ($LASTEXITCODE -ne 0) {
Write-Warning "dotnet publish exited with $LASTEXITCODE after producing the installer artifact."
}
Get-ChildItem -Path $publishDir -File -Filter 'LanDesktopPLONDS.installer*' |
Select-Object Name, Length
- name: Upload online installer artifact
if: matrix.configuration == 'Release'
uses: actions/upload-artifact@v4
with:
name: LanDesktopPLONDS-online-installer-${{ env.INSTALLER_RUNTIME }}
path: ${{ env.INSTALLER_ARTIFACT_DIR }}/**
if-no-files-found: error