Introduce a composite action for Go projects supporting multiple workflows: protected branches, minimal CI, and tagged releases. Includes automated tests, builds (library/application), and optional Docker image publishing. Detailed documentation provided for seamless integration.
3.5 KiB
3.5 KiB
Go CI/CD Composite Action
A reusable GitHub Action for Go projects, forged to handle various CI/CD scenarios like a true warrior of code. Supports protected branches, tagged releases, and minimal development flows β with optional Docker image publishing for applications.
π§ Features
- Multiple workflow modes:
protected
,tag
, andminimal
- Go version configuration
- Automatic test execution with code coverage
- Build support for both libraries and applications
- Conditional Docker image creation and publishing
- Composable and easy to integrate in any Go project
π₯ Inputs
Input Name | Description | Required | Default |
---|---|---|---|
workflow-type |
Type of CI/CD flow (protected , minimal , tag ) |
Yes | protected |
go-version |
Go version to install and use | No | 1.24 |
build-type |
Type of build (application , library ) |
No | application |
container-registry |
Container registry URL (used if publishing Docker image) | Yes | β |
publish-docker |
Whether to build and push Docker image (true / false ) |
No | true |
βοΈ Workflow Types
- protected: Full CI/CD pipeline for mainline branches. Runs tests, builds the binary, and optionally publishes a Docker image.
- minimal: Lean setup for pull requests or early development. Runs tests and builds only.
- tag: Triggered on Git tags. Behaves like
protected
, ideal for versioned releases.
π How to Use
name: Go CI/CD Pipeline
on: [push, pull_request, workflow_dispatch]
jobs:
go-ci:
runs-on: ubuntu-latest
steps:
- uses: your-org/go-ci-action@v1
with:
workflow-type: 'protected'
go-version: '1.24'
build-type: 'application'
container-registry: ghcr.io/your-org
publish-docker: 'true'
Replace your-org/go-ci-action and ghcr.io/your-org with your actual repository and registry.
π οΈ Step Breakdown
- Checkout code β Pulls the code from your repo.
- Set up Go β Installs and configures the specified Go version.
- Download dependencies β Runs
go mod tidy
to sync modules. - Run tests β Executes unit tests with JSON and coverage output.
- Build β Builds all packages (
library
) or compiles an app binary (application
). - Generate image tag β Creates a Docker tag based on branch/tag/ref.
- Login to registry β Authenticates with your container registry.
- Build & push image β Pushes the image if
publish-docker
is enabled.
π Requirements
You must configure these in your environment for the action to work correctly:
Environment Variables
DEPLOYER_USERNAME
: Your Docker registry username
Secrets
DEPLOYER_TOKEN
: Your Docker registry password or access token
π§ Best Practices
- Use
minimal
for development and PRs to save resources. - Use
tag
for releases to generate versioned images. - Disable
publish-docker
when working on Go libraries or services not meant to be containerized.
Crafted with reusability, clarity, and precision in mind. May your builds be swift and your tests ever green.
βWe donβt just build software β we forge legacy.β