# This file is synced from the `.github` repository, do not modify it directly.
name: Actionlint

on:
  push:
    branches:
      - main
      - master
  pull_request:

defaults:
  run:
    shell: bash -xeuo pipefail {0}

concurrency:
  group: "actionlint-${{ github.ref }}"
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

env:
  HOMEBREW_DEVELOPER: 1
  HOMEBREW_NO_AUTO_UPDATE: 1
  HOMEBREW_NO_ENV_HINTS: 1

permissions: {}

jobs:
  workflow_syntax:
    if: github.repository_owner == 'Homebrew'
    runs-on: ubuntu-latest
    permissions:
      contents: read
    container:
      image: ghcr.io/homebrew/brew:main
    steps:
      - name: Set up Homebrew
        id: setup-homebrew
        uses: Homebrew/actions/setup-homebrew@df4b09108a1de9d6f995fe68f302b3f68bd6d2ef # 2026.07.20.1
        with:
          core: false
          cask: false

      - uses: Homebrew/actions/cache-homebrew-prefix@df4b09108a1de9d6f995fe68f302b3f68bd6d2ef # 2026.07.20.1
        # Don't cache the prefix for the formulae.brew.sh repository as it won't download its own JSON API files
        if: github.repository != 'Homebrew/formulae.brew.sh'
        with:
          install: actionlint shellcheck zizmor
          # Not needed in .github but required for other repositories with multiple uses of cache-homebrew-prefix.
          workflow-key: actionlint

      - name: Install tools
        if: github.repository == 'Homebrew/formulae.brew.sh'
        run: brew install actionlint shellcheck zizmor

      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false

      - run: zizmor --format sarif . > results.sarif
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Upload SARIF file
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        # We can't use the SARIF file when triggered by `merge_group` so we don't upload it.
        if: always() && github.event_name != 'merge_group'
        with:
          name: results.sarif
          path: results.sarif

      - name: Set up actionlint
        run: |
          # In homebrew-core, setting `shell: /bin/bash` prevents shellcheck from running on
          # those steps, so let's change them to `shell: bash` temporarily for better linting.
          sed -i 's|shell: /bin/bash -x|shell: bash -x|' .github/workflows/*.y*ml

          # In homebrew-core, the JSON matcher needs to be accessible to the container host.
          cp "$(brew --repository)/.github/actionlint-matcher.json" "$HOME"

          echo "::add-matcher::$HOME/actionlint-matcher.json"

      - run: actionlint

  upload_sarif:
    needs: workflow_syntax
    # We want to always upload this even if `actionlint` failed.
    # This is only available on public repositories.
    if: >
      always() &&
      !contains(fromJSON('["cancelled", "skipped"]'), needs.workflow_syntax.result) &&
      !github.event.repository.private &&
      github.event_name != 'merge_group'
    runs-on: ubuntu-slim
    permissions:
      contents: read
      security-events: write
    steps:
      - name: Download SARIF file
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: results.sarif
          path: results.sarif

      - name: Upload SARIF file
        uses: github/codeql-action/upload-sarif@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
        with:
          sarif_file: results.sarif
          category: zizmor
