mirror of
https://github.com/clockworklabs/SpacetimeDB.git
synced 2026-05-14 03:37:55 -04:00
3395b1e905
# Description of Changes Changes with cache hit: CI / Smoketests (spacetimedb-runner): 17m -> 10m CI / Smoketests (windows-latest): 39m -> 31m CI / Lints: 3m30s -> 2m unity-testsuite: 23m -> 19m This included creating a stripped-down `Dockerfile` that only runs SpacetimeDB (as opposed to e.g. building tracy, flamegraphs, etc.). That shaves off about 4-5m on the linux smoketests job. # API and ABI breaking changes No. CI only. # Expected complexity level and risk 2 # Testing Ran existing CI and noted the change in times in the description above --------- Signed-off-by: Zeke Foppa <196249+bfops@users.noreply.github.com> Co-authored-by: Zeke Foppa <bfops@users.noreply.github.com> Co-authored-by: John Detter <4099508+jdetter@users.noreply.github.com>
177 lines
6.9 KiB
YAML
177 lines
6.9 KiB
YAML
name: C#/Unity - Test Suite
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || format('sha-{0}', github.sha) }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
unity-testsuite:
|
|
runs-on: spacetimedb-new-runner
|
|
container:
|
|
image: localhost:5000/spacetimedb-ci:latest
|
|
options: >-
|
|
--privileged
|
|
--cgroupns=host
|
|
# Cancel any previous testsuites running on the same PR and/or ref.
|
|
concurrency:
|
|
group: unity-test-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
timeout-minutes: 30
|
|
env:
|
|
CARGO_TARGET_DIR: ${{ github.workspace }}/target
|
|
steps:
|
|
- name: Checkout repository
|
|
id: checkout-stdb
|
|
uses: actions/checkout@v4
|
|
|
|
# Run cheap .NET tests first. If those fail, no need to run expensive Unity tests.
|
|
|
|
- name: Setup dotnet
|
|
uses: actions/setup-dotnet@v3
|
|
with:
|
|
global-json-file: global.json
|
|
|
|
- name: Override NuGet packages
|
|
run: |
|
|
dotnet pack crates/bindings-csharp/BSATN.Runtime
|
|
dotnet pack crates/bindings-csharp/Runtime
|
|
|
|
# Write out the nuget config file to `nuget.config`. This causes the spacetimedb-csharp-sdk repository
|
|
# to be aware of the local versions of the `bindings-csharp` packages in SpacetimeDB, and use them if
|
|
# available. Otherwise, `spacetimedb-csharp-sdk` will use the NuGet versions of the packages.
|
|
# This means that (if version numbers match) we will test the local versions of the C# packages, even
|
|
# if they're not pushed to NuGet.
|
|
# See https://learn.microsoft.com/en-us/nuget/reference/nuget-config-file for more info on the config file.
|
|
cd sdks/csharp
|
|
./tools~/write-nuget-config.sh ../..
|
|
|
|
- name: Run .NET tests
|
|
working-directory: sdks/csharp
|
|
run: dotnet test -warnaserror
|
|
|
|
- name: Verify C# formatting
|
|
working-directory: sdks/csharp
|
|
run: dotnet format --no-restore --verify-no-changes SpacetimeDB.ClientSDK.sln
|
|
|
|
# Now, setup the Unity tests.
|
|
|
|
- name: Patch spacetimedb dependency in Cargo.toml
|
|
working-directory: demo/Blackholio/server-rust
|
|
run: |
|
|
sed -i "s|spacetimedb *=.*|spacetimedb = \{ path = \"../../../crates/bindings\" \}|" Cargo.toml
|
|
cat Cargo.toml
|
|
|
|
- name: Install Rust toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Cache Rust dependencies
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
workspaces: ${{ github.workspace }}
|
|
shared-key: spacetimedb
|
|
# Let the main CI job save the cache since it builds the most things
|
|
save-if: false
|
|
|
|
- name: Install SpacetimeDB CLI from the local checkout
|
|
run: |
|
|
cargo install --force --path crates/cli --locked --message-format=short
|
|
cargo install --force --path crates/standalone --locked --message-format=short
|
|
# Add a handy alias using the old binary name, so that we don't have to rewrite all scripts (incl. in submodules).
|
|
ln -sf $CARGO_HOME/bin/spacetimedb-cli $CARGO_HOME/bin/spacetime
|
|
|
|
- name: Check quickstart-chat bindings are up to date
|
|
working-directory: sdks/csharp
|
|
run: |
|
|
bash tools~/gen-quickstart.sh
|
|
"${GITHUB_WORKSPACE}"/tools/check-diff.sh examples~/quickstart-chat || {
|
|
echo 'Error: quickstart-chat bindings have changed. Please run `sdks/csharp/tools~/gen-quickstart.sh`.'
|
|
exit 1
|
|
}
|
|
|
|
- name: Check client-api bindings are up to date
|
|
working-directory: sdks/csharp
|
|
run: |
|
|
bash tools~/gen-client-api.sh
|
|
"${GITHUB_WORKSPACE}"/tools/check-diff.sh src/SpacetimeDB/ClientApi || {
|
|
echo 'Error: Client API bindings are dirty. Please run `sdks/csharp/tools~/gen-client-api.sh`.'
|
|
exit 1
|
|
}
|
|
|
|
- name: Generate client bindings
|
|
working-directory: demo/Blackholio/server-rust
|
|
run: bash ./generate.sh -y
|
|
|
|
- name: Check for changes
|
|
run: |
|
|
tools/check-diff.sh demo/Blackholio/client-unity/Assets/Scripts/autogen || {
|
|
echo 'Error: Bindings are dirty. Please run `demo/Blackholio/server-rust/generate.sh`.'
|
|
exit 1
|
|
}
|
|
|
|
- name: Check Unity meta files
|
|
uses: DeNA/unity-meta-check@v3
|
|
with:
|
|
enable_pr_comment: ${{ github.event_name == 'pull_request' }}
|
|
target_path: sdks/csharp
|
|
env:
|
|
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
|
|
|
- name: Start SpacetimeDB
|
|
run: |
|
|
spacetime start &
|
|
disown
|
|
|
|
- name: Run regression tests
|
|
run: |
|
|
bash sdks/csharp/tools~/run-regression-tests.sh
|
|
tools/check-diff.sh sdks/csharp/examples~/regression-tests || {
|
|
echo 'Error: Bindings are dirty. Please run `sdks/csharp/tools~/gen-regression-tests.sh`.'
|
|
exit 1
|
|
}
|
|
|
|
- name: Publish unity-tests module to SpacetimeDB
|
|
working-directory: demo/Blackholio/server-rust
|
|
run: |
|
|
spacetime logout && spacetime login --server-issued-login local
|
|
bash ./publish.sh
|
|
|
|
- name: Patch com.clockworklabs.spacetimedbsdk dependency in manifest.json
|
|
working-directory: demo/Blackholio/client-unity/Packages
|
|
run: |
|
|
# Replace the com.clockworklabs.spacetimedbsdk dependency with the current branch.
|
|
# Note: Pointing to a local directory does not work, because our earlier steps nuke our meta files, which then causes Unity to not properly respect the DLLs (e.g.
|
|
# codegen does not work properly).
|
|
yq e -i '.dependencies["com.clockworklabs.spacetimedbsdk"] = "https://github.com/clockworklabs/SpacetimeDB.git?path=sdks/csharp#${{ github.head_ref }}"' manifest.json
|
|
cat manifest.json
|
|
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: demo/Blackholio/client-unity/Library
|
|
key: Unity-${{ github.head_ref }}
|
|
restore-keys: Unity-
|
|
|
|
# We need this to support "Docker in Docker"
|
|
- name: Start Docker daemon
|
|
run: /usr/local/bin/start-docker.sh
|
|
- name: Run Unity tests
|
|
uses: game-ci/unity-test-runner@v4
|
|
with:
|
|
unityVersion: 2022.3.32f1 # Adjust Unity version to a valid tag
|
|
projectPath: demo/Blackholio/client-unity # Path to the Unity project subdirectory
|
|
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
|
testMode: playmode
|
|
useHostNetwork: true
|
|
env:
|
|
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
|
|
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
|
|
UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }}
|
|
# Skip if this is an external contribution.
|
|
# The license secrets will be empty, so the step would fail anyway.
|
|
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork }}
|