--- name: Validate YAML (secondary files) # yamllint disable-line rule:truthy on: push: paths: - '**/*.yml' - '**/*.yaml' pull_request: paths: - '**/*.yml' - '**/*.yaml' workflow_dispatch: jobs: code_scan: name: Validate YAML runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v4 with: fetch-depth: 0 # Ensures full commit history for diff - name: Identify changed files id: changed-files run: | BASE=${{ github.event.before }} HEAD=${{ github.sha }} FILES=$(git diff --name-only $BASE $HEAD -- '**/*.yml' '**/*.yaml' | tr '\n' ',') echo "changed_files=$FILES" >> $GITHUB_ENV if [[ -n "$FILES" ]]; then echo "any_changed=true" >> $GITHUB_ENV else echo "any_changed=false" >> $GITHUB_ENV fi - name: Validate YAML if: env.any_changed == 'true' run: | IFS=',' read -ra FILES <<< "${{ env.changed_files }}" for file in "${FILES[@]}"; do if [[ "$file" =~ ^.*\.yaml$ ]] || [[ "$file" =~ ^ESPHome/.*\.yaml$ ]]; then echo "Skipping $file" continue fi echo "::group::Validating $file" yamllint -c "./.rules/yamllint.yml" "$file" echo "::endgroup::" done ...