Skip to content

Quick Start

Get up and running with Go Gamma Actions in 5 minutes.

The Basics

Minimal CI Pipeline

name: CI

on: [push, pull_request]

permissions:
  contents: read
  security-events: write

jobs:
  ci:
    uses: go-gamma/actions/.github/workflows/ci.yml@v1
    permissions:
      contents: read
      security-events: write
    with:
      go-version: '1.24'

This single workflow gives you:

Phase What Runs
Test go test -race -shuffle=on -coverprofile=coverage.out ./...
Lint golangci-lint run with 50+ linters
Security gosec and govulncheck
Build go build ./... on Linux, macOS, Windows

Execution Flow

flowchart TB
    subgraph parallel["Parallel Execution"]
        test["TEST<br/>(ubuntu)"]
        lint["LINT<br/>(ubuntu)"]
        security["SECURITY<br/>(ubuntu)"]
    end

    subgraph sequential["Sequential"]
        build["BUILD<br/>(matrix)<br/>linux / mac / windows"]
    end

    test --> build
    lint --> build
    security --> build

Common Configurations

With Codecov

jobs:
  ci:
    uses: go-gamma/actions/.github/workflows/ci.yml@v1
    with:
      go-version: '1.24'
      upload-coverage: true
    secrets:
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

With Security Scanning

permissions:
  contents: read
  security-events: write

jobs:
  ci:
    uses: go-gamma/actions/.github/workflows/ci.yml@v1
    permissions:
      contents: read
      security-events: write
    with:
      go-version: '1.24'
      upload-sarif: true
      fail-on-vulns: true

Skip Phases

jobs:
  ci:
    uses: go-gamma/actions/.github/workflows/ci.yml@v1
    with:
      go-version: '1.24'
      skip-security: true  # Skip for feature branches
      skip-build: true     # Skip for library repos

PR Optimization

Only report new lint issues on pull requests:

jobs:
  ci:
    uses: go-gamma/actions/.github/workflows/ci.yml@v1
    with:
      go-version: '1.24'
      only-new-issues: ${{ github.event_name == 'pull_request' }}

Adding Releases

Create .github/workflows/release.yml:

name: Release

on:
  push:
    tags:
      - 'v*.*.*'

permissions:
  contents: write

jobs:
  release:
    uses: go-gamma/actions/.github/workflows/release.yml@v1
    permissions:
      contents: write
    with:
      go-version: '1.24'
      generate-changelog: true
      update-godoc: true

Then create a release:

git tag v1.0.0
git push origin v1.0.0

What's Next?