Files
bolt-diy/test-workflows.sh
Stijnus 9ab4880d99 feat: comprehensive GitHub workflow improvements with security & quality enhancements (#1940)
* feat: add comprehensive workflow testing framework

- Add test-workflows.yaml for safe workflow validation
- Add interactive testing script (test-workflows.sh)
- Add comprehensive testing documentation (WORKFLOW_TESTING.md)
- Add preview deployment smoke tests
- Add Playwright configuration for preview testing
- Add configuration files for quality checks

* fix: standardize pnpm version to 9.14.4 across all configs

- Update package.json packageManager to match workflow configurations
- Resolves version conflict detected by workflow testing
- Ensures consistent pnpm version across development and CI/CD

* fix: resolve TypeScript issues in test files

- Add ts-ignore comments for Playwright imports (dev dependency)
- Add proper type annotations to avoid implicit any errors
- These files are only used in testing environments where Playwright is installed

* feat: add CODEOWNERS file for automated review assignments

- Automatically request reviews from repository maintainers
- Define ownership for security-sensitive and core architecture files
- Enhance code review process with automated assignees

* fix: update CODEOWNERS for upstream repository maintainers

- Replace personal ownership with stackblitz-labs/bolt-maintainers team
- Ensure appropriate review assignments for upstream collaboration
- Maintain security review requirements for sensitive files

* fix: resolve workflow failures in upstream CI

- Exclude preview tests from main test suite (require Playwright)
- Add test configuration to vite.config.ts to prevent import errors
- Make quality workflow tools more resilient with better error handling
- Replace Cloudflare deployment with mock for upstream repo compatibility
- Replace Playwright smoke tests with basic HTTP checks
- Ensure all workflows can run without additional dependencies

These changes maintain workflow functionality while being compatible
with the upstream repository's existing setup and dependencies.

* fix: make workflows production-ready and non-blocking

Critical fixes to prevent workflows from blocking future PRs:

- Preview deployment: Gracefully handle missing Cloudflare secrets
- Quality analysis: Make dependency checks resilient with fallbacks
- PR size check: Add continue-on-error and larger size categories
- Quality gates: Distinguish required vs optional workflows
- All workflows: Ensure they pass when dependencies/secrets missing

These changes ensure workflows enhance the development process
without becoming blockers for legitimate PRs.

* fix: ensure all workflows are robust and never block PRs

Final robustness improvements:

- Preview deployment: Add continue-on-error for GitHub API calls
- Preview deployment: Add summary step to ensure workflow always passes
- Cleanup workflows: Handle missing permissions gracefully
- PR Size Check: Replace external action with robust git-based implementation
- All GitHub API calls: Add continue-on-error to prevent permission failures

These changes guarantee that workflows provide value without blocking
legitimate PRs, even when secrets/permissions are missing.

* fix: ensure Docker image names are lowercase for ghcr.io compatibility

- Add step to convert github.repository to lowercase using tr command
- Update all image references to use lowercase repository name
- Resolves "repository name must be lowercase" error in Docker registry

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: Add comprehensive bug reporting system

- Add BugReportTab component with full form validation
- Implement real-time environment detection (browser, OS, screen resolution)
- Add API route for bug report submission to GitHub
- Include form validation with character limits and required fields
- Add preview functionality before submission
- Support environment info inclusion in reports
- Clean up and remove screenshot functionality for simplicity
- Fix validation logic to properly clear errors when fixed

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-31 02:14:43 +02:00

240 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
# 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 "$@"