From 9297a143b686cb5cef4dde3204d2f5980d555578 Mon Sep 17 00:00:00 2001 From: "v.razuvaev" Date: Sat, 20 Jun 2026 16:56:20 +0300 Subject: [PATCH] Harden CI workflows Pin all third-party actions to commit SHAs (supply-chain protection), add explicit `permissions: { contents: read }` at workflow level, and set `persist-credentials: false` on every checkout step. Resolves zizmor findings: unpinned-uses, excessive-permissions, artipacked. --- .github/workflows/build.yml | 34 +++++++++++++++++---------- .github/workflows/static-analysis.yml | 11 ++++++--- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3235d3e..ab5b0c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,9 @@ on: branches: - master +permissions: + contents: read + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -25,10 +28,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - name: Setup PHP - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: ${{ matrix.php }} coverage: none @@ -36,7 +41,7 @@ jobs: tools: composer:v2 - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: ~/.composer/cache key: composer-${{ runner.os }}-${{ hashFiles('**/composer.json') }} @@ -54,10 +59,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - name: Setup PHP - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: '8.3' coverage: none @@ -65,7 +72,7 @@ jobs: tools: composer:v2 - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: ~/.composer/cache key: composer-${{ runner.os }}-${{ hashFiles('**/composer.json') }} @@ -83,10 +90,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - name: Setup PHP - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: '8.4' coverage: pcov @@ -94,7 +103,7 @@ jobs: tools: composer:v2 - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: ~/.composer/cache key: composer-${{ runner.os }}-${{ hashFiles('**/composer.json') }} @@ -115,12 +124,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: + persist-credentials: false fetch-depth: 0 - name: Setup PHP - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: '8.4' coverage: none @@ -128,7 +138,7 @@ jobs: tools: composer:v2 - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: ~/.composer/cache key: composer-${{ runner.os }}-${{ hashFiles('**/composer.json') }} diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 7aa424f..b44e7d3 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -6,6 +6,9 @@ on: branches: - master +permissions: + contents: read + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -17,10 +20,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - name: Setup PHP - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: '8.4' coverage: none @@ -28,7 +33,7 @@ jobs: tools: composer:v2 - name: Cache Composer dependencies - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: ~/.composer/cache key: composer-${{ runner.os }}-${{ hashFiles('**/composer.json') }}