#!/usr/bin/env bash # Every distros// needs a complete distro.env and an entry in every Woodpecker # matrix, or a newly added distro silently never gets built. set -uo pipefail KEYS="BASE_IMAGE_NAME IMAGE TAG_SUFFIX DEFAULT PACKAGES" WORKFLOWS=(.woodpecker/build.yaml .woodpecker/docker.yaml) fail=0 for d in distros/*/; do n=$(basename "$d") for k in $KEYS; do grep -q "^${k}=" "${d}distro.env" || { echo "${d}distro.env: missing ${k}"; fail=1; } done for wf in "${WORKFLOWS[@]}"; do grep -q "DISTRO: ${n}\$" "$wf" || { echo "${wf}: distro ${n} missing from matrix"; fail=1; } # A matrix entry that restates a distro.env key must not drift from it — a stale # BASE_IMAGE here silently overrides distro.env for every CI build. while IFS='=' read -r k v; do [ -n "$k" ] || continue grep -q "^${k}=" "${d}distro.env" || continue ev=$(sed -n "s/^${k}=//p" "${d}distro.env" | head -1 | sed 's/^"//;s/"$//') [ "$v" = "$ev" ] || { echo "${wf}: matrix ${k}=\"${v}\" for ${n} disagrees with ${d}distro.env (\"${ev}\")"; fail=1; } done < tag. defaults=$(grep -l 'DEFAULT="true"' distros/*/distro.env | wc -l) [ "$defaults" -eq 1 ] || { echo "expected exactly one distro with DEFAULT=\"true\", found ${defaults}"; fail=1; } exit "$fail"