mirror of https://github.com/buster-so/buster.git
187 lines
4.9 KiB
Bash
187 lines
4.9 KiB
Bash
|
#!/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"
|