GitHub Actions
Die offizielle Action bochmann-software/codeguard@v1 ist der schnellste
Weg CodeGuard in einen GitHub-Workflow zu bauen. Sie kümmert sich um den
CLI-Download, das Caching und das Veröffentlichen der Findings als
PR-Annotations.
Minimal-Setup
.github/workflows/codeguard.yml:
name: CodeGuard
on:
pull_request:
push:
branches: [main]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- uses: bochmann-software/codeguard@v1
with:
solution: Acme.Web.sln
api-key: ${{ secrets.CODEGUARD_API_KEY }}
Fertig. Findings tauchen automatisch im PR als Inline-Annotations auf.
API-Key beschaffen
- Im Portal unter API Keys einen Key erzeugen.
- Im GitHub-Repo unter
Settings → Secrets → ActionsalsCODEGUARD_API_KEYhinterlegen.
Die Action liest den Key, authentifiziert gegen das Portal und pullt die zur Action-Version passende CLI.
Inputs
| Input | Default | Beschreibung |
|---|---|---|
api-key |
: | Pflicht. API-Key aus dem Portal. |
solution |
erste .sln |
Welche Solution analysiert wird. |
fail-on |
error |
Schwelle für Build-Fehler (info, warn, error, never). |
rules |
.codeguard/ |
Pfad zur Regelmenge. |
version |
latest |
Welche CLI-Version. Empfehlung: pinnen. |
format |
github |
Output-Format (siehe Output-Formate). |
sarif-output |
: | Wenn gesetzt, wird zusätzlich SARIF in diese Datei geschrieben. |
cache |
true |
CodeGuard-Cache zwischen CI-Runs persistieren. |
Outputs
| Output | Beschreibung |
|---|---|
findings-total |
Gesamtzahl Findings |
findings-error |
Anzahl error-Findings |
findings-warn |
Anzahl warn-Findings |
findings-info |
Anzahl info-Findings |
sarif-path |
Pfad zur SARIF-Datei, falls erzeugt |
Vollbild: SARIF + Code Scanning
Wenn ihr die Findings im Security-Tab eures GitHub-Repos sehen wollt:
- uses: bochmann-software/codeguard@v1
id: codeguard
with:
solution: Acme.Web.sln
api-key: ${{ secrets.CODEGUARD_API_KEY }}
sarif-output: codeguard.sarif
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: codeguard.sarif
if: always() damit das SARIF auch hochgeladen wird wenn die Action
Findings hatte und Exit-Code 1 zurückgegeben hat.
Matrix-Builds
Wenn eure Solution auf mehreren OS gebaut wird, aber CodeGuard deterministisch ist, läuft die Analyse nur einmal:
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- run: dotnet build
codeguard:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- uses: bochmann-software/codeguard@v1
with:
api-key: ${{ secrets.CODEGUARD_API_KEY }}
Self-Hosted Runner
Funktioniert ohne Anpassungen, solange der Runner Internet-Zugriff auf
codeguard.bochmann-software.com hat. Wenn nicht: das CLI-Binary einmal
manuell auf den Runner kopieren und mit version: local arbeiten.
Versions-Pinning
Empfehlung: die Action auf eine konkrete Minor-Version pinnen und selten upgraden.
- uses: bochmann-software/codeguard@v1 # Major-pinning, kriegt v1.x.y Updates
- uses: bochmann-software/[email protected] # Minor-pinning, statisch
- uses: bochmann-software/codeguard@<sha> # SHA-pinning, am konservativsten
Wir folgen SemVer (siehe Versionierung) und brechen innerhalb einer Major-Version keine Verträge.
Caching
Die Action cached automatisch zwei Dinge:
- Das CLI-Binary zwischen Workflow-Runs (per Action-Version-Hash).
- Den CodeGuard-Analyse-Cache (per
.codeguard/-Hash und Source-Files-Hash).
Auf einer mittleren Solution ist ein warmer Run typisch in 5-15 Sekunden durch.
Manuell deaktivieren wenn ihr unerklärliche Cache-Effekte debuggt:
- uses: bochmann-software/codeguard@v1
with:
cache: 'false'
api-key: ${{ secrets.CODEGUARD_API_KEY }}
Wenn keine PR-Annotations auftauchen
GitHub zeigt Annotations nur auf Pull-Requests, nicht auf direkten
push-Runs. Achte darauf dass der Workflow auf pull_request triggert.
Permissions
Standardmäßig braucht die Action contents: read. Wenn ihr SARIF
hochladet zusätzlich security-events: write.
permissions:
contents: read
security-events: write