Skip to content

Commit c6d0287

Browse files
committed
CI
1 parent fa5fc14 commit c6d0287

File tree

3 files changed

+167
-53
lines changed

3 files changed

+167
-53
lines changed

.github/workflows/build.yml

Lines changed: 123 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,147 @@ name: Check-Build
33
on: [push]
44

55
jobs:
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@latest
1956
with:
20-
dotnet-version: '7.0.203'
21-
22-
- name: Add MSBuild to PATH
23-
uses: microsoft/[email protected]
57+
setupOnly: true
2458

25-
- name: Build the OpenVR Emulation driver
59+
- name: Install vcpkg packages (Windows)
60+
if: runner.os == 'Windows'
61+
shell: pwsh
2662
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
63+
$triplet = '${{ matrix.triplet }}'
64+
$pkgs = '${{ matrix.vcpkgPkgs }}'.Split(' ', [System.StringSplitOptions]::RemoveEmptyEntries)
65+
$args = $pkgs | ForEach-Object { "$_:$triplet" }
66+
& "$env:VCPKG_ROOT\vcpkg.exe" install @args
67+
68+
- name: Install vcpkg packages (Linux)
69+
if: runner.os == 'Linux'
70+
shell: bash
3171
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
72+
set -euo pipefail
73+
triplet='${{ matrix.triplet }}'
74+
pkgs='${{ matrix.vcpkgPkgs }}'
75+
args=""
76+
for p in $pkgs; do args+="$p:$triplet "; done
77+
"$VCPKG_ROOT/vcpkg" install $args
78+
79+
- name: Configure (CMake preset)
80+
run: >-
81+
cmake
82+
--preset "${{ matrix.preset }}"
83+
-DCMAKE_TOOLCHAIN_FILE="${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake"
84+
-DUSE_HOOKS=${{ matrix.use_hooks }}
85+
86+
- name: Build (CMake preset)
87+
run: cmake --build --preset "${{ matrix.preset }}" --parallel
88+
89+
- name: Upload driver pack artifact
90+
uses: actions/upload-artifact@v4
91+
with:
92+
name: driver_${{ matrix.preset }}_${{ runner.os }}
93+
path: |
94+
out/build/${{ matrix.preset }}/driver_Amethyst/Pack/**
95+
if-no-files-found: error
96+
97+
package-all:
98+
name: Package plugin + all drivers (single zip)
99+
needs: build-driver
100+
runs-on: windows-latest
101+
steps:
102+
- name: Checkout
103+
uses: actions/checkout@v4
104+
with:
105+
submodules: true
106+
107+
- name: Download all driver artifacts
108+
uses: actions/download-artifact@v4
109+
with:
110+
pattern: driver_*
111+
path: drivers
112+
merge-multiple: true
113+
114+
- name: Merge driver outputs into out/build
115+
shell: pwsh
116+
run: |
117+
$presets = @('x64-release','x64-release-nohooks','linux-x64-release')
118+
foreach ($p in $presets) {
119+
$src = Join-Path 'drivers' 'out/build' $p
120+
if (Test-Path $src) {
121+
$dst = Join-Path 'out/build' $p
122+
New-Item -ItemType Directory -Force -Path $dst | Out-Null
123+
Copy-Item -Recurse -Force (Join-Path $src '*') $dst
124+
}
125+
}
37126
127+
- name: Set up .NET
128+
uses: actions/setup-dotnet@v3
129+
with:
130+
dotnet-version: '10.0.x'
131+
132+
- name: Restore and build (publish)
133+
run: dotnet publish /p:Configuration=Release /p:TargetFramework=net8.0 /p:PublishProfile=FolderProfile
134+
38135
- name: Pack published files
39136
run: |
40-
cd plugin_OpenVR/bin/Release/net8.0/win-x64/publish
137+
cd plugin_OpenVR/bin/Release/publish
41138
7z a plugin_OpenVR.zip *
42-
139+
43140
- name: Upload plugin artifact
44141
uses: "marvinpinto/action-automatic-releases@latest"
45142
with:
46143
repo_token: "${{ secrets.GITHUB_TOKEN }}"
47-
automatic_release_tag: "latest"
144+
automatic_release_tag: "ame2-latest"
48145
prerelease: true
49146
title: "plugin_OpenVR Build Artifact"
50147
files: |
51-
./plugin_OpenVR/bin/Release/net8.0/win-x64/publish/plugin_OpenVR.zip
52-
./external/manifest.json
148+
./plugin_OpenVR/bin/Release/publish/plugin_OpenVR.zip
149+
./external/manifest.json

plugin_OpenVR/Properties/PublishProfiles/FolderProfile.pubxml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
66
<PropertyGroup>
77
<Configuration>Release</Configuration>
88
<Platform>x64</Platform>
9-
<PublishDir>bin\Release\net8.0\win-x64\publish\</PublishDir>
9+
<PublishDir>bin\Release\Publish</PublishDir>
1010
<PublishProtocol>FileSystem</PublishProtocol>
1111
<_TargetId>Folder</_TargetId>
1212
<TargetFramework>net8.0</TargetFramework>
13-
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
1413
<SelfContained>true</SelfContained>
1514
<PublishSingleFile>false</PublishSingleFile>
16-
<PublishReadyToRun>true</PublishReadyToRun>
15+
<PublishReadyToRun>false</PublishReadyToRun>
1716
<PublishTrimmed>false</PublishTrimmed>
1817
</PropertyGroup>
19-
</Project>
18+
</Project>

plugin_OpenVR/plugin_OpenVR.csproj

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,28 @@
2020
</PropertyGroup>
2121

2222
<ItemGroup>
23-
<TrimmerRootAssembly Include="MessagePack" />
24-
<TrimmerRootAssembly Include="Microsoft.VisualStudio.Threading" />
25-
<TrimmerRootAssembly Include="Newtonsoft.Json" />
26-
<TrimmerRootAssembly Include="StreamJsonRpc" />
23+
<TrimmerRootAssembly Include="MessagePack"/>
24+
<TrimmerRootAssembly Include="Microsoft.VisualStudio.Threading"/>
25+
<TrimmerRootAssembly Include="Newtonsoft.Json"/>
26+
<TrimmerRootAssembly Include="StreamJsonRpc"/>
2727
</ItemGroup>
2828

2929
<ItemGroup>
30-
<PackageReference Include="Avalonia" Version="11.3.2" />
31-
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.3.0" />
32-
<PackageReference Include="Capnp.Net.Runtime" Version="1.3.118" />
33-
<!-- <PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.3.118" />-->
34-
<PackageReference Include="FluentAvaloniaUI" Version="2.4.0" />
35-
<PackageReference Include="FluentAvaloniaUI" Version="2.4.0" />
36-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0" />
37-
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
38-
<PackageReference Include="System.ComponentModel.Composition" Version="9.0.6" />
39-
<PackageReference Include="System.ComponentModel.Composition.Registration" Version="9.0.6" />
30+
<PackageReference Include="Avalonia" Version="11.3.2"/>
31+
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.3.0"/>
32+
<PackageReference Include="Capnp.Net.Runtime" Version="1.3.118"/>
33+
<!-- <PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.3.118" />-->
34+
<PackageReference Include="Amethyst.Contract" Version="2.0.0"/>
35+
<PackageReference Include="FluentAvaloniaUI" Version="2.4.0"/>
36+
<PackageReference Include="FluentAvaloniaUI" Version="2.4.0"/>
37+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0"/>
38+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
39+
<PackageReference Include="System.ComponentModel.Composition" Version="9.0.6"/>
40+
<PackageReference Include="System.ComponentModel.Composition.Registration" Version="9.0.6"/>
4041
</ItemGroup>
4142

4243
<ItemGroup Condition="'$(TargetFramework)'=='net8.0-windows'">
43-
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.4188" />
44-
</ItemGroup>
45-
46-
<!--TODO REMOVE THIS AND USE NUGET-->
47-
<ItemGroup>
48-
<Reference Include="Amethyst.Contract">
49-
<HintPath>..\..\..\Amethyst.Contract\bin\x64\Debug\net8.0\Amethyst.Contract.dll</HintPath>
50-
</Reference>
44+
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.4188"/>
5145
</ItemGroup>
5246

5347
<ItemGroup>
@@ -59,6 +53,30 @@
5953
</Compile>
6054
</ItemGroup>
6155

56+
<ItemGroup Condition="Exists('..\out\build\linux-x64-release\driver_Amethyst\Pack')">
57+
<Content Include="..\out\build\linux-x64-release\driver_Amethyst\Pack\**"
58+
CopyToOutputDirectory="PreserveNewest"
59+
CopyToPublishDirectory="PreserveNewest"
60+
Link="Driver\%(RecursiveDir)\%(Filename)%(Extension)"
61+
Visible="False"/>
62+
</ItemGroup>
63+
64+
<ItemGroup Condition="Exists('..\out\build\x64-release\driver_Amethyst\Pack')">
65+
<Content Include="..\out\build\x64-release\driver_Amethyst\Pack\**"
66+
CopyToOutputDirectory="PreserveNewest"
67+
CopyToPublishDirectory="PreserveNewest"
68+
Link="Driver\%(RecursiveDir)\%(Filename)%(Extension)"
69+
Visible="False"/>
70+
</ItemGroup>
71+
72+
<ItemGroup Condition="Exists('..\out\build\x64-release-nohooks\driver_Amethyst\Pack')">
73+
<Content Include="..\out\build\x64-release-nohooks\driver_Amethyst\Pack\**"
74+
CopyToOutputDirectory="PreserveNewest"
75+
CopyToPublishDirectory="PreserveNewest"
76+
Link="Driver\%(RecursiveDir)\%(Filename)%(Extension)"
77+
Visible="False"/>
78+
</ItemGroup>
79+
6280
<ItemGroup>
6381
<!-- Windows x64 -->
6482
<Content Include="..\vendor\openvr\bin\win64\openvr_api.dll" Link="openvr_api.dll"
@@ -125,6 +143,6 @@
125143
</ItemGroup>
126144

127145
<ItemGroup>
128-
<Folder Include="Assets\Resources\" />
146+
<Folder Include="Assets\Resources\"/>
129147
</ItemGroup>
130148
</Project>

0 commit comments

Comments
 (0)