@@ -3,50 +3,152 @@ name: Check-Build
33on : [push]
44
55jobs :
6- build :
7-
8- runs-on : windows-latest
6+ build-driver :
7+ name : Build C++ driver (${{ matrix.os }} • ${{ matrix.preset }})
8+ runs-on : ${{ matrix.os }}
99 strategy :
10+ fail-fast : false
1011 matrix :
11- dotnet-version : ['7.0.203' ]
12+ include :
13+ # Windows release presets
14+ - os : windows-latest
15+ preset : x64-release
16+ triplet : x64-windows-static
17+ vcpkgPkgs : " capnproto minhook"
18+ use_hooks : " ON"
19+ - os : windows-latest
20+ preset : x64-release-nohooks
21+ triplet : x64-windows-static
22+ vcpkgPkgs : " capnproto"
23+ use_hooks : " OFF"
24+ # Linux release preset
25+ - os : ubuntu-latest
26+ preset : linux-x64-release
27+ triplet : x64-linux
28+ vcpkgPkgs : " capnproto"
29+ use_hooks : " OFF"
1230
1331 steps :
14- - uses : actions/checkout@v3
15- with :
32+ - name : Checkout
33+ uses : actions/checkout@v4
34+ with :
1635 submodules : true
1736
18- - uses : actions/setup-dotnet@v3
37+ - name : Set up Ninja (Linux)
38+ if : runner.os == 'Linux'
39+ run : |
40+ sudo apt-get update
41+ sudo apt-get install -y ninja-build
42+
43+ - name : Set up Ninja (cross-platform)
44+ uses : seanmiddleditch/gha-setup-ninja@v4
45+
46+ - name : Set up MSVC developer command prompt (Windows)
47+ if : runner.os == 'Windows'
48+ uses : ilammy/msvc-dev-cmd@v1
49+
50+ - name : Set up CMake
51+ uses : lukka/get-cmake@latest
52+
53+ - name : Set up vcpkg
54+ id : runvcpkg
55+ uses : lukka/run-vcpkg@v11
1956 with :
20- dotnet-version : ' 7.0.203'
21-
22- - name : Add MSBuild to PATH
23- 57+ setupOnly : true
58+ vcpkgGitCommitId : 0d9d4684352ba8de70bdf251c6fc9a3c464fa12b
2459
25- - name : Build the OpenVR Emulation driver
60+ - name : Install vcpkg packages (Windows)
61+ if : runner.os == 'Windows'
62+ shell : pwsh
2663 run : |
27- nuget restore
28- msbuild /restore /p:Platform=x64 /p:PlatformTarget=x64 /p:Configuration=Release /p:RuntimeIdentifier=win-x64 /t:driver_00Amethyst
29-
30- - name : Build the OpenVR driver
64+ $triplet = '${{ matrix.triplet }}'
65+ $pkgsRaw = '${{ matrix.vcpkgPkgs }}'
66+ $pkgs = $pkgsRaw -split '\s+' | Where-Object { $_ -and $_.Trim().Length -gt 0 }
67+ [string[]]$args = @()
68+ foreach ($p in $pkgs) { $args += ("$($p.Trim()):$triplet") }
69+ if ($args.Count -eq 0) { Write-Host 'No vcpkg packages to install.' } else { & "$env:VCPKG_ROOT\vcpkg.exe" install @args }
70+
71+ - name : Install vcpkg packages (Linux)
72+ if : runner.os == 'Linux'
73+ shell : bash
3174 run : |
32- nuget restore
33- msbuild /restore /p:Platform=x64 /p:PlatformTarget=x64 /p:Configuration=Release /p:RuntimeIdentifier=win-x64 /t:driver_Amethyst
34-
35- - name : Restore and build (publish)
36- run : msbuild /restore /p:Platform=x64 /p:PlatformTarget=x64 /p:Configuration=Release /p:RuntimeIdentifier=win-x64 /t:plugin_OpenVR:Publish /p:PublishProfile=plugin_OpenVR\Properties\PublishProfiles\FolderProfile.pubxml
75+ set -euo pipefail
76+ triplet='${{ matrix.triplet }}'
77+ pkgs='${{ matrix.vcpkgPkgs }}'
78+ args=""
79+ for p in $pkgs; do args+="$p:$triplet "; done
80+ "$VCPKG_ROOT/vcpkg" install $args
81+
82+ - name : Configure (CMake preset)
83+ working-directory : ${{ github.workspace }}
84+ run : >-
85+ cmake
86+ --preset "${{ matrix.preset }}"
87+ -DCMAKE_TOOLCHAIN_FILE="${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake"
88+ -DUSE_HOOKS=${{ matrix.use_hooks }}
89+
90+ - name : Build (CMake preset)
91+ working-directory : ${{ github.workspace }}
92+ run : cmake --build --preset "${{ matrix.preset }}" --parallel
93+
94+ - name : Upload driver pack artifact
95+ uses : actions/upload-artifact@v4
96+ with :
97+ name : driver_${{ matrix.preset }}_${{ runner.os }}
98+ path : |
99+ out/build/${{ matrix.preset }}/driver_Amethyst/Pack/**
100+ if-no-files-found : error
101+
102+ package-all :
103+ name : Package plugin + all drivers (single zip)
104+ needs : build-driver
105+ runs-on : windows-latest
106+ steps :
107+ - name : Checkout
108+ uses : actions/checkout@v4
109+ with :
110+ submodules : true
111+
112+ - name : Download all driver artifacts
113+ uses : actions/download-artifact@v4
114+ with :
115+ pattern : driver_*
116+ path : drivers
117+ merge-multiple : true
118+
119+ - name : Merge driver outputs into out/build
120+ shell : pwsh
121+ run : |
122+ $presets = @('x64-release','x64-release-nohooks','linux-x64-release')
123+ foreach ($p in $presets) {
124+ $src = Join-Path 'drivers' 'out/build' $p
125+ if (Test-Path $src) {
126+ $dst = Join-Path 'out/build' $p
127+ New-Item -ItemType Directory -Force -Path $dst | Out-Null
128+ Copy-Item -Recurse -Force (Join-Path $src '*') $dst
129+ }
130+ }
37131
132+ - name : Set up .NET
133+ uses : actions/setup-dotnet@v3
134+ with :
135+ dotnet-version : ' 10.0.x'
136+
137+ - name : Restore and build (publish)
138+ run : dotnet publish /p:Configuration=Release /p:TargetFramework=net8.0 /p:PublishProfile=FolderProfile
139+
38140 - name : Pack published files
39141 run : |
40- cd plugin_OpenVR/bin/Release/net8.0/win-x64/ publish
142+ cd plugin_OpenVR/bin/Release/publish
41143 7z a plugin_OpenVR.zip *
42-
144+
43145 - name : Upload plugin artifact
44146 uses : " marvinpinto/action-automatic-releases@latest"
45147 with :
46148 repo_token : " ${{ secrets.GITHUB_TOKEN }}"
47- automatic_release_tag : " latest"
149+ automatic_release_tag : " ame2- latest"
48150 prerelease : true
49151 title : " plugin_OpenVR Build Artifact"
50152 files : |
51- ./plugin_OpenVR/bin/Release/net8.0/win-x64/ publish/plugin_OpenVR.zip
52- ./external/manifest.json
153+ ./plugin_OpenVR/bin/Release/publish/plugin_OpenVR.zip
154+ ./external/manifest.json
0 commit comments