Skip to content

4.2.0

4.2.0 #8

Workflow file for this run

name: Release
on:
release:
types: [ published ]
permissions:
contents: write
packages: write
jobs:
publish:
name: Publish to NPM
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: main
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'npm'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Run tests before publishing
run: npm test
- name: Run linting before publishing
run: npm run lint
- name: Check formatting before publishing
run: npm run format:check
- name: Verify package.json
run: |
echo "📦 Package details:"
echo " Name: $(npm pkg get name)"
echo " Version: $(npm pkg get version)"
echo " Description: $(npm pkg get description)"
echo " Main: $(npm pkg get main)"
echo " Bin: $(npm pkg get bin)"
echo " Files: $(npm pkg get files)"
echo " Repository: $(npm pkg get repository)"
- name: Test CLI functionality
run: |
echo "🧪 Testing CLI functionality..."
npm start -- --help
npm start -- --version
echo "✅ CLI tests passed"
- name: Publish to NPM
run: |
echo "📦 Publishing to NPM..."
# Get the version from the release tag
# GITHUB_REF format: refs/tags/v2.3.0
VERSION=${GITHUB_REF##*/} # Remove everything up to the last /
VERSION=${VERSION#v} # Remove the 'v' prefix if present
echo "📋 Publishing version: $VERSION"
echo "📋 Original GITHUB_REF: $GITHUB_REF"
# Check if version update is needed
CURRENT_VERSION=$(npm pkg get version | tr -d '"')
echo "📋 Current package.json version: $CURRENT_VERSION"
if [ "$CURRENT_VERSION" != "$VERSION" ]; then
echo "📋 Updating version from $CURRENT_VERSION to $VERSION"
npm version $VERSION --no-git-tag-version
else
echo "📋 Version $VERSION already set in package.json - skipping version update"
fi
# Publish to NPM
npm publish --access public
echo "✅ Successfully published to NPM!"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Verify NPM publication
run: |
echo "🔍 Verifying NPM publication..."
PACKAGE_NAME=$(npm pkg get name | tr -d '"')
VERSION=${GITHUB_REF##*/} # Remove everything up to the last /
VERSION=${VERSION#v} # Remove the 'v' prefix if present
echo "📦 Published: $PACKAGE_NAME@$VERSION"
echo "🌐 NPM URL: https://www.npmjs.com/package/$PACKAGE_NAME"
# Wait a moment for NPM to process
sleep 10
# Verify the package exists on NPM
if npm view "$PACKAGE_NAME@$VERSION" version > /dev/null 2>&1; then
echo "✅ Package successfully published to NPM!"
echo "📋 Package info:"
npm view "$PACKAGE_NAME@$VERSION"
else
echo "❌ Package not found on NPM. This might be a timing issue."
echo "🔍 Checking latest version..."
npm view "$PACKAGE_NAME" version || echo "Package not yet available"
fi
- name: Create release summary
run: |
PACKAGE_NAME=$(npm pkg get name | tr -d '"')
VERSION=${GITHUB_REF##*/} # Remove everything up to the last /
VERSION=${VERSION#v} # Remove the 'v' prefix if present
echo "## 🎉 Release Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Package:** \`$PACKAGE_NAME@$VERSION\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**NPM URL:** https://www.npmjs.com/package/$PACKAGE_NAME" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Installation:**" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
echo "npm install -g $PACKAGE_NAME" >> $GITHUB_STEP_SUMMARY
echo "# or" >> $GITHUB_STEP_SUMMARY
echo "npx $PACKAGE_NAME" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "✅ All tests passed" >> $GITHUB_STEP_SUMMARY
echo "✅ Linting passed" >> $GITHUB_STEP_SUMMARY
echo "✅ Formatting passed" >> $GITHUB_STEP_SUMMARY
echo "✅ Package published to NPM" >> $GITHUB_STEP_SUMMARY