Create Release Version PR workflow (yeoman/yo)
The Create Release Version PR workflow from yeoman/yo, explained and optimized by Latchkey.
CI health: C - fair
Point runs-on at Latchkey and get caching, job timeouts, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the Create Release Version PR workflow from the yeoman/yo repository, a real project running GitHub Actions. It is shown here with attribution under its BSD-2-Clause license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: Create Release Version PR
on:
workflow_dispatch:
inputs:
release_type:
description: 'Version bump type'
required: true
default: patch
type: choice
options:
- patch
- minor
- major
permissions:
contents: write
pull-requests: write
jobs:
create-release-pr:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '24'
- name: Bump package version
id: bump
run: |
old_version=$(node -p "require('./package.json').version")
npm version "${{ github.event.inputs.release_type }}" --no-git-tag-version
new_version=$(node -p "require('./package.json').version")
echo "old_version=$old_version" >> "$GITHUB_OUTPUT"
echo "new_version=$new_version" >> "$GITHUB_OUTPUT"
- name: Create pull request
uses: peter-evans/create-pull-request@v8
with:
branch: chore/release-v${{ steps.bump.outputs.new_version }}
commit-message: 'chore(release): bump version to v${{ steps.bump.outputs.new_version }}'
title: 'chore(release): bump version to v${{ steps.bump.outputs.new_version }}'
body: |
Automated release version bump.
- Previous version: `${{ steps.bump.outputs.old_version }}`
- New version: `${{ steps.bump.outputs.new_version }}`
- Bump type: `${{ github.event.inputs.release_type }}`
labels: release
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: Create Release Version PR on: workflow_dispatch: inputs: release_type: description: 'Version bump type' required: true default: patch type: choice options: - patch - minor - major permissions: contents: write pull-requests: write jobs: create-release-pr: timeout-minutes: 30 runs-on: latchkey-small steps: - name: Checkout uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: cache: 'npm' node-version: '24' - name: Bump package version id: bump run: | old_version=$(node -p "require('./package.json').version") npm version "${{ github.event.inputs.release_type }}" --no-git-tag-version new_version=$(node -p "require('./package.json').version") echo "old_version=$old_version" >> "$GITHUB_OUTPUT" echo "new_version=$new_version" >> "$GITHUB_OUTPUT" - name: Create pull request uses: peter-evans/create-pull-request@v8 with: branch: chore/release-v${{ steps.bump.outputs.new_version }} commit-message: 'chore(release): bump version to v${{ steps.bump.outputs.new_version }}' title: 'chore(release): bump version to v${{ steps.bump.outputs.new_version }}' body: | Automated release version bump. - Previous version: `${{ steps.bump.outputs.old_version }}` - New version: `${{ steps.bump.outputs.new_version }}` - Bump type: `${{ github.event.inputs.release_type }}` labels: release
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Cache dependency installs on the setup step so they are served from cache.
- 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.