Files
VRCX/.github/workflows/github_actions.yml
2026-02-11 17:52:53 +13:00

382 lines
16 KiB
YAML

name: VRCX
on:
- workflow_dispatch
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
permissions:
id-token: write
contents: write
jobs:
set_version:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
date: ${{ steps.version.outputs.date }}
steps:
- uses: actions/checkout@v5
- id: version
run: |
export FILENAME="$(cat Version)"
export DATE="$(cat Version)"
echo "version=${FILENAME}" >> $GITHUB_OUTPUT
echo "date=${DATE}" >> $GITHUB_OUTPUT
build_dotnet_windows:
runs-on: windows-latest
defaults:
run:
shell: bash
needs: [set_version, build_node]
steps:
- uses: actions/checkout@v5
- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'
- name: Set version
run: |
echo "${{ needs.set_version.outputs.version }}" > Version
echo "!define PRODUCT_VERSION_FROM_FILE \"${{ needs.set_version.outputs.date }}.0\"" > Installer/version_define.nsh
cat Version
- uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/Dotnet/VRCX-Cef.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build Cef .NET Application
run: dotnet build Dotnet/VRCX-Cef.csproj -p:Configuration=Release -p:WarningLevel=0 -p:Platform=x64 -p:PlatformTarget=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m -a x64 --self-contained
- name: Check if we want to sign
id: check_sign
run: |
echo "sign=${{ secrets.AZURE_CLIENT_ID != '' }}" >> $GITHUB_OUTPUT
- name: Azure login
if: steps.check_sign.outputs.sign == 'true'
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Sign Dotnet executables
if: steps.check_sign.outputs.sign == 'true'
uses: azure/trusted-signing-action@v0
with:
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
endpoint: https://eus.codesigning.azure.net/
trusted-signing-account-name: ${{ secrets.AZURE_ACCOUNT_NAME }}
certificate-profile-name: ${{ secrets.AZURE_PROFILE_NAME }}
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
files: |
${{ github.workspace }}\build\Cef\CefSharp.BrowserSubprocess.Core.dll
${{ github.workspace }}\build\Cef\CefSharp.Core.dll
${{ github.workspace }}\build\Cef\CefSharp.Core.Runtime.dll
${{ github.workspace }}\build\Cef\CefSharp.dll
${{ github.workspace }}\build\Cef\CefSharp.OffScreen.dll
${{ github.workspace }}\build\Cef\CefSharp.WinForms.dll
${{ github.workspace }}\build\Cef\DiscordRPC.dll
${{ github.workspace }}\build\Cef\libcef.dll
${{ github.workspace }}\build\Cef\libEGL.dll
${{ github.workspace }}\build\Cef\libGLESv2.dll
${{ github.workspace }}\build\Cef\librsync.net.dll
${{ github.workspace }}\build\Cef\VRCX.dll
${{ github.workspace }}\build\Cef\VRCX.exe
- name: Download Cef-html artifacts
uses: actions/download-artifact@v6
with:
name: Cef-html
path: build/Cef/html
- name: Install NSIS
run: choco install nsis -y
- name: Create NSIS installer
uses: joncloud/makensis-action@v4
with:
script-file: Installer/installer.nsi
additional-plugin-paths: Installer/Plugins
- name: Rename setup
run: |
file_name="VRCX_${{ needs.set_version.outputs.version }}_Setup.exe"
echo "Setup FileName: ${file_name}"
mv Installer/VRCX_Setup.exe $file_name
- name: Sign Cef setup
uses: azure/trusted-signing-action@v0
if: steps.check_sign.outputs.sign == 'true'
with:
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
endpoint: https://eus.codesigning.azure.net/
trusted-signing-account-name: ${{ secrets.AZURE_ACCOUNT_NAME }}
certificate-profile-name: ${{ secrets.AZURE_PROFILE_NAME }}
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256
files: |
${{ github.workspace }}\VRCX_${{ needs.set_version.outputs.version }}_Setup.exe
- name: Upload Cef dotnet artifacts
uses: actions/upload-artifact@v5
with:
name: Cef-Release
path: build/Cef
- name: Upload setup artifact
uses: actions/upload-artifact@v5
with:
name: Cef-Setup
path: VRCX_${{ needs.set_version.outputs.version }}_Setup.exe
build_dotnet_linux:
runs-on: ubuntu-latest
needs: set_version
steps:
- uses: actions/checkout@v5
- name: Setup .NET 9
uses: actions/setup-dotnet@v5
with:
dotnet-version: '9.0.x'
- name: Set version
run: |
echo "${{ needs.set_version.outputs.version }}" > Version
cat Version
- uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/Dotnet/VRCX-Electron.csproj') }}-${{ hashFiles('**/Dotnet/VRCX-Electron-arm64.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build Electron x64 .NET Application
run: dotnet build 'Dotnet/VRCX-Electron.csproj' -p:Configuration=Release -p:WarningLevel=0 -p:Platform=x64 -p:PlatformTarget=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m -a x64
- name: Upload Electron x64 dotnet artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-Release-Linux-x64
path: build/Electron
- name: Cleanup
run: |
rm -R build/Electron
- name: Build Electron arm64 .NET Application
run: dotnet build 'Dotnet/VRCX-Electron-arm64.csproj' -p:Configuration=Release -p:WarningLevel=0 -p:Platform=arm64 -p:PlatformTarget=arm64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m -a arm64
- name: Upload Electron arm64 dotnet artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-Release-Linux-arm64
path: build/Electron
build_dotnet_macos:
runs-on: macos-latest
needs: set_version
steps:
- uses: actions/checkout@v5
- name: Setup .NET 9
uses: actions/setup-dotnet@v5
with:
dotnet-version: '9.0.x'
- name: Set version
run: |
echo "${{ needs.set_version.outputs.version }}" > Version
cat Version
- uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/Dotnet/VRCX-Electron.csproj') }}-${{ hashFiles('**/Dotnet/VRCX-Electron-arm64.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build Electron x64 .NET Application
run: dotnet build 'Dotnet/VRCX-Electron.csproj' -p:Configuration=Release -p:WarningLevel=0 -p:Platform=x64 -p:PlatformTarget=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m -a x64
- name: Upload Electron x64 .NET artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-Release-macOS-x64
path: build/Electron
- name: Cleanup
run: |
rm -R build/Electron
- name: Build Electron arm64 .NET Application
run: dotnet build 'Dotnet/VRCX-Electron-arm64.csproj' -p:Configuration=Release -p:WarningLevel=0 -p:Platform=arm64 -p:PlatformTarget=arm64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m -a arm64
- name: Upload Electron arm64 dotnet artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-Release-macOS-arm64
path: build/Electron
build_node:
runs-on: ubuntu-latest
needs: [set_version, build_dotnet_linux]
steps:
- uses: actions/checkout@v5
- name: Set version
run: |
echo "${{ needs.set_version.outputs.version }}" > Version
cat Version
- name: Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Get npm cache directory
id: npm-cache-dir
shell: bash
run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT}
- uses: actions/cache@v4
id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true'
with:
path: ${{ steps.npm-cache-dir.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Restore dependencies
run: npm ci
- name: Build Cef-html
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SentryAuthToken }}
run: npm run prod
- name: Upload Cef-html artifacts
uses: actions/upload-artifact@v5
with:
name: Cef-html
path: build/html
- name: Build Electron-html
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SentryAuthToken }}
run: npm run prod-linux
- name: Download Electron x64 dotnet artifacts
uses: actions/download-artifact@v6
with:
name: Electron-Release-Linux-x64
path: build/Electron
- name: Build x64 AppImage
run: npm run build-electron
- name: Upload Electron x64 AppImage artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-AppImage-x64
path: 'build/VRCX_${{ needs.set_version.outputs.version }}_x64.AppImage'
- name: Download Electron arm64 dotnet artifacts
uses: actions/download-artifact@v6
with:
name: Electron-Release-Linux-arm64
path: build/Electron
- name: Build arm64 AppImage
run: npm run build-electron-arm64
- name: Upload Electron arm64 AppImage artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-AppImage-arm64
path: 'build/VRCX_${{ needs.set_version.outputs.version }}_arm64.AppImage'
build_macos:
runs-on: macos-latest
needs: [set_version, build_dotnet_macos]
steps:
- uses: actions/checkout@v5
- name: Set version
run: |
echo "${{ needs.set_version.outputs.version }}" > Version
cat Version
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Get npm cache directory
id: npm-cache-dir
shell: bash
run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT}
- uses: actions/cache@v4
id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true'
with:
path: ${{ steps.npm-cache-dir.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Restore dependencies
run: npm ci
- name: Build Electron-html
run: npm run prod-linux --arch=x64
- name: Download x64 Electron dotnet artifacts
uses: actions/download-artifact@v6
with:
name: Electron-Release-macOS-x64
path: build/Electron
- name: Build x64 macOS .dmg
run: npm run build-electron
- name: Upload x64 Electron macOS artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-MacDmg-x64
path: 'build/VRCX_${{ needs.set_version.outputs.version }}_x64.dmg'
- name: Cleanup
run: |
rm -R build/Electron
- name: Build Electron-html
run: npm run prod-linux --arch=arm64
- name: Download arm64 Electron dotnet artifacts
uses: actions/download-artifact@v6
with:
name: Electron-Release-macOS-arm64
path: build/Electron
- name: Build arm64 macOS .dmg
run: npm run build-electron-arm64
- name: Upload arm64 Electron macOS artifacts
uses: actions/upload-artifact@v5
with:
name: Electron-MacDmg-arm64
path: 'build/VRCX_${{ needs.set_version.outputs.version }}_arm64.dmg'
create_setup:
runs-on: ubuntu-latest
needs:
[
set_version,
build_dotnet_windows,
build_dotnet_linux,
build_dotnet_macos,
build_node,
build_macos
]
steps:
- name: Download Cef-Setup artifacts
uses: actions/download-artifact@v6
with:
name: Cef-Setup
- name: Download Cef dotnet artifacts
uses: actions/download-artifact@v6
with:
name: Cef-Release
path: build/Cef
- name: Download Cef-html artifacts
uses: actions/download-artifact@v6
with:
name: Cef-html
path: build/Cef/html
- name: Make zip
run: |
file_name="VRCX_${{ needs.set_version.outputs.version }}.zip"
cd build/Cef
7z a -tzip ${file_name} * -mx=7 -xr0!*.log
mv ${file_name} ../../${file_name}
echo "Zip FileName: ${file_name}"
- name: Upload Zip artifact
uses: actions/upload-artifact@v5
with:
name: VRCX-Zip
path: 'VRCX_${{ needs.set_version.outputs.version }}.zip'