Repository navigation
Filter inactive connections from tracked player snapshots #35
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Test | |
| on: | |
| push: | |
| branches: [ master, develop ] | |
| pull_request: | |
| branches: [ master, develop ] | |
| workflow_dispatch: | |
| inputs: | |
| assembly_branch: | |
| description: "Assembly branch to use (main/master or beta)" | |
| required: false | |
| default: "main" | |
| type: choice | |
| options: | |
| - main | |
| - master | |
| - beta | |
| jobs: | |
| build-mono: | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout DedicatedServerMod | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: "8.0.x" | |
| - name: Determine Assembly Branch | |
| id: assembly-branch | |
| shell: bash | |
| run: | | |
| if [[ "${{ github.event_name }}" == "workflow_dispatch" ]] && [[ -n "${{ inputs.assembly_branch }}" ]]; then | |
| requested_branch="${{ inputs.assembly_branch }}" | |
| else | |
| requested_branch="master" | |
| fi | |
| case "$requested_branch" in | |
| main|master) | |
| resolved_branch="main" | |
| ;; | |
| beta) | |
| resolved_branch="beta" | |
| ;; | |
| *) | |
| echo "Unsupported assembly branch: $requested_branch" | |
| exit 1 | |
| ;; | |
| esac | |
| echo "branch=$resolved_branch" >> "$GITHUB_OUTPUT" | |
| echo "Using $resolved_branch assemblies (requested: $requested_branch)" | |
| - name: Create Assembly Directory Structure | |
| shell: bash | |
| run: | | |
| mkdir -p ScheduleOneAssemblies/Managed | |
| mkdir -p ScheduleOneAssemblies/MelonLoader | |
| - name: Restore Game Assemblies from Cache | |
| id: cache-assemblies | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: ScheduleOneAssemblies | |
| key: game-assemblies-v4-${{ steps.assembly-branch.outputs.branch }}-${{ hashFiles('DedicatedServerMod.csproj') }} | |
| restore-keys: | | |
| game-assemblies-v4-${{ steps.assembly-branch.outputs.branch }}- | |
| - name: Checkout Game Assemblies | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ${{ secrets.GAME_ASSEMBLIES_REPO }} | |
| token: ${{ secrets.GAME_ASSEMBLIES_TOKEN }} | |
| ref: ${{ steps.assembly-branch.outputs.branch }} | |
| path: game-assemblies | |
| fetch-depth: 1 | |
| if: steps.cache-assemblies.outputs.cache-hit != 'true' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) | |
| - name: Copy Game Assemblies | |
| shell: bash | |
| run: | | |
| if [ -d "game-assemblies/Managed" ]; then | |
| cp -r game-assemblies/Managed/* ScheduleOneAssemblies/Managed/ || echo "Failed to copy Mono assemblies" | |
| echo "Copied Mono assemblies" | |
| fi | |
| if [ -d "game-assemblies/MelonLoader" ]; then | |
| cp -r game-assemblies/MelonLoader/* ScheduleOneAssemblies/MelonLoader/ || echo "Failed to copy MelonLoader assemblies" | |
| echo "Copied MelonLoader assemblies" | |
| fi | |
| if: steps.cache-assemblies.outputs.cache-hit != 'true' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) | |
| - name: Check Assembly Files | |
| id: assembly-files | |
| shell: bash | |
| run: | | |
| ready=true | |
| if [ ! -f "ScheduleOneAssemblies/Managed/Assembly-CSharp.dll" ]; then | |
| echo "Missing Assembly-CSharp.dll" | |
| ready=false | |
| fi | |
| if [ ! -f "ScheduleOneAssemblies/MelonLoader/MelonLoader.dll" ]; then | |
| echo "Missing MelonLoader.dll" | |
| ready=false | |
| fi | |
| echo "ready=$ready" >> "$GITHUB_OUTPUT" | |
| - name: Verify Assemblies | |
| shell: bash | |
| run: | | |
| if [ -f "ScheduleOneAssemblies/Managed/Assembly-CSharp.dll" ]; then | |
| echo "Found Assembly-CSharp.dll" | |
| else | |
| echo "Missing Assembly-CSharp.dll" | |
| exit 1 | |
| fi | |
| if [ -f "ScheduleOneAssemblies/MelonLoader/MelonLoader.dll" ]; then | |
| echo "Found MelonLoader.dll" | |
| else | |
| echo "Missing MelonLoader.dll" | |
| exit 1 | |
| fi | |
| - name: Create CI Build Properties | |
| shell: bash | |
| run: | | |
| cat > ci.build.props << 'EOF' | |
| <Project> | |
| <PropertyGroup> | |
| <AutomateLocalDeployment>false</AutomateLocalDeployment> | |
| <MelonLoaderAssembliesPath>$(MSBuildThisFileDirectory)ScheduleOneAssemblies/MelonLoader</MelonLoaderAssembliesPath> | |
| <MonoAssembliesPath>$(MSBuildThisFileDirectory)ScheduleOneAssemblies/Managed</MonoAssembliesPath> | |
| </PropertyGroup> | |
| </Project> | |
| EOF | |
| - name: Restore Dependencies | |
| run: dotnet restore DedicatedServerMod.csproj | |
| - name: Build Mono Server | |
| run: dotnet build DedicatedServerMod.csproj --no-restore -c Mono_Server -v normal | |
| - name: Build Mono Client | |
| run: dotnet build DedicatedServerMod.csproj --no-restore -c Mono_Client -v normal | |
| - name: Upload Mono Server Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: DedicatedServerMod-Mono-Server | |
| path: bin/Mono_Server/netstandard2.1/*.dll | |
| - name: Upload Mono Client Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: DedicatedServerMod-Mono-Client | |
| path: bin/Mono_Client/netstandard2.1/*.dll | |
| - name: Save Game Assemblies to Cache | |
| uses: actions/cache/save@v4 | |
| if: always() && steps.cache-assemblies.outputs.cache-hit != 'true' && steps.assembly-files.outputs.ready == 'true' | |
| with: | |
| path: ScheduleOneAssemblies | |
| key: game-assemblies-v4-${{ steps.assembly-branch.outputs.branch }}-${{ hashFiles('DedicatedServerMod.csproj') }} | |
| summary: | |
| runs-on: ubuntu-latest | |
| needs: [build-mono] | |
| if: always() | |
| steps: | |
| - name: Build Summary | |
| run: | | |
| echo "=== Build Complete ===" | |
| echo "Mono Server: ${{ needs.build-mono.result }}" | |
| echo "Mono Client: ${{ needs.build-mono.result }}" |