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:
version: ${{ needs.versioning.outputs.version }}
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. Optionally clones extra repositories into the build context. | version (required), solution-name, configuration, dotnet-restore-args, dotnet-build-args, extra-repos |
| App Build Rust | Format check, clippy lint, fetch and build a Rust project. | version (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. Optionally clones extra repositories into the Docker build context. | registry (required), tag (required), tag-major (required), tag-minor (required), platform, dockerfile, push-image, extra-repos |
| 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. | tag (required), image-registry (required), image-repository (required), manifest-paths (required), namespace (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@v5"]
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@v2"]
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