Skip to content
Latchkey

Prepare Release workflow (tailwindlabs/heroicons)

The Prepare Release workflow from tailwindlabs/heroicons, explained and optimized by Latchkey.

F

CI health: F - at risk

Point runs-on at Latchkey and get caching, 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: tailwindlabs/heroicons.github/workflows/prepare-release.ymlLicense MITView source

What it does

This is the Prepare Release workflow from the tailwindlabs/heroicons 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

workflow (.yml)
name: Prepare Release

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

env:
  CI: true

permissions:
  contents: read

jobs:
  build:
    permissions:
      contents: write # for softprops/action-gh-release to create GitHub release

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18]

    steps:
      - uses: actions/checkout@v3

      - run: git fetch --tags -f

      - name: Resolve version
        id: vars
        run: |
          echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV

      - name: Get release notes
        run: |
          RELEASE_NOTES=$(npm run release-notes --silent)
          echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
          echo "$RELEASE_NOTES" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          registry-url: 'https://registry.npmjs.org'

      - name: Release
        uses: softprops/action-gh-release@v1
        with:
          draft: true
          tag_name: ${{ env.TAG_NAME }}
          body: |
            ${{ env.RELEASE_NOTES }}

The same workflow, on Latchkey

Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.

name: Prepare Release
 
on:
  workflow_dispatch:
  push:
    tags:
      - 'v*'
 
env:
  CI: true
 
permissions:
  contents: read
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  build:
    timeout-minutes: 30
    permissions:
      contents: write # for softprops/action-gh-release to create GitHub release
 
    runs-on: latchkey-small
 
    strategy:
      matrix:
        node-version: [18]
 
    steps:
      - uses: actions/checkout@v3
 
      - run: git fetch --tags -f
 
      - name: Resolve version
        id: vars
        run: |
          echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
 
      - name: Get release notes
        run: |
          RELEASE_NOTES=$(npm run release-notes --silent)
          echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
          echo "$RELEASE_NOTES" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV
 
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          cache: 'npm'
          node-version: ${{ matrix.node-version }}
          registry-url: 'https://registry.npmjs.org'
 
      - name: Release
        uses: softprops/action-gh-release@v1
        with:
          draft: true
          tag_name: ${{ env.TAG_NAME }}
          body: |
            ${{ env.RELEASE_NOTES }}
 

What changed

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.

Actions used in this workflow