name: VRCX on: - workflow_dispatch concurrency: group: ${{ github.ref }} cancel-in-progress: true jobs: set_version: runs-on: ubuntu-latest outputs: version: ${{ steps.version.outputs.version }} date: ${{ steps.version.outputs.date }} steps: - uses: actions/checkout@v4 - 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 needs: set_version steps: - uses: actions/checkout@v4 - name: Setup .NET 9 uses: actions/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Set version run: | echo "${{ needs.set_version.outputs.version }}" > Version cat Version - 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: Upload Cef dotnet artifacts uses: actions/upload-artifact@v4 with: name: Cef-Release path: build/Cef build_dotnet_linux: runs-on: ubuntu-latest needs: set_version steps: - uses: actions/checkout@v4 - name: Setup .NET 9 uses: actions/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Set version run: | echo "${{ needs.set_version.outputs.version }}" > Version cat Version - 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@v4 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@v4 with: name: Electron-Release-Linux-arm64 path: build/Electron build_dotnet_macos: runs-on: macos-latest needs: set_version steps: - uses: actions/checkout@v4 - name: Setup .NET 9 uses: actions/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Set version run: | echo "${{ needs.set_version.outputs.version }}" > Version cat Version - 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@v4 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@v4 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@v4 - 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: 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@v4 with: name: Cef-html path: build/html - name: Build Electron-html run: npm run prod-linux - name: Download Electron x64 dotnet artifacts uses: actions/download-artifact@v4 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@v4 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@v4 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@v4 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@v4 - 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: Restore dependencies run: npm ci --arch=x64 - name: Build Electron-html run: npm run prod-linux --arch=x64 - name: Download x64 Electron dotnet artifacts uses: actions/download-artifact@v4 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@v4 with: name: Electron-MacDmg-x64 path: 'build/VRCX_${{ needs.set_version.outputs.version }}_x64.dmg' - name: Cleanup run: | rm -R build/Electron - name: Restore dependencies run: npm ci --arch=arm64 - name: Build Electron-html run: npm run prod-linux --arch=arm64 - name: Download arm64 Electron dotnet artifacts uses: actions/download-artifact@v4 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@v4 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: - uses: actions/checkout@v4 - name: Set version run: | echo "!define PRODUCT_VERSION_FROM_FILE \"${{ needs.set_version.outputs.date }}.0\"" > Installer/version_define.nsh - name: Install 7-zip and makensis run: sudo apt update && sudo apt install -y p7zip-full nsis nsis-pluginapi - name: Set plugin permissions run: sudo chown -R $(whoami) /usr/share/nsis/Plugins/ - name: Download Cef dotnet artifacts uses: actions/download-artifact@v4 with: name: Cef-Release path: build/Cef - name: Download Cef-html artifacts uses: actions/download-artifact@v4 with: name: Cef-html path: build/Cef/html - 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: 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 Setup artifact uses: actions/upload-artifact@v4 with: name: VRCX-Setup path: 'VRCX_${{ needs.set_version.outputs.version }}_Setup.exe' - name: Upload Zip artifact uses: actions/upload-artifact@v4 with: name: VRCX-Zip path: 'VRCX_${{ needs.set_version.outputs.version }}.zip'