/ firmware / ci.sh
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