Skip to content
Latchkey

Test workflow (spf13/cobra)

The Test workflow from spf13/cobra, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get run de-duplication, job timeouts, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: spf13/cobra.github/workflows/test.ymlLicense Apache-2.0View source

What it does

This is the Test workflow from the spf13/cobra repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: Test

on:
  push:
  pull_request:
  workflow_dispatch:

env:
  GO111MODULE: on

permissions:
  contents: read

jobs:


  lic-headers:
    runs-on: ubuntu-latest
    steps:

      - uses: actions/checkout@v4

      - run: >-
          docker run
          -v $(pwd):/wrk -w /wrk
          ghcr.io/google/addlicense
          -c 'The Cobra Authors'
          -y '2013-2023'
          -l apache
          -ignore '.github/**'
          -check
          .


  golangci-lint:
    permissions:
      contents: read  # for actions/checkout to fetch code
      pull-requests: read  # for golangci/golangci-lint-action to fetch pull requests
    runs-on: ubuntu-latest
    steps:

      - uses: actions/checkout@v4

      - uses: actions/setup-go@v6
        with:
          go-version: '^1.22'
          check-latest: true
          cache: true

      - uses: golangci/golangci-lint-action@v8.0.0
        with:
          version: latest
          args: --verbose


  test-unix:
    strategy:
      fail-fast: false
      matrix:
        platform:
        - ubuntu
        - macOS
        go:
        - 17
        - 18
        - 19
        - 20
        - 21
        - 22
        - 23
        - 24
    name: '${{ matrix.platform }} | 1.${{ matrix.go }}.x'
    runs-on: ${{ matrix.platform }}-latest
    steps:

    - uses: actions/checkout@v4

    - uses: actions/setup-go@v6
      with:
        go-version: 1.${{ matrix.go }}.x
        cache: true

    - run: |
        export GOBIN=$HOME/go/bin
        go install github.com/kyoh86/richgo@latest
        go install github.com/mitchellh/gox@latest

    - run: RICHGO_FORCE_COLOR=1 PATH=$HOME/go/bin/:$PATH make richtest


  test-win:
    name: MINGW64
    defaults:
      run:
        shell: msys2 {0}
    runs-on: windows-latest
    steps:

    - shell: bash
      run: git config --global core.autocrlf input

    - uses: msys2/setup-msys2@v2
      with:
        msystem: MINGW64
        update: true
        install: >
          git
          make
          unzip
          mingw-w64-x86_64-go

    - uses: actions/checkout@v4

    - uses: actions/cache@v4
      with:
        path: ~/go/pkg/mod
        key: ${{ runner.os }}-${{ matrix.go }}-${{ hashFiles('**/go.sum') }}
        restore-keys: ${{ runner.os }}-${{ matrix.go }}-

    - run: |
        export GOBIN=$HOME/go/bin
        go install github.com/kyoh86/richgo@latest
        go install github.com/mitchellh/gox@latest

    - run: RICHGO_FORCE_COLOR=1 PATH=$HOME/go/bin:$PATH make richtest

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

name: Test
 
on:
  push:
  pull_request:
  workflow_dispatch:
 
env:
  GO111MODULE: on
 
permissions:
  contents: read
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
 
 
  lic-headers:
    timeout-minutes: 30
    runs-on: latchkey-small
    steps:
 
      - uses: actions/checkout@v4
 
      - run: >-
          docker run
          -v $(pwd):/wrk -w /wrk
          ghcr.io/google/addlicense
          -c 'The Cobra Authors'
          -y '2013-2023'
          -l apache
          -ignore '.github/**'
          -check
          .
 
 
  golangci-lint:
    timeout-minutes: 30
    permissions:
      contents: read  # for actions/checkout to fetch code
      pull-requests: read  # for golangci/golangci-lint-action to fetch pull requests
    runs-on: latchkey-small
    steps:
 
      - uses: actions/checkout@v4
 
      - uses: actions/setup-go@v6
        with:
          go-version: '^1.22'
          check-latest: true
          cache: true
 
      - uses: golangci/golangci-lint-action@v8.0.0
        with:
          version: latest
          args: --verbose
 
 
  test-unix:
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        platform:
        - ubuntu
        - macOS
        go:
        - 17
        - 18
        - 19
        - 20
        - 21
        - 22
        - 23
        - 24
    name: '${{ matrix.platform }} | 1.${{ matrix.go }}.x'
    runs-on: ${{ matrix.platform }}-latest
    steps:
 
    - uses: actions/checkout@v4
 
    - uses: actions/setup-go@v6
      with:
        go-version: 1.${{ matrix.go }}.x
        cache: true
 
    - run: |
        export GOBIN=$HOME/go/bin
        go install github.com/kyoh86/richgo@latest
        go install github.com/mitchellh/gox@latest
 
    - run: RICHGO_FORCE_COLOR=1 PATH=$HOME/go/bin/:$PATH make richtest
 
 
  test-win:
    timeout-minutes: 30
    name: MINGW64
    defaults:
      run:
        shell: msys2 {0}
    runs-on: windows-latest
    steps:
 
    - shell: bash
      run: git config --global core.autocrlf input
 
    - uses: msys2/setup-msys2@v2
      with:
        msystem: MINGW64
        update: true
        install: >
          git
          make
          unzip
          mingw-w64-x86_64-go
 
    - uses: actions/checkout@v4
 
    - uses: actions/cache@v4
      with:
        path: ~/go/pkg/mod
        key: ${{ runner.os }}-${{ matrix.go }}-${{ hashFiles('**/go.sum') }}
        restore-keys: ${{ runner.os }}-${{ matrix.go }}-
 
    - run: |
        export GOBIN=$HOME/go/bin
        go install github.com/kyoh86/richgo@latest
        go install github.com/mitchellh/gox@latest
 
    - run: RICHGO_FORCE_COLOR=1 PATH=$HOME/go/bin:$PATH make richtest
 

What changed

2 third-party actions are referenced by a movable tag. Pin them to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

This workflow runs 4 jobs (19 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow