Merge pull request #2 from Dokploy/feat/templates #49
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |