Update pack and compare npm actions.

This commit is contained in:
2026-01-01 17:55:09 -08:00
parent 4276c65a6c
commit 815c4696d6
10 changed files with 269 additions and 7 deletions

View File

@@ -0,0 +1,101 @@
name: npm-pack-and-compare
description: "Build and pack an NPM package into a .tgz file."
inputs:
name:
description: "The name of the package."
required: true
workingDirectory:
description: "Working directory containing package.json."
required: false
default: "."
nodeVersion:
description: "Node.js version to use."
required: false
default: "20"
buildScript:
description: "Build script to run before packing (e.g., 'build' for 'npm run build'). Set to empty string to skip build step."
required: false
default: "build"
defaultVersion:
description: "Version of the package."
required: true
default: "1.0.0"
outputDirectory:
description: "Directory for the output .tgz."
required: true
default: "out"
registry:
description: "NPM registry URL."
required: false
default: ${{ github.server_url }}/api/packages/${{ github.repository_owner }}/nuget/index.json
authToken:
description: "Authentication token for the registry."
required: true
skipCompare:
description: "Skip in-depth comparison."
required: true
default: "false"
outputs:
tgz:
description: "The generated output .tgz file."
value: ${{ steps.package.outputs.tgz }}
tgzName:
description: "The generated output .tgz file's name."
value: ${{ steps.package.outputs.tgzName }}
hasChanged:
description: "Whether or not the package files match."
value: ${{ !steps.npm.outputs.latestVersion || inputs.skipCompare == 'true' || steps.compare.outputs.hasDifferences == 'true' }}
runs:
using: "composite"
steps:
- name: "Get the next version of the package."
uses: act/common/npm/npm-get-next-branched-version@master
id: npm
with:
name: ${{ inputs.name }}
defaultVersion: ${{ inputs.defaultVersion }}
registry: ${{ inputs.registry }}
authToken: ${{ inputs.authToken }}
- name: "Pack with latest version for comparison"
if: ${{ steps.npm.outputs.latestVersion && inputs.skipCompare == 'false' }}
id: pack_comparison
uses: act/common/npm/npm-pack@master
with:
version: ${{ steps.npm.outputs.latestVersion }}
workingDirectory: ${{ inputs.workingDirectory }}
nodeVersion: ${{ inputs.nodeVersion }}
buildScript: ${{ inputs.buildScript }}
outputDirectory: ${{ inputs.outputDirectory }}/comparison
registry: ${{ inputs.registry }}
- name: "Compare to remote package"
if: ${{ steps.npm.outputs.latestVersion && inputs.skipCompare == 'false' }}
id: compare
uses: act/common/npm/npm-diff@master
with:
name: ${{ inputs.name }}
lhsVersion: ${{ steps.npm.outputs.latestVersion }}
rhsVersion: ${{ steps.npm.outputs.latestVersion }}
workingDirectory: ${{ inputs.workingDirectory }}
registry: ${{ inputs.registry }}
authToken: ${{ inputs.authToken }}
failOnDifferences: "false"
- name: "Pack with next version"
if: ${{ !steps.npm.outputs.latestVersion || inputs.skipCompare == 'true' || steps.compare.outputs.hasDifferences == 'true' }}
id: pack_final
uses: act/common/npm/npm-pack@master
with:
version: ${{ steps.npm.outputs.nextVersion }}
workingDirectory: ${{ inputs.workingDirectory }}
nodeVersion: ${{ inputs.nodeVersion }}
buildScript: ${{ inputs.buildScript }}
outputDirectory: ${{ inputs.outputDirectory }}
registry: ${{ inputs.registry }}
skipInstall: ${{ steps.pack_comparison.conclusion != '' }}
- name: "Generate package outputs"
id: package
run: |
TGZ_NAME="${{ inputs.name }}-${{ steps.npm.outputs.nextVersion }}.tgz"
TGZ_PATH="${{ inputs.outputDirectory }}/$TGZ_NAME"
echo "tgz=$TGZ_PATH" >> "$GITHUB_OUTPUT"
echo "tgzName=$TGZ_NAME" >> "$GITHUB_OUTPUT"
shell: bash