ci.sh
1 #!/bin/bash 2 set -e 3 4 # Colors for output 5 RED='\033[0;31m' 6 GREEN='\033[0;32m' 7 YELLOW='\033[1;33m' 8 NC='\033[0m' # No Color 9 10 echo "=== Embassy Template CI Test Script ===" 11 echo "" 12 13 # Check if cargo-generate is installed, install if not 14 if ! command -v cargo-generate &> /dev/null; then 15 echo -e "${YELLOW}cargo-generate not found. Installing...${NC}" 16 cargo install cargo-generate 17 else 18 echo -e "${GREEN}cargo-generate is already installed${NC}" 19 fi 20 21 # Array of chips to test 22 CHIPS=( 23 "nrf52840" 24 "nrf54l15" 25 "nrf9160" 26 "rp2040" 27 "rp2350a" 28 # Below are some auto-generated chips 29 "stm32h743zi" 30 "stm32l053r8" 31 "stm32f373c8" 32 ) 33 34 # Get the absolute path to the template directory 35 TEMPLATE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 36 37 # Create a temporary directory for testing 38 TEMP_DIR=$(mktemp -d) 39 trap "rm -rf $TEMP_DIR" EXIT 40 41 echo -e "${YELLOW}Testing template generation in: $TEMP_DIR${NC}" 42 echo "" 43 44 # Counter for success/failure 45 PASSED=0 46 FAILED=0 47 FAILED_CHIPS=() 48 49 # Test each chip 50 for CHIP in "${CHIPS[@]}"; do 51 echo "=========================================" 52 echo -e "${YELLOW}Testing chip: $CHIP${NC}" 53 echo "=========================================" 54 55 PROJECT_NAME="test-${CHIP}" 56 PROJECT_DIR="$TEMP_DIR/$PROJECT_NAME" 57 58 # Generate project from template 59 echo "Generating project..." 60 if (cd "$TEMP_DIR" && cargo generate --path "$TEMPLATE_DIR" \ 61 --name "$PROJECT_NAME" \ 62 -d chip="$CHIP" \ 63 -d authors="CI Test" \ 64 --silent); then 65 echo -e "${GREEN}✓ Project generated successfully${NC}" 66 else 67 echo -e "${RED}✗ Failed to generate project${NC}" 68 FAILED=$((FAILED + 1)) 69 FAILED_CHIPS+=("$CHIP (generation)") 70 continue 71 fi 72 73 # Build the generated project 74 echo "Building project with cargo build --release..." 75 if (cd "$PROJECT_DIR" && cargo build --release 2>&1); then 76 echo -e "${GREEN}✓ Build successful for $CHIP${NC}" 77 PASSED=$((PASSED + 1)) 78 else 79 echo -e "${RED}✗ Build failed for $CHIP${NC}" 80 FAILED=$((FAILED + 1)) 81 FAILED_CHIPS+=("$CHIP (build)") 82 fi 83 84 echo "" 85 done 86 87 # Print summary 88 echo "=========================================" 89 echo "SUMMARY" 90 echo "=========================================" 91 echo -e "Total chips tested: ${#CHIPS[@]}" 92 echo -e "${GREEN}Passed: $PASSED${NC}" 93 echo -e "${RED}Failed: $FAILED${NC}" 94 95 if [ $FAILED -gt 0 ]; then 96 echo "" 97 echo -e "${RED}Failed chips:${NC}" 98 for CHIP in "${FAILED_CHIPS[@]}"; do 99 echo -e " - $CHIP" 100 done 101 exit 1 102 else 103 echo -e "\n${GREEN}All tests passed!${NC}" 104 exit 0 105 fi