name: Validate Blueprints Structure and Meta on: pull_request: branches: - main push: branches: - main jobs: validate: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Validate blueprint folders and files run: | echo "🔍 Validating blueprints folder structure..." ERROR=0 # Loop through each blueprint folder for dir in blueprints/*; do if [ -d "$dir" ]; then TEMPLATE_NAME=$(basename "$dir") COMPOSE_FILE="$dir/docker-compose.yml" TEMPLATE_FILE="$dir/template.yml" if [ ! -f "$COMPOSE_FILE" ]; then echo "❌ Missing docker-compose.yml in $TEMPLATE_NAME" ERROR=1 fi if [ ! -f "$TEMPLATE_FILE" ]; then echo "❌ Missing template.yml in $TEMPLATE_NAME" ERROR=1 fi fi done if [ $ERROR -eq 1 ]; then echo "❌ Blueprint folder validation failed." exit 1 else echo "✅ Blueprint folders validated successfully." fi - name: Validate meta.json matches blueprint folders and logo files run: | echo "🔍 Validating meta.json against blueprint folders and logos..." ERROR=0 # Read all blueprint folder names into an array FOLDERS=($(ls -1 blueprints)) # Extract ids and logos from meta.json IDS_AND_LOGOS=$(jq -c '.[] | {id, logo}' meta.json) # Validate each id in meta.json exists as a folder for item in $IDS_AND_LOGOS; do ID=$(echo "$item" | jq -r '.id') LOGO=$(echo "$item" | jq -r '.logo') # Check if folder exists if [ ! -d "blueprints/$ID" ]; then echo "❌ meta.json id \"$ID\" does not have a matching folder in blueprints/" ERROR=1 continue fi # Check if logo file exists inside its folder if [ ! -f "blueprints/$ID/$LOGO" ]; then echo "❌ Logo \"$LOGO\" defined for \"$ID\" does not exist in blueprints/$ID/" ERROR=1 fi done # Validate each folder has a matching id in meta.json META_IDS=$(jq -r '.[].id' meta.json) for FOLDER in "${FOLDERS[@]}"; do FOUND=0 for ID in $META_IDS; do if [ "$FOLDER" == "$ID" ]; then FOUND=1 break fi done if [ "$FOUND" -eq 0 ]; then echo "❌ Folder \"$FOLDER\" has no matching id in meta.json" ERROR=1 fi done if [ $ERROR -eq 1 ]; then echo "❌ meta.json validation failed." exit 1 else echo "✅ meta.json validated successfully." fi