Publish workflow (mergestat/mergestat-lite)
The Publish workflow from mergestat/mergestat-lite, explained and optimized by Latchkey.
CI health: C - fair
Run this on Latchkey for self-healing, caching, and up to 58% lower cost.
Grade your own workflow free or run it on Latchkey →What it does
This is the Publish workflow from the mergestat/mergestat-lite repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: Publish
on:
push:
tags:
- 'v*'
jobs:
publish:
name: Publish for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
asset_name: mergestat-linux-amd64
# - os: windows-latest
# asset_name: mergestat-windows-amd64
- os: macos-latest
asset_name: mergestat-macos-amd64
steps:
- name: Set up Go 1.19
uses: actions/setup-go@v5
with:
go-version: 1.19.4
id: go
- name: Check out source
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install libgit2
run: make libgit2
- name: Build
run: make
- name: Compress
run: tar -czvf mergestat.tar.gz -C .build/ .
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: mergestat.tar.gz
asset_name: ${{ matrix.asset_name }}.tar.gz
tag: ${{ github.ref }}
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: Publish on: push: tags: - 'v*' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: publish: timeout-minutes: 30 name: Publish for ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest asset_name: mergestat-linux-amd64 # - os: windows-latest # asset_name: mergestat-windows-amd64 - os: macos-latest asset_name: mergestat-macos-amd64 steps: - name: Set up Go 1.19 uses: actions/setup-go@v5 with: go-version: 1.19.4 id: go - name: Check out source uses: actions/checkout@v4 with: submodules: recursive - name: Install libgit2 run: make libgit2 - name: Build run: make - name: Compress run: tar -czvf mergestat.tar.gz -C .build/ . - name: Upload binaries to release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: mergestat.tar.gz asset_name: ${{ matrix.asset_name }}.tar.gz tag: ${{ github.ref }}
What changed
- Cancel superseded runs when a branch or PR gets a newer push.
- Add a job timeout so a hung step cannot burn hours of runner time.
1 third-party action is referenced by a movable tag. Pin it to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.