name: lint-test-docker on: push: branches: - main paths: - 'hosts/**' - ! 'hosts/archive' jobs: docker-lint: runs-on: ubuntu-js steps: - name: Checkout uses: actions/checkout@v5 with: fetch-depth: 0 - name: Set up Node.js uses: actions/setup-node@v6 with: node-version: '24' - name: Lint Docker Compose run: | set -e # Exit immediately if a command exits with a non-zero status. TARGET_BRANCH="origin/main" echo ">> Target branch for diff is: $TARGET_BRANCH" CHANGED_FILES=$(git diff --name-only "$TARGET_BRANCH" -- 'hosts/**') echo ">> Found changed files:" echo "$CHANGED_FILES" # For each changed file, find its parent chart directory (the one with compose.yaml). # Then, create a unique list of those directories. CHANGED_COMPOSE=$(echo "$CHANGED_FILES" | while read -r file; do dir=$(dirname "$file") while [[ "$dir" != "." && ! -f "$dir/compose.yaml" ]]; do dir=$(dirname "$dir") done if [[ "$dir" != "." ]]; then echo "$dir" fi done | sort -u) if [[ -z "$CHANGED_COMPOSE" ]]; then echo ">> Could not determine changed compose files. This will happen if only files outside a compose file were changed." exit 0 fi echo ">> Running dclint on changed compose files:" echo "$CHANGED_COMPOSE" echo "$CHANGED_COMPOSE" | while read -r compose; do echo ">> Linting $compose ..." npx dclint $compose done - name: ntfy Failed uses: niniyas/ntfy-action@master if: failure() with: url: '${{ secrets.NTFY_URL }}' topic: '${{ secrets.NTFY_TOPIC }}' title: 'Gitea Action' priority: 3 headers: '{"Authorization": "Bearer ${{ secrets.NTFY_CRED }}"}' tags: action,failed details: 'Docker linting for infrastructure repo has failed!' icon: 'https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png' actions: '[{"action": "view", "label": "Open Gitea", "url": "https://gitea.alexlebens.dev/alexlebens/site-profile/actions?workflow=lint-test-docker-push.yaml", "clear": true}]' image: true