buster/scripts/test-cli-release-local.sh

187 lines
4.9 KiB
Bash
Raw Normal View History

#!/bin/bash
# Test CLI Release Locally
# This script simulates the GitHub Actions workflow for building the CLI
set -e
echo "🚀 Testing CLI Release Build Process Locally"
echo "============================================"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Detect OS and architecture
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
echo -e "${YELLOW}System Info:${NC}"
echo " OS: $OS"
echo " Architecture: $ARCH"
echo ""
# Determine the target based on OS and architecture
if [[ "$OS" == "darwin" ]]; then
if [[ "$ARCH" == "arm64" ]]; then
TARGET="darwin-arm64"
BUN_TARGET="darwin-arm64"
ARTIFACT_NAME="buster-cli-darwin-arm64.tar.gz"
else
TARGET="darwin-x64"
BUN_TARGET="darwin-x64"
ARTIFACT_NAME="buster-cli-darwin-x86_64.tar.gz"
fi
elif [[ "$OS" == "linux" ]]; then
TARGET="linux-x64"
BUN_TARGET="linux-x64-modern"
ARTIFACT_NAME="buster-cli-linux-x86_64.tar.gz"
else
echo -e "${RED}Unsupported OS: $OS${NC}"
exit 1
fi
echo -e "${GREEN}Build Configuration:${NC}"
echo " Target: $TARGET"
echo " Bun Target: $BUN_TARGET"
echo " Artifact: $ARTIFACT_NAME"
echo ""
# Step 1: Check prerequisites
echo -e "${YELLOW}Step 1: Checking prerequisites...${NC}"
# Check if pnpm is installed
if ! command -v pnpm &> /dev/null; then
echo -e "${RED}✗ pnpm is not installed${NC}"
echo " Install with: npm install -g pnpm"
exit 1
else
echo -e "${GREEN}✓ pnpm$(pnpm --version)${NC}"
fi
# Check if bun is installed
if ! command -v bun &> /dev/null; then
echo -e "${RED}✗ bun is not installed${NC}"
echo " Install with: curl -fsSL https://bun.sh/install | bash"
exit 1
else
echo -e "${GREEN}✓ bun $(bun --version)${NC}"
fi
# Check if we're in the right directory
if [[ ! -f "package.json" ]] || [[ ! -d "apps/cli" ]]; then
echo -e "${RED}✗ Not in monorepo root directory${NC}"
echo " Please run this script from the repository root"
exit 1
else
echo -e "${GREEN}✓ In monorepo root${NC}"
fi
echo ""
# Step 2: Install dependencies
echo -e "${YELLOW}Step 2: Installing dependencies...${NC}"
pnpm install --frozen-lockfile
echo -e "${GREEN}✓ Dependencies installed${NC}"
echo ""
# Step 3: Build dependencies with Turbo
echo -e "${YELLOW}Step 3: Building CLI dependencies with Turbo...${NC}"
export NODE_ENV=production
export SKIP_ENV_CHECK=true
export TURBO_TELEMETRY_DISABLED=1
pnpm turbo run build --filter=@buster-app/cli^...
echo -e "${GREEN}✓ Dependencies built${NC}"
echo ""
# Step 4: Build standalone CLI binary
echo -e "${YELLOW}Step 4: Building standalone CLI binary...${NC}"
cd apps/cli
# Clean previous builds
rm -rf dist
mkdir -p dist
echo "Building standalone binary..."
# Note: Bun's --compile currently builds for the host platform
# Cross-compilation requires using Bun on the target platform
bun build src/index.tsx --compile --outfile dist/buster-cli
# Make it executable
chmod +x dist/buster-cli
# Check binary size
BINARY_SIZE=$(ls -lh dist/buster-cli | awk '{print $5}')
echo -e "${GREEN}✓ Binary built successfully (size: $BINARY_SIZE)${NC}"
echo ""
# Step 5: Test the binary
echo -e "${YELLOW}Step 5: Testing the binary...${NC}"
# Test --help
echo "Testing --help command..."
if ./dist/buster-cli --help > /dev/null 2>&1; then
echo -e "${GREEN}✓ --help command works${NC}"
else
echo -e "${YELLOW}⚠ --help command not implemented or failed${NC}"
fi
# Test --version
echo "Testing --version command..."
if ./dist/buster-cli --version > /dev/null 2>&1; then
echo -e "${GREEN}✓ --version command works${NC}"
else
echo -e "${YELLOW}⚠ --version command not implemented or failed${NC}"
fi
echo ""
# Step 6: Create release archive
echo -e "${YELLOW}Step 6: Creating release archive...${NC}"
cd dist
# Rename to 'buster' for end users
cp buster-cli buster
# Create tarball
tar czf "$ARTIFACT_NAME" buster
# Generate SHA256
if [[ "$OS" == "darwin" ]]; then
shasum -a 256 "$ARTIFACT_NAME" > "$ARTIFACT_NAME.sha256"
else
sha256sum "$ARTIFACT_NAME" > "$ARTIFACT_NAME.sha256"
fi
echo -e "${GREEN}✓ Archive created: $ARTIFACT_NAME${NC}"
echo -e "${GREEN}✓ Checksum created: $ARTIFACT_NAME.sha256${NC}"
# Display checksum
echo ""
echo "SHA256 Checksum:"
cat "$ARTIFACT_NAME.sha256"
# Display archive size
ARCHIVE_SIZE=$(ls -lh "$ARTIFACT_NAME" | awk '{print $5}')
echo ""
echo "Archive size: $ARCHIVE_SIZE"
cd ../../..
echo ""
echo -e "${GREEN}✅ Local CLI build test completed successfully!${NC}"
echo ""
echo "Artifacts created in: apps/cli/dist/"
echo " - Binary: apps/cli/dist/buster-cli"
echo " - Archive: apps/cli/dist/$ARTIFACT_NAME"
echo " - Checksum: apps/cli/dist/$ARTIFACT_NAME.sha256"
echo ""
echo "To test the binary directly:"
echo " ./apps/cli/dist/buster-cli --help"
echo ""
echo "To extract and test the archive:"
echo " cd /tmp && tar xzf $(pwd)/apps/cli/dist/$ARTIFACT_NAME && ./buster --help"