mirror of https://github.com/buster-so/buster.git
172 lines
5.4 KiB
Bash
Executable File
172 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Test GitHub Actions Locally with act
|
|
# This script helps test the GitHub Actions workflows using act
|
|
|
|
set -e
|
|
|
|
echo "🎭 Testing GitHub Actions Locally with act"
|
|
echo "=========================================="
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Check if act is installed
|
|
if ! command -v act &> /dev/null; then
|
|
echo -e "${YELLOW}act is not installed. Would you like to install it?${NC}"
|
|
echo ""
|
|
echo "Installation options:"
|
|
echo " 1. macOS with Homebrew: brew install act"
|
|
echo " 2. macOS/Linux with curl:"
|
|
echo " curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash"
|
|
echo " 3. With Go: go install github.com/nektos/act@latest"
|
|
echo ""
|
|
|
|
# Try to detect OS and suggest best option
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
echo -e "${BLUE}Recommended for macOS:${NC}"
|
|
echo " brew install act"
|
|
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
echo -e "${BLUE}Recommended for Linux:${NC}"
|
|
echo " curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash"
|
|
fi
|
|
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✓ act is installed: $(act --version)${NC}"
|
|
echo ""
|
|
|
|
# Create act configuration if it doesn't exist
|
|
if [[ ! -f ".actrc" ]]; then
|
|
echo -e "${YELLOW}Creating .actrc configuration...${NC}"
|
|
cat > .actrc << 'EOF'
|
|
# Default act configuration for testing
|
|
-P ubuntu-latest=catthehacker/ubuntu:act-latest
|
|
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
|
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
|
-P macos-latest=nektos/act-environments-macos:latest
|
|
-P windows-latest=catthehacker/ubuntu:act-latest
|
|
-P windows-2022=catthehacker/ubuntu:act-latest
|
|
-P blacksmith-2vcpu-ubuntu-2404=catthehacker/ubuntu:act-latest
|
|
-P blacksmith-4vcpu-ubuntu-2404=catthehacker/ubuntu:act-latest
|
|
-P blacksmith-8vcpu-ubuntu-2404=catthehacker/ubuntu:act-latest
|
|
--container-architecture linux/amd64
|
|
EOF
|
|
echo -e "${GREEN}✓ Created .actrc configuration${NC}"
|
|
echo ""
|
|
fi
|
|
|
|
# Create secrets file for act if it doesn't exist
|
|
if [[ ! -f ".secrets" ]]; then
|
|
echo -e "${YELLOW}Creating .secrets file template...${NC}"
|
|
cat > .secrets << 'EOF'
|
|
# GitHub Actions secrets for local testing
|
|
# Fill in actual values or use dummy values for testing
|
|
GITHUB_TOKEN=dummy-github-token
|
|
HOMEBREW_TAP_TOKEN=dummy-homebrew-token
|
|
EOF
|
|
echo -e "${GREEN}✓ Created .secrets template${NC}"
|
|
echo -e "${YELLOW} Note: Update .secrets with actual values if needed${NC}"
|
|
echo ""
|
|
fi
|
|
|
|
# Menu for testing different workflows
|
|
echo -e "${BLUE}Which workflow would you like to test?${NC}"
|
|
echo " 1. CLI Release - Build only (fast)"
|
|
echo " 2. CLI Release - Full workflow (includes release)"
|
|
echo " 3. Homebrew Tap Update (requires existing release)"
|
|
echo " 4. List all workflow jobs"
|
|
echo " 5. Dry run (show what would be executed)"
|
|
echo ""
|
|
read -p "Enter choice (1-5): " choice
|
|
|
|
case $choice in
|
|
1)
|
|
echo ""
|
|
echo -e "${YELLOW}Testing CLI Release - Build job only...${NC}"
|
|
echo "This will build the CLI binary for your current platform"
|
|
echo ""
|
|
|
|
# Run only the build job for current platform
|
|
act push \
|
|
-W .github/workflows/cli-release.yml \
|
|
-j build \
|
|
--matrix os:$(uname -s | tr '[:upper:]' '[:lower:]')-latest \
|
|
--secret-file .secrets \
|
|
--container-architecture linux/amd64 \
|
|
--pull=false
|
|
;;
|
|
|
|
2)
|
|
echo ""
|
|
echo -e "${YELLOW}Testing CLI Release - Full workflow...${NC}"
|
|
echo "This will simulate the entire release process"
|
|
echo ""
|
|
|
|
act push \
|
|
-W .github/workflows/cli-release.yml \
|
|
--secret-file .secrets \
|
|
--container-architecture linux/amd64 \
|
|
--pull=false
|
|
;;
|
|
|
|
3)
|
|
echo ""
|
|
echo -e "${YELLOW}Testing Homebrew Tap Update...${NC}"
|
|
echo "Enter the release tag (e.g., cli-v0.3.0):"
|
|
read -p "Tag: " tag
|
|
echo "Enter the version (e.g., 0.3.0):"
|
|
read -p "Version: " version
|
|
echo ""
|
|
|
|
act workflow_dispatch \
|
|
-W .github/workflows/update-brew-tap.yml \
|
|
--secret-file .secrets \
|
|
-e <(echo "{\"inputs\": {\"tag\": \"$tag\", \"version\": \"$version\"}}") \
|
|
--container-architecture linux/amd64 \
|
|
--pull=false
|
|
;;
|
|
|
|
4)
|
|
echo ""
|
|
echo -e "${YELLOW}Listing all workflow jobs...${NC}"
|
|
echo ""
|
|
|
|
echo "CLI Release workflow jobs:"
|
|
act -W .github/workflows/cli-release.yml -l
|
|
echo ""
|
|
|
|
echo "Homebrew Tap Update workflow jobs:"
|
|
act -W .github/workflows/update-brew-tap.yml -l
|
|
;;
|
|
|
|
5)
|
|
echo ""
|
|
echo -e "${YELLOW}Dry run - CLI Release workflow...${NC}"
|
|
echo ""
|
|
|
|
act push \
|
|
-W .github/workflows/cli-release.yml \
|
|
--dryrun \
|
|
--secret-file .secrets
|
|
;;
|
|
|
|
*)
|
|
echo -e "${RED}Invalid choice${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo -e "${GREEN}Done!${NC}"
|
|
echo ""
|
|
echo "Tips:"
|
|
echo " - Use --verbose flag for more detailed output"
|
|
echo " - Use --reuse to keep containers between runs (faster)"
|
|
echo " - Check .secrets file if you see authentication errors"
|
|
echo " - Use --platform to specify different OS targets" |