Skip to content
Latchkey

releasebuild workflow (goodwithtech/dockle)

The releasebuild workflow from goodwithtech/dockle, explained and optimized by Latchkey.

C

CI health: C - fair

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

Grade your own workflow free or run it on Latchkey →
Source: goodwithtech/dockle.github/workflows/releasebuild.ymlLicense Apache-2.0View source

What it does

This is the releasebuild workflow from the goodwithtech/dockle 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)
on:
  push:
    branches:
      - 'master'
    tags:
      - 'v*'
  pull_request:

permissions:
  contents: write
  packages: write

jobs:
  build-and-release:
    runs-on: ubuntu-latest
    env:
      DOCKER_CLI_EXPERIMENTAL: "enabled"
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
        with:
          fetch-depth: 0
      - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0
        with:
          go-version-file: 'go.mod'
      - run: |
          go test ./...
        env:
          CGO_ENABLED: 0
      - name: Login to docker.io registry
        uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Login to ghcr.io registry
        uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
        with:
          registry: ghcr.io
          username: goodwithtech
          password: ${{ secrets.GH_PAT }}
      -
        name: Run GoReleaser
        if: success() && startsWith(github.ref, 'refs/tags/v')
        uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a # v6.4.0
        with:
          distribution: goreleaser
          version: "~> v2"
          args: release --clean
        env:
          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
      -
        name: Clear
        if: always() && startsWith(github.ref, 'refs/tags/v')
        run: |
          rm -f ${HOME}/.docker/config.json

The same workflow, on Latchkey

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

on:
  push:
    branches:
      - 'master'
    tags:
      - 'v*'
  pull_request:
 
permissions:
  contents: write
  packages: write
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  build-and-release:
    timeout-minutes: 30
    runs-on: latchkey-small
    env:
      DOCKER_CLI_EXPERIMENTAL: "enabled"
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
        with:
          fetch-depth: 0
      - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0
        with:
          go-version-file: 'go.mod'
      - run: |
          go test ./...
        env:
          CGO_ENABLED: 0
      - name: Login to docker.io registry
        uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Login to ghcr.io registry
        uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
        with:
          registry: ghcr.io
          username: goodwithtech
          password: ${{ secrets.GH_PAT }}
      -
        name: Run GoReleaser
        if: success() && startsWith(github.ref, 'refs/tags/v')
        uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a # v6.4.0
        with:
          distribution: goreleaser
          version: "~> v2"
          args: release --clean
        env:
          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
      -
        name: Clear
        if: always() && startsWith(github.ref, 'refs/tags/v')
        run: |
          rm -f ${HOME}/.docker/config.json
 

What changed

This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow