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.
84 lines
3.5 KiB
Markdown
84 lines
3.5 KiB
Markdown
# 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`, and `minimal`
|
||
- 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
|
||
|
||
```yaml
|
||
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
|
||
|
||
1. **Checkout code** β Pulls the code from your repo.
|
||
2. **Set up Go** β Installs and configures the specified Go version.
|
||
3. **Download dependencies** β Runs `go mod tidy` to sync modules.
|
||
4. **Run tests** β Executes unit tests with JSON and coverage output.
|
||
5. **Build** β Builds all packages (`library`) or compiles an app binary (`application`).
|
||
6. **Generate image tag** β Creates a Docker tag based on branch/tag/ref.
|
||
7. **Login to registry** β Authenticates with your container registry.
|
||
8. **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.β_ |