Release testing

This commit is contained in:
Peter Steinberger 2025-05-25 21:21:53 +02:00
parent 1a5aefeded
commit 32bf6b9eaf
2 changed files with 288 additions and 0 deletions

140
scripts/test-package.sh Executable file
View file

@ -0,0 +1,140 @@
#!/bin/bash
# Simple package test script for Peekaboo MCP
# Tests the package locally without publishing
set -e
echo "🧪 Testing npm package locally..."
echo ""
# Build everything
echo "🔨 Building package..."
npm run build:all
# Create package
echo "📦 Creating package tarball..."
PACKAGE_FILE=$(npm pack 2>&1 | tail -1)
PACKAGE_PATH=$(pwd)/$PACKAGE_FILE
echo "Created: $PACKAGE_FILE"
# Get package info
PACKAGE_SIZE=$(du -h "$PACKAGE_FILE" | cut -f1)
echo "Package size: $PACKAGE_SIZE"
# Test installation in a temporary directory
TEMP_DIR=$(mktemp -d)
echo ""
echo "📥 Testing installation in: $TEMP_DIR"
cd "$TEMP_DIR"
# Initialize a test project
npm init -y > /dev/null 2>&1
# Install the package from tarball
echo "📦 Installing from tarball..."
npm install "$PACKAGE_PATH"
# Check installation
echo ""
echo "🔍 Checking installation..."
# Check if binary exists and is executable
if [ -f "node_modules/@steipete/peekaboo-mcp/peekaboo" ]; then
echo "✅ Binary found"
# Check if executable
if [ -x "node_modules/@steipete/peekaboo-mcp/peekaboo" ]; then
echo "✅ Binary is executable"
# Test the binary
echo ""
echo "🧪 Testing Swift CLI..."
if node_modules/@steipete/peekaboo-mcp/peekaboo --version; then
echo "✅ Swift CLI works!"
else
echo "❌ Swift CLI failed"
fi
else
echo "❌ Binary is not executable"
fi
else
echo "❌ Binary not found!"
fi
# Check main entry point
if [ -f "node_modules/@steipete/peekaboo-mcp/dist/index.js" ]; then
echo "✅ Main entry point found"
else
echo "❌ Main entry point missing!"
fi
# List all files in package
echo ""
echo "📋 Package contents:"
find node_modules/@steipete/peekaboo-mcp -type f -name "*.js" -o -name "*.d.ts" -o -name "peekaboo" | head -20
# Test the MCP server
echo ""
echo "🧪 Testing MCP server startup..."
cat > test-mcp.js << 'EOF'
const { spawn } = require('child_process');
const path = require('path');
const mcpPath = path.join('node_modules', '@steipete', 'peekaboo-mcp', 'dist', 'index.js');
const server = spawn('node', [mcpPath], {
stdio: ['pipe', 'pipe', 'pipe']
});
const request = JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/list"
}) + '\n';
setTimeout(() => {
server.stdin.write(request);
}, 100);
let responded = false;
server.stdout.on('data', (data) => {
const lines = data.toString().split('\n').filter(l => l.trim());
for (const line of lines) {
try {
const response = JSON.parse(line);
if (response.result && response.result.tools) {
console.log('✅ MCP server works! Available tools:', response.result.tools.map(t => t.name).join(', '));
responded = true;
server.kill();
process.exit(0);
}
} catch (e) {
// Ignore non-JSON lines
}
}
});
server.stderr.on('data', (data) => {
console.error('Server error:', data.toString());
});
setTimeout(() => {
if (!responded) {
console.error('❌ Timeout waiting for MCP server response');
server.kill();
process.exit(1);
}
}, 5000);
EOF
node test-mcp.js
# Cleanup
cd - > /dev/null
rm -rf "$TEMP_DIR"
rm -f "$PACKAGE_PATH"
echo ""
echo "✨ Package test complete!"
echo ""
echo "If all tests passed, the package is ready for publishing!"

148
scripts/test-publish.sh Executable file
View file

@ -0,0 +1,148 @@
#!/bin/bash
# Test publishing script for Peekaboo MCP
# This script tests the npm package in a local registry before public release
set -e
echo "🧪 Testing npm package publishing..."
echo ""
# Save current registry
ORIGINAL_REGISTRY=$(npm config get registry)
echo "📦 Original registry: $ORIGINAL_REGISTRY"
# Check if Verdaccio is installed
if ! command -v verdaccio &> /dev/null; then
echo "❌ Verdaccio not found. Install it with: npm install -g verdaccio"
exit 1
fi
# Start Verdaccio in background if not already running
if ! curl -s http://localhost:4873/ > /dev/null; then
echo "🚀 Starting Verdaccio local registry..."
verdaccio > /tmp/verdaccio.log 2>&1 &
VERDACCIO_PID=$!
sleep 3
else
echo "✅ Verdaccio already running"
fi
# Set to local registry
echo "🔄 Switching to local registry..."
npm set registry http://localhost:4873/
# Create test auth token (Verdaccio accepts any auth on first use)
echo "🔑 Setting up authentication..."
TOKEN=$(echo -n "testuser:testpass" | base64)
npm set //localhost:4873/:_authToken "$TOKEN"
# Build the package
echo "🔨 Building package..."
npm run build:all
# Publish to local registry
echo "📤 Publishing to local registry..."
npm publish --registry http://localhost:4873/
echo ""
echo "✅ Package published to local registry!"
echo ""
# Test installation in a temporary directory
TEMP_DIR=$(mktemp -d)
echo "📥 Testing installation in: $TEMP_DIR"
cd "$TEMP_DIR"
# Initialize a test project
npm init -y > /dev/null 2>&1
# Install the package
echo "📦 Installing @steipete/peekaboo-mcp from local registry..."
npm install @steipete/peekaboo-mcp --registry http://localhost:4873/
# Check if binary exists
if [ -f "node_modules/@steipete/peekaboo-mcp/peekaboo" ]; then
echo "✅ Binary found in package"
# Test the binary
echo "🧪 Testing binary..."
if node_modules/@steipete/peekaboo-mcp/peekaboo --version; then
echo "✅ Binary works!"
else
echo "❌ Binary failed to execute"
fi
else
echo "❌ Binary not found in package!"
fi
# Test the MCP server
echo ""
echo "🧪 Testing MCP server..."
cat > test-mcp.js << 'EOF'
const { spawn } = require('child_process');
const server = spawn('npx', ['@steipete/peekaboo-mcp'], {
stdio: ['pipe', 'pipe', 'pipe']
});
const request = JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/list"
}) + '\n';
server.stdin.write(request);
server.stdout.on('data', (data) => {
const lines = data.toString().split('\n').filter(l => l.trim());
for (const line of lines) {
try {
const response = JSON.parse(line);
if (response.result && response.result.tools) {
console.log('✅ MCP server responded with tools:', response.result.tools.map(t => t.name).join(', '));
server.kill();
process.exit(0);
}
} catch (e) {
// Ignore non-JSON lines
}
}
});
setTimeout(() => {
console.error('❌ Timeout waiting for MCP server response');
server.kill();
process.exit(1);
}, 5000);
EOF
if node test-mcp.js; then
echo "✅ MCP server test passed!"
else
echo "❌ MCP server test failed"
fi
# Cleanup
cd - > /dev/null
rm -rf "$TEMP_DIR"
# Restore original registry
echo ""
echo "🔄 Restoring original registry..."
npm set registry "$ORIGINAL_REGISTRY"
npm config delete //localhost:4873/:_authToken
# Kill Verdaccio if we started it
if [ ! -z "$VERDACCIO_PID" ]; then
echo "🛑 Stopping Verdaccio..."
kill $VERDACCIO_PID 2>/dev/null || true
fi
echo ""
echo "✨ Test publish complete!"
echo ""
echo "📋 Next steps:"
echo "1. If all tests passed, you can publish to npm with: npm publish"
echo "2. Remember to tag appropriately if beta: npm publish --tag beta"
echo "3. Create a GitHub release after publishing"