Files
dotnet-build-test/README.md
T
UltimateCoderandClaude Opus 5.5 67b6a24726 fix: let warnaserror "false" disable -warnaserror
Even as a string input, act_runner delivers the value as
'%!t(string=false)', so an exact comparison never matches.
Match case-insensitively on the substring "false" instead.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 22:34:41 +02:00

2.5 KiB

dotnet-build-test

Reusable Gitea Actions workflow: dotnet restore → build → test, with no Docker. Meant as a PR gate, for example so Renovate can automerge.

Usage

on:
  pull_request:

jobs:
  build-test:
    uses: templates/dotnet-build-test/.gitea/workflows/dotnet-build-test.yaml@v1
    with:
      solution: MyApp.slnx
      # dotnet-version: 10.0.x
      # configuration: Release
      # warnaserror: true
      # working-directory: .
      # test-filter: "Category!=Integration"

Inputs

Name Default Description
solution "" Solution/project file, relative to working-directory. If empty, dotnet uses the single sln/proj in that directory.
dotnet-version 10.0.x .NET SDK version
configuration Release Build configuration
warnaserror "true" Pass -warnaserror to dotnet build unless the value contains false
working-directory . Where dotnet commands run
test-filter "" Optional dotnet test --filter expression

No secrets.

Variant with PostgreSQL

dotnet-build-test-postgres.yaml runs the same steps as above, plus a PostgreSQL service container for integration tests. It has its own file because Gitea can't make services: conditional.

jobs:
  build-test:
    uses: templates/dotnet-build-test/.gitea/workflows/dotnet-build-test-postgres.yaml@v1
    with:
      solution: MyApp.slnx
      postgres-user: myapp
      postgres-password: myapp
      # postgres-image: postgres:17-alpine
      # postgres-db: ""   # empty = same as postgres-user

It takes all inputs of dotnet-build-test.yaml, plus these:

Name Default Description
postgres-image postgres:17-alpine Service image
postgres-user postgres Superuser, so it can create and drop databases
postgres-password postgres Throwaway CI password, not a secret
postgres-db "" Database created at start. Empty means the same as postgres-user

The test step gets POSTGRES_HOST=postgres, POSTGRES_PORT=5432, POSTGRES_USER, POSTGRES_PASSWORD and POSTGRES_DB as environment variables. The job reaches the service by its name on the job network, which requires a container-mode runner. No host port is mapped. A step before the tests waits up to 60 s for the port to open.

No secrets.

Versioning

Only major tags (v1, v2, …). Fixes and new optional inputs move the existing tag. Changing or removing inputs, or changing behavior, needs a new major tag.