UltimateCoderandClaude Opus 5.5 abae212813 fix: apply -warnaserror reliably
act_runner mangles boolean input defaults: format('{0}', inputs.warnaserror)
evaluated to '%!t(string=false)', so -warnaserror was never passed.
Input is now a string defaulting to "true"; anything but "false" enables it.
Build command is traced (set -x) so the log shows the flags used.

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

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 is "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.

S
Description
Reusable workflow: .NET restore, build and test (PR gate)
Readme
50 KiB
0 Stars 2 Watchers 0 Forks