Skip to content

Release and Publish

Release and Publish #4

Workflow file for this run

name: Release and Publish
on:
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., v0.10.1)'
required: true
type: string
jobs:
test:
name: Run Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run core functionality tests (CI-safe)
run: npm run test:ci
continue-on-error: false
- name: Run mock error tests (expected to fail)
run: npm run test:mock-errors
continue-on-error: true
id: mock-tests
- name: Generate test summary
run: |
echo "## 🧪 Test Results Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "✅ **Core Tests**: Passed (critical functionality verified)" >> $GITHUB_STEP_SUMMARY
echo "⚠️ **Mock Error Tests**: Expected failures in CI environment" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 Test Coverage" >> $GITHUB_STEP_SUMMARY
echo "- **Integration Tests**: End-to-end workflow testing" >> $GITHUB_STEP_SUMMARY
echo "- **Error Handling**: Mock client validation" >> $GITHUB_STEP_SUMMARY
echo "- **Resource Tests**: MCP resource functionality" >> $GITHUB_STEP_SUMMARY
- name: Run test coverage (on core tests)
run: npm run test:ci:coverage
continue-on-error: true
build:
name: Build Package
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build TypeScript
run: npm run build
- name: Verify build output
run: |
ls -la build/
node -e "console.log('Build verification:', require('./build/server.js') ? 'SUCCESS' : 'FAILED')"
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: build/
retention-days: 7
publish:
name: Publish to NPM
runs-on: ubuntu-latest
needs: [test, build]
if: (github.event_name == 'release' && github.event.action == 'published') || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Determine trigger context
run: |
echo "🔍 Workflow Trigger Information:"
echo "Event: ${{ github.event_name }}"
if [ "${{ github.event_name }}" = "release" ]; then
echo "Release Action: ${{ github.event.action }}"
echo "Release Tag: ${{ github.event.release.tag_name }}"
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "Manual Trigger: workflow_dispatch"
echo "Input Version: ${{ github.event.inputs.version }}"
fi
echo "Repository: ${{ github.repository }}"
echo "Branch: ${{ github.ref_name }}"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Build package
run: npm run build
- name: Verify package contents
run: |
echo "📦 Verifying package contents..."
npm pack --dry-run
echo ""
echo "📋 Package contents preview:"
tar -tzf $(npm pack --silent) | head -20
echo ""
echo "📊 Package info:"
npm pack --dry-run | grep -E "(package size|unpacked size|total files)"
- name: Verify NPM authentication
run: |
echo "🔐 Verifying NPM authentication..."
if [ -z "$NODE_AUTH_TOKEN" ]; then
echo "❌ NPM_TOKEN is not set!"
exit 1
else
echo "✅ NPM_TOKEN is configured"
echo "🔍 Token length: ${#NODE_AUTH_TOKEN} characters"
fi
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish to NPM
run: |
echo "🚀 Publishing @makafeli/n8n-workflow-builder@$(node -p "require('./package.json').version") to npm..."
npm publish --verbose
echo "✅ Package published successfully!"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Verify package is published
run: |
echo "🔍 Verifying package is available on npm registry..."
PACKAGE_NAME="@makafeli/n8n-workflow-builder"
PACKAGE_VERSION=$(node -p "require('./package.json').version")
# Wait a moment for npm registry to update
sleep 10
# Check if package is available
if npm view $PACKAGE_NAME@$PACKAGE_VERSION version > /dev/null 2>&1; then
echo "✅ Package $PACKAGE_NAME@$PACKAGE_VERSION is available on npm registry!"
echo "📦 Install with: npm install $PACKAGE_NAME"
echo "🔗 View at: https://www.npmjs.com/package/$PACKAGE_NAME"
else
echo "⚠️ Package may still be propagating to npm registry..."
echo "🔄 Check again in a few minutes at: https://www.npmjs.com/package/$PACKAGE_NAME"
fi
- name: Create deployment summary
run: |
echo "## 🚀 Package Published Successfully!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Package:** \`@makafeli/n8n-workflow-builder@$(node -p "require('./package.json').version")\`" >> $GITHUB_STEP_SUMMARY
echo "**Registry:** https://www.npmjs.com/package/@makafeli/n8n-workflow-builder" >> $GITHUB_STEP_SUMMARY
echo "**Install:** \`npm install @makafeli/n8n-workflow-builder\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📦 Package Details" >> $GITHUB_STEP_SUMMARY
echo "- **Version:** $(node -p "require('./package.json').version")" >> $GITHUB_STEP_SUMMARY
echo "- **MCP SDK:** $(node -p "require('./package.json').dependencies['@modelcontextprotocol/sdk']")" >> $GITHUB_STEP_SUMMARY
echo "- **Node.js:** $(node -p "require('./package.json').engines.node")" >> $GITHUB_STEP_SUMMARY