name: .NET Test on: [push] jobs: dotnet-test: runs-on: ubuntu-latest env: DOTNET_CLI_TELEMETRY_OPTOUT: 1 DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Detect & build/test shell: bash run: | set -euo pipefail has_solution=false if find . -maxdepth 2 \( -name '*.sln' -o -name '*.csproj' \) | grep -q .; then has_solution=true fi if $has_solution; then echo "Detected .NET project; restoring/building/testing..." dotnet restore dotnet build --no-restore -c Release # Run tests if any project appears to be a test project if find . \( -name '*Tests.csproj' -o -name '*.csproj' \) -exec grep -l 'true' {} + | grep -q .; then dotnet test --no-build -c Release --verbosity normal else echo "No test projects found; build succeeded, skipping tests." fi else echo "No .NET project found; creating a tiny solution for a smoke test." dotnet new sln -n HelloCI dotnet new console -o src/App -n App dotnet new xunit -o tests/App.Tests -n App.Tests dotnet sln HelloCI.sln add src/App/App.csproj tests/App.Tests/App.Tests.csproj dotnet add tests/App.Tests/App.Tests.csproj reference src/App/App.csproj mkdir -p tests/App.Tests printf '%s\n' \ 'using Xunit;' \ 'namespace App.Tests;' \ 'public class UnitTest1' \ '{' \ ' [Fact] public void Adds() => Assert.Equal(4, 2+2);' \ '}' > tests/App.Tests/UnitTest1.cs dotnet restore dotnet build -c Release dotnet test -c Release --no-build --verbosity normal fi