A collection of reusable GitHub Actions workflows covering common CI/CD scenarios across public and private repositories. For background on reusable workflows see the official docs.
All reusable workflows are called via workflow_call and follow a consistent naming convention — the name: field is prefixed with _ (e.g. _app-build-dotnet) to distinguish them from standalone workflows.
Reference a workflow from any repository:
jobs:
build:
uses: f2calv/gha-workflows/.github/workflows/app-build-dotnet.yml@v1
with:
fullSemVer: ${{ needs.versioning.outputs.fullSemVer }}
solution-name: MySolution.slnx| Workflow | Description | Key Inputs |
|---|---|---|
| App Build .NET | Restore, workload restore, build a .NET solution/project. Installs .NET 8/9/10 SDKs. | fullSemVer (required), solution-name, configuration, dotnet-restore-args, dotnet-build-args |
| App Build Rust | Format check, clippy lint, fetch and build a Rust project. | fullSemVer (required) |
| Workflow | Description | Key Inputs |
|---|---|---|
| Container Image Build | Multi-architecture buildx build and push to a container registry (ghcr.io, ACR, Docker Hub). Tags with semver, major, minor and latest. | registry (required), tag (required), tag-major (required), tag-minor (required), platform, push-image |
| Helm Chart Package | Lint, package and push a Helm chart to an OCI registry. Helm version is sourced from .devcontainer/devcontainer.json. |
tag (required), image-registry (required), chart-registry (required), chart-repository (required), chart-path |
| GitOps Manifest Update | Update image tags in a GitOps repository via f2calv/gha-gitops-manifest-update. | registry (required), repository (required), tag (required), manifest (required), manifest-path (required) |
| Workflow | Description | Key Inputs |
|---|---|---|
| .NET Publish NuGet | Build, test, pack and push NuGet packages via f2calv/gha-dotnet-nuget. | configuration, execute-tests, push-preview |
| Workflow | Description | Key Inputs |
|---|---|---|
| Release Versioning | Determine a semantic version (via GitVersion), tag the repo and create a GitHub release. | semVer, tag-prefix, move-major-tag, tag-and-release |
| Workflow | Description | Key Inputs |
|---|---|---|
| Lint | Run pre-commit hooks against all files in the repository. | pre-commit-version |
Mermaid diagrams showing the action dependency chain for each workflow. Actions and workflows owned by f2calv are highlighted in blue.
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_app-build-dotnet"]) --> J["app-build-dotnet"]
J --> A1["actions/checkout@v6"]
J --> A2["actions/setup-dotnet@v5"]
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_app-build-rust"]) --> J["app-build-rust"]
J --> A1["actions/checkout@v6"]
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_container-image-build"]) --> J["container-image-build"]
J --> A1["actions/checkout@v6"]
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_helm-chart-package"]) --> J["helm-chart-package"]
J --> A1["actions/checkout@v6"]
J --> A2["azure/setup-helm@v4"]
J --> A3["helm/kind-action@v1"]
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_gha-gitops-manifest-update"]) --> J["gha-gitops-manifest-update"]
J --> A1["actions/checkout@v6"]
J --> A2["f2calv/gha-gitops-manifest-update@v1"]
class A2 f2calv
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_gha-release-versioning"]) --> J["gha-release-versioning"]
J --> A1["actions/checkout@v6"]
J --> A2["f2calv/gha-release-versioning@v1"]
class A2 f2calv
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_dotnet-publish-nuget"]) --> J1["versioning"]
W --> J2["build"]
W --> J3["release"]
J1 -- uses --> SW1[["_gha-release-versioning"]]
J2 -- needs --> J1
J2 --> A1["f2calv/gha-dotnet-nuget@v2"]
J3 -- needs --> J1
J3 -- needs --> J2
J3 -- uses --> SW2[["_gha-release-versioning"]]
class A1 f2calv
class SW1 f2calv
class SW2 f2calv
flowchart LR
classDef f2calv fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
W(["_lint"]) --> J["lint"]
J --> A1["actions/checkout@v6"]
These workflows depend on companion composite actions:
- f2calv/gha-release-versioning — Semantic versioning with GitVersion
- f2calv/gha-dotnet-nuget — .NET build, test, pack and NuGet push
- f2calv/gha-gitops-manifest-update — GitOps manifest image tag updates