diff --git a/.github/actions/sync/shared-config.rb b/.github/actions/sync/shared-config.rb index 7dd4d1e3..fa844705 100755 --- a/.github/actions/sync/shared-config.rb +++ b/.github/actions/sync/shared-config.rb @@ -29,6 +29,7 @@ def git(*args) rubocop_yaml = ".rubocop.yml" dependabot_yaml = ".github/dependabot.yml" docs_workflow_yaml = ".github/workflows/docs.yml" +actionlint_workflow_yaml = ".github/workflows/actionlint.yml" vale_ini = ".vale.ini" target_gemfile_lock = target_directory_path/"Gemfile.lock" @@ -98,6 +99,10 @@ def git(*args) rubydoc.brew.sh ruby-macho ].freeze +custom_actionlint_repos = %w[ + brew + homebrew-core +] rejected_docs_basenames = %w[ _config.yml CNAME @@ -116,6 +121,7 @@ def git(*args) rubocop_yaml, dependabot_yaml, deprecated_lock_threads, + actionlint_workflow_yaml, ".github/workflows/stale-issues.yml", ].each do |path| target_path = target_directory_path/path @@ -166,6 +172,10 @@ def git(*args) next unless docs_path.directory? FileUtils.cp homebrew_docs_workflow_yaml, target_path + when actionlint_workflow_yaml + next if custom_actionlint_repos.include?(repository_name) + + FileUtils.cp actionlint_workflow_yaml, target_path when vale_ini next if custom_docs_repos.include?(repository_name) diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml new file mode 100644 index 00000000..989679ad --- /dev/null +++ b/.github/workflows/actionlint.yml @@ -0,0 +1,79 @@ +# This file is synced from the `.github` repository, do not modify it directly. +name: Workflow Syntax + +on: + push: + branches: + - main + paths: + - '.github/workflows/*.ya?ml' + pull_request: + paths: + - '.github/workflows/*.ya?ml' + +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 + steps: + - name: Set up Homebrew + id: setup-homebrew + uses: Homebrew/actions/setup-homebrew@master + with: + core: false + cask: false + test-bot: false + + - name: Install tools + run: brew install actionlint shellcheck zizmor + + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - run: zizmor --format sarif . >results.sarif + + - name: Upload SARIF file + uses: actions/upload-artifact@v4 + with: + name: results.sarif + path: results.sarif + + - name: Set up actionlint + run: echo "::add-matcher::$(brew --repository)/.github/actionlint-matcher.json" + + - run: actionlint + + upload_sarif: + needs: workflow_syntax + runs-on: ubuntu-latest + permissions: + contents: read + security-events: write + steps: + - name: Download SARIF file + uses: actions/download-artifact@v4 + with: + name: results.sarif + path: results.sarif + + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: results.sarif + category: zizmor