Separate file because Gitea can't make services: conditional. Service is reached by name on the job network; POSTGRES_* env is passed to the test step. Co-Authored-By: Claude Opus 5.5 <[email protected]>
68 lines
2.5 KiB
Markdown
68 lines
2.5 KiB
Markdown
# 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
|
|
|
|
```yaml
|
|
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` |
|
|
| `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.
|
|
|
|
```yaml
|
|
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.
|