diff --git a/.github/workflows/verify-action-sha-pins.yaml b/.github/workflows/verify-action-sha-pins.yaml new file mode 100644 index 0000000..ece2649 --- /dev/null +++ b/.github/workflows/verify-action-sha-pins.yaml @@ -0,0 +1,72 @@ +--- +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: 2024 The Linux Foundation + +name: "📌 Pinned Versions" +# Ensures GitHub Actions/Workflows are pinned to a commit SHA + +# yamllint disable-line rule:truthy +on: + workflow_dispatch: + pull_request: + branches: + - main + - master + paths: [".github/**"] + +permissions: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-actions: + name: "Check GitHub Workflows" + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + if: ${{ github.event_name == 'workflow_dispatch' }} + + - name: Checkout pull request + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + if: ${{ github.event_name != 'workflow_dispatch' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Get changed files + if: ${{ github.event_name != 'workflow_dispatch' }} + id: changed-files + # yamllint disable-line rule:line-length + uses: tj-actions/changed-files@bab30c2299617f6615ec02a68b9a40d10bd21366 # v45.0.5 + with: + since_last_remote_commit: true + files: | + .github/**/*.{yml,yaml} + + - name: Prune files NOT changed in pull request + if: ${{ github.event_name != 'workflow_dispatch' }} + env: + # yamllint disable-line rule:line-length + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + shell: bash + run: | + # Prune files NOT changed in pull request + find .github -type f -name '*.yaml' -o -name '*.yml' > listed.txt + for YAMLFILE in ${ALL_CHANGED_FILES}; do + echo "$YAMLFILE" >> changed.txt + done + grep -Fvf changed.txt listed.txt > excluded.txt + while IFS= read -r YAMLFILE + do + mv "$YAMLFILE" "$YAMLFILE.excluded" + done < excluded.txt + echo "Files to process:" + find .github -type f -name '*.yaml' -o -name '*.yml' + + - name: "Ensure SHA pinned actions" + # yamllint disable-line rule:line-length + uses: zgosalvez/github-actions-ensure-sha-pinned-actions@5d6ac37a4cef8b8df67f482a8e384987766f0213 # v3.0.17