Skip to content
Latchkey

Create Release Version PR workflow (yeoman/yo)

The Create Release Version PR workflow from yeoman/yo, explained and optimized by Latchkey.

C

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.

Grade your own workflow free or run it on Latchkey →
Source: yeoman/yo.github/workflows/release-version-pr.ymlLicense BSD-2-ClauseView source

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

workflow (.yml)
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

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