Skip to content
Latchkey

Publish to npm and GitHub Packages workflow (rohitg00/kubectl-mcp-server)

The Publish to npm and GitHub Packages workflow from rohitg00/kubectl-mcp-server, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get caching, 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: rohitg00/kubectl-mcp-server.github/workflows/publish-to-npm.ymlLicense MITView source

What it does

This is the Publish to npm and GitHub Packages workflow from the rohitg00/kubectl-mcp-server 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: Publish to npm and GitHub Packages

on:
  release:
    types: [published]

jobs:
  publish-npm:
    runs-on: ubuntu-latest
    environment: npm
    permissions:
      contents: read
      id-token: write
    steps:
    - uses: actions/checkout@v4

    - name: Set up Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '20'
        registry-url: 'https://registry.npmjs.org'

    - name: Update package version from release tag
      run: |
        VERSION=${GITHUB_REF_NAME#v}
        npm version $VERSION --no-git-tag-version --allow-same-version

    - name: Check if version exists
      id: check
      run: |
        VERSION=${GITHUB_REF_NAME#v}
        if npm view kubectl-mcp-server@$VERSION version 2>/dev/null; then
          echo "exists=true" >> $GITHUB_OUTPUT
          echo "Version $VERSION already exists on npm, skipping publish"
        else
          echo "exists=false" >> $GITHUB_OUTPUT
          echo "Version $VERSION not found, will publish"
        fi

    - name: Publish to npm
      if: steps.check.outputs.exists != 'true'
      run: npm publish --provenance --access public
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

  publish-github-packages:
    runs-on: ubuntu-latest
    needs: publish-npm
    permissions:
      contents: read
      packages: write
    steps:
    - uses: actions/checkout@v4

    - name: Set up Node.js for GitHub Packages
      uses: actions/setup-node@v4
      with:
        node-version: '20'
        registry-url: 'https://npm.pkg.github.com'
        scope: '@rohitg00'

    - name: Update package version from release tag
      run: |
        VERSION=${GITHUB_REF_NAME#v}
        npm version $VERSION --no-git-tag-version --allow-same-version

    - name: Publish to GitHub Packages
      run: |
        # Update package.json for GitHub Packages
        node -e "
          const fs = require('fs');
          const pkg = require('./package.json');
          pkg.name = '@rohitg00/kubectl-mcp-server';
          pkg.publishConfig = { registry: 'https://npm.pkg.github.com' };
          fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2));
        "
        npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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: Publish to npm and GitHub Packages
 
on:
  release:
    types: [published]
 
jobs:
  publish-npm:
    timeout-minutes: 30
    runs-on: latchkey-small
    environment: npm
    permissions:
      contents: read
      id-token: write
    steps:
    - uses: actions/checkout@v4
 
    - name: Set up Node.js
      uses: actions/setup-node@v4
      with:
        cache: 'npm'
        node-version: '20'
        registry-url: 'https://registry.npmjs.org'
 
    - name: Update package version from release tag
      run: |
        VERSION=${GITHUB_REF_NAME#v}
        npm version $VERSION --no-git-tag-version --allow-same-version
 
    - name: Check if version exists
      id: check
      run: |
        VERSION=${GITHUB_REF_NAME#v}
        if npm view kubectl-mcp-server@$VERSION version 2>/dev/null; then
          echo "exists=true" >> $GITHUB_OUTPUT
          echo "Version $VERSION already exists on npm, skipping publish"
        else
          echo "exists=false" >> $GITHUB_OUTPUT
          echo "Version $VERSION not found, will publish"
        fi
 
    - name: Publish to npm
      if: steps.check.outputs.exists != 'true'
      run: npm publish --provenance --access public
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
 
  publish-github-packages:
    timeout-minutes: 30
    runs-on: latchkey-small
    needs: publish-npm
    permissions:
      contents: read
      packages: write
    steps:
    - uses: actions/checkout@v4
 
    - name: Set up Node.js for GitHub Packages
      uses: actions/setup-node@v4
      with:
        cache: 'npm'
        node-version: '20'
        registry-url: 'https://npm.pkg.github.com'
        scope: '@rohitg00'
 
    - name: Update package version from release tag
      run: |
        VERSION=${GITHUB_REF_NAME#v}
        npm version $VERSION --no-git-tag-version --allow-same-version
 
    - name: Publish to GitHub Packages
      run: |
        # Update package.json for GitHub Packages
        node -e "
          const fs = require('fs');
          const pkg = require('./package.json');
          pkg.name = '@rohitg00/kubectl-mcp-server';
          pkg.publishConfig = { registry: 'https://npm.pkg.github.com' };
          fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2));
        "
        npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 

What changed

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

Actions used in this workflow