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]>
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 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.