Skip to content

v0.3.0: materials + textures, MTL parser, sample updates, usage guide #5

v0.3.0: materials + textures, MTL parser, sample updates, usage guide

v0.3.0: materials + textures, MTL parser, sample updates, usage guide #5

Workflow file for this run

name: Release & Publish NuGet
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
release:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Setup NuGet
uses: nuget/setup-nuget@v2
- name: Find MSBuild & VS paths
id: vs
shell: pwsh
run: |
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vsPath = & $vswhere -latest -requires Microsoft.Component.MSBuild -property installationPath
$msbuild = & $vswhere -latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe" | Select-Object -First 1
Write-Host "VS Installation: $vsPath"
Write-Host "MSBuild: $msbuild"
"MSBUILD=$msbuild" >> $env:GITHUB_OUTPUT
"VS_PATH=$vsPath" >> $env:GITHUB_OUTPUT
- name: Extract version from tag
id: version
shell: pwsh
run: |
$tag = "${{ github.ref_name }}"
$ver = $tag -replace '^v', ''
"VERSION=$ver" >> $env:GITHUB_OUTPUT
- name: Restore & Build UWP library
shell: pwsh
run: |
nuget restore src/Combobulate/Combobulate.csproj
& "${{ steps.vs.outputs.MSBUILD }}" src/Combobulate/Combobulate.csproj `
/t:Build /p:Configuration=Release /p:Platform=AnyCPU
- name: Resolve AppxMSBuildToolsPath
id: appx
shell: pwsh
run: |
# dotnet build has .NET 10 but not VS's PRI task DLLs. We just need AppxMSBuildToolsPath.
# Override AppxMSBuildToolsPath to point directly to VS's copy.
$vsPath = "${{ steps.vs.outputs.VS_PATH }}"
$msbuildDir = "$vsPath\MSBuild"
$vsVerDir = Get-ChildItem "$msbuildDir\Microsoft\VisualStudio" -Directory -Filter "v*" | Select-Object -First 1
$appxPath = "$($vsVerDir.FullName)\AppxPackage"
Write-Host "AppxMSBuildToolsPath: $appxPath"
Write-Host "PRI DLL exists: $(Test-Path "$appxPath\Microsoft.Build.Packaging.Pri.Tasks.dll")"
"APPX_PATH=$appxPath" >> $env:GITHUB_OUTPUT
- name: Restore & Build WinAppSdk library (x64)
shell: pwsh
run: |
dotnet restore src/Combobulate.WinAppSdk/Combobulate.WinAppSdk.csproj -p:Platform=x64
dotnet build src/Combobulate.WinAppSdk/Combobulate.WinAppSdk.csproj `
-c Release `
--no-restore `
-p:Platform=x64 `
"-p:AppxMSBuildToolsPath=${{ steps.appx.outputs.APPX_PATH }}\"
- name: Restore & Build WinAppSdk library (ARM64)
shell: pwsh
run: |
dotnet restore src/Combobulate.WinAppSdk/Combobulate.WinAppSdk.csproj -p:Platform=ARM64
dotnet build src/Combobulate.WinAppSdk/Combobulate.WinAppSdk.csproj `
-c Release `
--no-restore `
-p:Platform=ARM64 `
"-p:AppxMSBuildToolsPath=${{ steps.appx.outputs.APPX_PATH }}\"
- name: Pack NuGet
shell: pwsh
run: |
nuget pack Combobulate.nuspec `
-Version ${{ steps.version.outputs.VERSION }} `
-OutputDirectory artifacts
- name: Push to NuGet.org
id: nuget_push
shell: pwsh
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
run: |
if ([string]::IsNullOrWhiteSpace($env:NUGET_API_KEY)) {
Write-Host "::warning::NUGET_API_KEY repository secret is not set; skipping NuGet push. The GitHub Release will still be created with the .nupkg attached."
exit 0
}
$hadFailure = $false
Get-ChildItem artifacts\*.nupkg | ForEach-Object {
Write-Host "Pushing $($_.Name)…"
dotnet nuget push $_.FullName `
--api-key $env:NUGET_API_KEY `
--source https://api.nuget.org/v3/index.json `
--skip-duplicate
if ($LASTEXITCODE -ne 0) {
Write-Host "::warning::dotnet nuget push exited with $LASTEXITCODE for $($_.Name)."
$hadFailure = $true
}
}
if ($hadFailure) {
Write-Host "::warning::One or more packages failed to push to NuGet.org. The GitHub Release will still be created."
}
- name: Create GitHub Release
if: always()
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: artifacts/*.nupkg