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: | git_hash=$(git rev-parse --short "$GITHUB_SHA") export FILENAME="$(date '+%Y-%m-%dT%H.%M')-${git_hash}" export DATE="$(date '+%Y.%m.%d')" 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:Platform=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m --self-contained - name: Build Cef .NET Application run: dotnet build DBMerger\DBMerger.csproj -p:Configuration=Release -p:Platform=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m --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 .NET Application run: dotnet build 'Dotnet/VRCX-Electron.csproj' -p:Configuration=Release -p:Platform=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m --self-contained - name: Upload Electron dotnet artifacts uses: actions/upload-artifact@v4 with: name: Electron-Release-Linux 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 .NET Application run: dotnet build 'Dotnet/VRCX-Electron.csproj' -p:Configuration=Release -p:Platform=x64 -p:RestorePackagesConfig=true -t:"Restore;Clean;Build" -m -a x64 --self-contained - name: Upload Electron dotnet artifacts uses: actions/upload-artifact@v4 with: name: Electron-Release-macOS 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 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 dotnet artifacts uses: actions/download-artifact@v4 with: name: Electron-Release-Linux path: build/Electron - name: Build AppImage run: npm run build-electron - name: Upload Electron AppImage artifacts uses: actions/upload-artifact@v4 with: name: Electron-AppImage path: "build/VRCX_${{ needs.set_version.outputs.version }}.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 Electron dotnet artifacts uses: actions/download-artifact@v4 with: name: Electron-Release-macOS path: build/Electron - name: Build macOS .dmg run: npm run build-electron - name: Upload Electron macOS artifacts uses: actions/upload-artifact@v4 with: name: Electron-MacDmg path: 'build/VRCX_${{ needs.set_version.outputs.version }}.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'