name: Validate ESPHome Configs env: ESPHOME_VERSION: "2026.4.0" on: push: branches: [main] paths: - "boneio-*.yaml" - "packages/**" - ".github/workflows/validate-firmware.yml" pull_request: paths: - "boneio-*.yaml" - "packages/**" - ".github/workflows/validate-firmware.yml" jobs: validate-urls: name: Validate package_import_url runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check package_import_url consistency run: | ERRORS=0 for FILE in boneio-*.yaml; do BASENAME=$(basename "$FILE") URL=$(grep 'package_import_url:' "$FILE" 2>/dev/null | awk '{print $2}' | sed "s/['\"]//g") if [ -z "$URL" ]; then echo "::warning::No package_import_url found in $FILE" continue fi URL_FILE=$(echo "$URL" | sed 's|.*esphome/||' | sed 's|@.*||') if [ "$URL_FILE" != "$BASENAME" ]; then echo "::error file=$FILE::package_import_url mismatch: URL references '$URL_FILE' but file is '$BASENAME'" ERRORS=$((ERRORS + 1)) fi if echo "$URL" | grep -q '\.yaml\.yaml'; then echo "::error file=$FILE::Double .yaml.yaml extension in package_import_url" ERRORS=$((ERRORS + 1)) fi done if [ $ERRORS -gt 0 ]; then echo "" echo "Found $ERRORS error(s) in package_import_url validation" exit 1 fi echo "All package_import_url checks passed!" validate-configs: name: Validate configs on ESPHome 2026.4.0 runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Validate top-level firmware configs run: | set -e docker pull "ghcr.io/esphome/esphome:${ESPHOME_VERSION}" for FILE in boneio-*.yaml; do echo "Validating $FILE with ESPHome ${ESPHOME_VERSION}" docker run --rm -v "$PWD":/config "ghcr.io/esphome/esphome:${ESPHOME_VERSION}" config "$FILE" done