Spaces:
Build error
Build error
| # GitHub Workflow Testing Script | |
| # This script helps you test the new workflows safely | |
| set -e | |
| # Colors for output | |
| RED='\033[0;31m' | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| BLUE='\033[0;34m' | |
| NC='\033[0m' # No Color | |
| # Function to print colored output | |
| print_status() { | |
| echo -e "${BLUE}[INFO]${NC} $1" | |
| } | |
| print_success() { | |
| echo -e "${GREEN}[SUCCESS]${NC} $1" | |
| } | |
| print_warning() { | |
| echo -e "${YELLOW}[WARNING]${NC} $1" | |
| } | |
| print_error() { | |
| echo -e "${RED}[ERROR]${NC} $1" | |
| } | |
| # Check if GitHub CLI is installed | |
| check_gh_cli() { | |
| if ! command -v gh &> /dev/null; then | |
| print_error "GitHub CLI (gh) is not installed. Please install it first." | |
| echo "Visit: https://cli.github.com/" | |
| exit 1 | |
| fi | |
| print_success "GitHub CLI is installed" | |
| } | |
| # Check if user is authenticated | |
| check_auth() { | |
| if ! gh auth status &> /dev/null; then | |
| print_error "Not authenticated with GitHub. Please run: gh auth login" | |
| exit 1 | |
| fi | |
| print_success "Authenticated with GitHub" | |
| } | |
| # Create test branch | |
| create_test_branch() { | |
| print_status "Creating test branch 'workflow-testing'..." | |
| if git show-branch workflow-testing &> /dev/null; then | |
| print_warning "Branch 'workflow-testing' already exists. Switching to it..." | |
| git checkout workflow-testing | |
| else | |
| git checkout -b workflow-testing | |
| git push -u origin workflow-testing | |
| print_success "Created and pushed test branch" | |
| fi | |
| } | |
| # Run specific test type | |
| run_test() { | |
| local test_type=$1 | |
| print_status "Running workflow test: $test_type" | |
| gh workflow run "Test Workflows" \ | |
| --ref workflow-testing \ | |
| -f test_type="$test_type" | |
| print_success "Triggered workflow test: $test_type" | |
| print_status "Monitor progress at: https://github.com/$(gh repo view --json owner,name -q '.owner.login + "/" + .name')/actions" | |
| } | |
| # Monitor latest workflow run | |
| monitor_run() { | |
| print_status "Finding latest workflow run..." | |
| local run_id=$(gh run list --workflow="Test Workflows" --limit=1 --json databaseId -q '.[0].databaseId') | |
| if [ -n "$run_id" ]; then | |
| print_status "Monitoring run ID: $run_id" | |
| gh run watch "$run_id" | |
| else | |
| print_warning "No workflow runs found. Did you trigger a test?" | |
| fi | |
| } | |
| # Create test PR | |
| create_test_pr() { | |
| print_status "Creating test PR..." | |
| # Make a small change to trigger workflows | |
| echo "# Workflow Testing - $(date)" >> WORKFLOW_TESTING.md | |
| git add WORKFLOW_TESTING.md | |
| git commit -m "test: trigger workflow validation" | |
| git push origin workflow-testing | |
| # Create PR | |
| gh pr create \ | |
| --title "Test: Workflow Validation - $(date +%Y-%m-%d)" \ | |
| --body "🧪 **This is a test PR for workflow validation - DO NOT MERGE** | |
| This PR tests: | |
| - [x] PR validation workflows | |
| - [x] Quality gates | |
| - [x] Security scanning | |
| - [x] Preview deployment | |
| - [x] Semantic PR validation | |
| **Testing checklist:** | |
| - [ ] All workflows complete successfully | |
| - [ ] Quality gates pass | |
| - [ ] Security scans complete | |
| - [ ] Preview deployment works | |
| - [ ] No errors in workflow logs | |
| **Next steps:** | |
| 1. Monitor workflow execution | |
| 2. Verify all checks pass | |
| 3. Test any failing workflows | |
| 4. Close this PR when testing is complete" \ | |
| --draft | |
| print_success "Created test PR (draft)" | |
| } | |
| # Clean up test resources | |
| cleanup() { | |
| print_status "Cleaning up test resources..." | |
| # Close any open test PRs | |
| local test_prs=$(gh pr list --state=open --search="Test: Workflow Validation" --json number -q '.[].number') | |
| for pr in $test_prs; do | |
| print_status "Closing test PR #$pr" | |
| gh pr close "$pr" --comment "Workflow testing completed - closing test PR" | |
| done | |
| # Switch back to main branch | |
| git checkout main | |
| print_warning "Test branch 'workflow-testing' preserved for future testing" | |
| print_success "Cleanup completed" | |
| } | |
| # Main menu | |
| show_menu() { | |
| echo | |
| echo "🧪 GitHub Workflow Testing Script" | |
| echo "==================================" | |
| echo | |
| echo "Select an option:" | |
| echo "1) Test all workflows" | |
| echo "2) Test CI/CD only" | |
| echo "3) Test security scanning only" | |
| echo "4) Test quality checks only" | |
| echo "5) Create test PR" | |
| echo "6) Monitor latest workflow run" | |
| echo "7) Cleanup test resources" | |
| echo "8) View workflow testing guide" | |
| echo "9) Exit" | |
| echo | |
| } | |
| # View testing guide | |
| view_guide() { | |
| if [ -f "WORKFLOW_TESTING.md" ]; then | |
| print_status "Opening workflow testing guide..." | |
| if command -v bat &> /dev/null; then | |
| bat WORKFLOW_TESTING.md | |
| elif command -v less &> /dev/null; then | |
| less WORKFLOW_TESTING.md | |
| else | |
| cat WORKFLOW_TESTING.md | |
| fi | |
| else | |
| print_error "WORKFLOW_TESTING.md not found in current directory" | |
| fi | |
| } | |
| # Main script | |
| main() { | |
| print_status "Starting GitHub Workflow Testing Script" | |
| # Check prerequisites | |
| check_gh_cli | |
| check_auth | |
| # Create test branch if it doesn't exist | |
| create_test_branch | |
| while true; do | |
| show_menu | |
| read -p "Enter your choice (1-9): " choice | |
| case $choice in | |
| 1) | |
| run_test "all" | |
| ;; | |
| 2) | |
| run_test "ci-only" | |
| ;; | |
| 3) | |
| run_test "security-only" | |
| ;; | |
| 4) | |
| run_test "quality-only" | |
| ;; | |
| 5) | |
| create_test_pr | |
| ;; | |
| 6) | |
| monitor_run | |
| ;; | |
| 7) | |
| cleanup | |
| ;; | |
| 8) | |
| view_guide | |
| ;; | |
| 9) | |
| print_success "Exiting workflow testing script" | |
| exit 0 | |
| ;; | |
| *) | |
| print_error "Invalid option. Please choose 1-9." | |
| ;; | |
| esac | |
| echo | |
| read -p "Press Enter to continue..." | |
| done | |
| } | |
| # Run main function | |
| main "$@" |