Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 0 additions & 123 deletions .github/workflows/build-and-release.yml

This file was deleted.

78 changes: 78 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: ci

permissions:
contents: write
Comment on lines +3 to +4

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restrict write permission to the release job

Limit contents: write to a separate tag-only release job rather than granting it to the entire build job. For same-repository pull requests, this workflow checks out and executes the PR's MSBuild/workflow code with a write-capable GITHUB_TOKEN, so a contributor or compromised build step can use ${{ github.token }} to alter tags, releases, or repository contents even though only the final release command needs write access.

Useful? React with 👍 / 👎.


on:
pull_request:
push:
branches:
- main
- master
tags:
- "v*"

jobs:
build:
runs-on: ubuntu-latest

env:
RESONITE_INSTALL_DIR: ${{ github.workspace }}/Resonite

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x

- name: Verify tag matches project version
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: |
set -euo pipefail
version=$(grep -o '<Version>[^<]*</Version>' Directory.Build.props | sed -e 's/<Version>//' -e 's/<\/Version>//')
test "v${version}" = "${{ github.ref_name }}"

- name: Prepare fallback references
shell: bash
run: |
set -euo pipefail
mkdir -p "${RESONITE_INSTALL_DIR}/Libraries" "${RESONITE_INSTALL_DIR}/rml_libs"
curl -fsSL -o "${RESONITE_INSTALL_DIR}/Libraries/ResoniteModLoader.dll" \
https://github.com/resonite-modding-group/ResoniteModLoader/releases/latest/download/ResoniteModLoader.dll
curl -fsSL -o "${RESONITE_INSTALL_DIR}/rml_libs/0Harmony.dll" \
https://github.com/resonite-modding-group/ResoniteModLoader/releases/latest/download/0Harmony.dll

- name: Restore
run: dotnet restore ./ViveStreamingFaceTrackingForResonite.sln --locked-mode -p:ResonitePath="${{ env.RESONITE_INSTALL_DIR }}/"

- name: Build
run: dotnet build ./ViveStreamingFaceTrackingForResonite.sln -c Release --no-restore -p:ResonitePath="${{ env.RESONITE_INSTALL_DIR }}/"

- name: Test
run: dotnet test ./ViveStreamingFaceTrackingForResonite.sln -c Release --no-build -p:ResonitePath="${{ env.RESONITE_INSTALL_DIR }}/"

- name: Pack artifact
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: |
set -euo pipefail
mkdir -p artifacts
cp ./ViveStreamingFaceTrackingForResonite/bin/Release/ViveStreamingFaceTracking.dll ./artifacts/

- name: Upload artifact
if: startsWith(github.ref, 'refs/tags/v')
uses: actions/upload-artifact@v7
with:
name: ViveStreamingFaceTracking
path: artifacts/ViveStreamingFaceTracking.dll

- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/v')
env:
GITHUB_TOKEN: ${{ github.token }}
run: gh release create "${{ github.ref_name }}" ./artifacts/ViveStreamingFaceTracking.dll --verify-tag --generate-notes
27 changes: 0 additions & 27 deletions .github/workflows/static-check.yml

This file was deleted.

47 changes: 0 additions & 47 deletions .github/workflows/version.yml

This file was deleted.

22 changes: 19 additions & 3 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
<Copyright>Copyright (c) 2025 $(Authors)</Copyright>
<PackageTags>Resonite,Mod,ResoniteModLoader,Vive,FaceTracking</PackageTags>
<PackageReadmeFile>README.md</PackageReadmeFile>
<Version>1.0.0</Version>
<Version>1.1.0</Version>
</PropertyGroup>
<!-- Common Build Properties -->
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<Platforms>x64</Platforms>
Expand All @@ -36,6 +36,7 @@
<WarningsAsErrors />
<WarningsNotAsErrors>NU1701</WarningsNotAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
<!-- Configuration-specific properties -->
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
Expand Down Expand Up @@ -68,14 +69,18 @@
<PropertyGroup>
<ResonitePath>$([MSBuild]::EnsureTrailingSlash('$(ResonitePath)'))</ResonitePath>
</PropertyGroup>
<PropertyGroup>
<FrooxEnginePresent Condition="Exists('$([System.IO.Path]::Combine($(ResonitePath), `FrooxEngine.dll`))')">true</FrooxEnginePresent>
<FrooxEnginePresent Condition="'$(FrooxEnginePresent)'==''">false</FrooxEnginePresent>
</PropertyGroup>
<!-- Derived Resonite Paths -->
<PropertyGroup>
<ResoniteModsPath>$([System.IO.Path]::Combine('$(ResonitePath)', 'rml_mods'))</ResoniteModsPath>
<ResoniteHotReloadPath>$([System.IO.Path]::Combine('$(ResonitePath)', 'rml_mods', 'HotReloadMods'))</ResoniteHotReloadPath>
<ResoniteLibsPath>$([System.IO.Path]::Combine('$(ResonitePath)', 'rml_libs'))</ResoniteLibsPath>
</PropertyGroup>
<!-- Common Resonite References -->
<ItemGroup>
<ItemGroup Condition="'$(FrooxEnginePresent)'=='true'">
<!-- Core Resonite Mod Dependencies -->
<Reference Include="ResoniteModLoader">
<HintPath>$([System.IO.Path]::Combine('$(ResonitePath)', 'Libraries', 'ResoniteModLoader.dll'))</HintPath>
Expand Down Expand Up @@ -105,6 +110,17 @@
<Private>$(IsTestProject)</Private>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(FrooxEnginePresent)'!='true'">
<PackageReference Include="Resonite.GameLibs" />

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the locked dependency graph independent of local files

Avoid conditionally removing this package based on whether a local Resonite installation contains FrooxEngine.dll. The committed lock file records Resonite.GameLibs as a direct dependency, but on the normal development path where Resonite is installed this condition evaluates false; dotnet restore --locked-mode then rejects the mismatched graph, while an ordinary restore rewrites the tracked lock file. This makes the newly enabled package lock nonportable between CI's fallback environment and developers' installed-game environment.

Useful? React with 👍 / 👎.

<Reference Include="ResoniteModLoader">
<HintPath>$([System.IO.Path]::Combine('$(ResonitePath)', 'Libraries', 'ResoniteModLoader.dll'))</HintPath>
<Private>$(IsTestProject)</Private>
</Reference>
<Reference Include="HarmonyLib">
<HintPath>$([System.IO.Path]::Combine('$(ResoniteLibsPath)', '0Harmony.dll'))</HintPath>
<Private>$(IsTestProject)</Private>
</Reference>
</ItemGroup>
<!-- Common Items -->
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory).github\**\*" LinkBase=".github" />
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.0" />
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.0" />
<PackageVersion Include="System.Collections.Immutable" Version="9.0.0" />
<PackageVersion Include="Resonite.GameLibs" Version="2026.8.27.1094" />
</ItemGroup>
</Project>
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ Adding facial tracking to Resonite for HMD using Vive Hub such as Vive Focus 3,
## Installation

1. Install the [ResoniteModLoader](https://github.com/resonite-modding-group/ResoniteModLoader).
2. Place the [ViveStreamingFaceTracking.dll](https://github.com/esnya/EsnyaResoniteModTemplate/releases/latest/download/ViveStreamingFaceTracking.dll) into your `rml_mods` folder. This folder should be located at `C:\Program Files (x86)\Steam\steamapps\common\Resonite\rml_mods` for a standard installation. You can create it if it's missing, or if you start the game once with the ResoniteModLoader installed, it will create this folder for you.
3. Place 3 dlls from [ViveStreamingFaceTrackingModule/Libs](./ViveStreamingFaceTrackingModule/Libs) into your Resonite folder. This folder should be located at `C:\Program Files (x86)\Steam\steamapps\common\Resonite` for a standard installation.
2. Place the [ViveStreamingFaceTracking.dll](https://github.com/esnya/ViveStreamingFaceTrackingForResonite/releases/latest/download/ViveStreamingFaceTracking.dll) into your `rml_mods` folder. This folder should be located at `C:\Program Files (x86)\Steam\steamapps\common\Resonite\rml_mods` for a standard installation. You can create it if it's missing, or if you start the game once with the ResoniteModLoader installed, it will create this folder for you.
3. Download the latest [ViveStreamingFaceTrackingModule release](https://github.com/ViveSoftware/ViveStreamingFaceTrackingModule/releases/latest) and place the three DLLs from its `Libs` directory into your Resonite folder (normally `C:\Program Files (x86)\Steam\steamapps\common\Resonite`).
4. Launch the game. If you want to check that the mod is working, you can check your Resonite logs.

Version 1.1.0 is built against Resonite `2026.8.27.1094`.


## Development Requirements

Expand Down
Loading