Files
kubernetes/generate-catalog-info.sh
2025-11-23 18:58:51 +01:00

117 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
ROOT_DOMAIN_NAME="infra-root"
OWNER="platform-team"
echo "Generating Backstage catalog files..."
#
# 1. Create root catalog-info.yaml
#
ROOT_FILE="catalog-info.yaml"
if [[ -f "$ROOT_FILE" ]]; then
echo "Root catalog-info.yaml already exists — skipping"
else
echo "Creating root catalog-info.yaml"
cat > "$ROOT_FILE" <<EOF
apiVersion: backstage.io/v1alpha1
kind: Domain
metadata:
name: ${ROOT_DOMAIN_NAME}
title: Infrastructure Root
spec:
owner: ${OWNER}
EOF
fi
#
# Add children: top-level directories
#
TOP_LEVEL_DIRS=()
while IFS= read -r -d '' dir; do
TOP_LEVEL_DIRS+=("$dir")
done < <(find . -mindepth 1 -maxdepth 1 -type d -print0)
echo "Adding children to root catalog-info.yaml"
echo " children:" >> "$ROOT_FILE"
for d in "${TOP_LEVEL_DIRS[@]}"; do
name=$(basename "$d")
echo " - ./${name}/catalog-info.yaml" >> "$ROOT_FILE"
done
#
# 2. Process each top-level directory as a System
#
for dir in "${TOP_LEVEL_DIRS[@]}"; do
SYS_NAME=$(basename "$dir")
SYS_FILE="${dir}/catalog-info.yaml"
if [[ -f "$SYS_FILE" ]]; then
echo "System file already exists for $SYS_NAME — skipping"
else
echo "Creating system catalog-info.yaml for $SYS_NAME"
cat > "$SYS_FILE" <<EOF
apiVersion: backstage.io/v1alpha1
kind: System
metadata:
name: ${SYS_NAME}
title: ${SYS_NAME^} System
spec:
owner: ${OWNER}
partOf:
- ../catalog-info.yaml
subcomponents:
EOF
fi
#
# Append subcomponents for the system
#
SUBDIRS=()
while IFS= read -r -d '' sub; do
SUBDIRS+=("$sub")
done < <(find "$dir" -mindepth 1 -maxdepth 1 -type d -print0)
echo " Adding components under $SYS_NAME"
for s in "${SUBDIRS[@]}"; do
SUB_NAME=$(basename "$s")
echo " - ./${SUB_NAME}/catalog-info.yaml" >> "$SYS_FILE"
done
#
# 3. Create component files in subdirectories
#
for s in "${SUBDIRS[@]}"; do
SUB_NAME=$(basename "$s")
COMPONENT_FILE="${s}/catalog-info.yaml"
if [[ -f "$COMPONENT_FILE" ]]; then
echo "Component file exists for $SYS_NAME/$SUB_NAME — skipping"
else
echo "Creating component file: $SYS_NAME/$SUB_NAME"
cat > "$COMPONENT_FILE" <<EOF
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: ${SYS_NAME}-${SUB_NAME}
title: ${SUB_NAME^} (${SYS_NAME})
spec:
type: service
lifecycle: production
owner: ${OWNER}
partOf:
- ../catalog-info.yaml
EOF
fi
done
done
echo "Done! All catalog-info.yaml files are created."