Skip to content

chore(deps): Upgrade Composer dependencies - #49

Merged
soulevilx merged 6 commits into
developfrom
agent/upgrade-composer-dependencies
Aug 9, 2026
Merged

chore(deps): Upgrade Composer dependencies#49
soulevilx merged 6 commits into
developfrom
agent/upgrade-composer-dependencies

Conversation

@soulevilx

@soulevilx soulevilx commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Upgrade Composer dependencies to their latest compatible releases, including Guzzle 8.0.2 and jooservices/exceptions 1.0.0; retain Symfony Filesystem 7.4 because pdepend 2.16.2 does not yet support Symfony 8.
  • Remove superseded PHPStan baseline entries and update test fixtures for Guzzle 8.0.2 promise generics; dedupe the Reflection-based HandlerStack test bypass into a single shared tests/TestCase.php helper.
  • Add Codacy Security Scan and Fortify AST workflows; wire Codacy coverage upload into ci.yml.
  • Harden release.yml / pr-labeler.yml / semantic-pr.yml / scorecard.yml: SHA-pin all actions, scope release.yml permissions per-job, restore composer validate --strict + composer audit in the release gate, guard the PR labeler against base-branch config tampering, bump codeql-action pin, and add the Codacy badge to README.
  • Fix a required-status-checks mismatch on the repo ruleset (separate from this diff, applied directly via the GitHub API) so required checks match this workflow's actual job names.

Why

Started as a routine Composer bump; scope grew after diffing this repo's CI against jooservices/dto and jooservices/exceptions surfaced several drift points (job naming, missing release-gate steps, unpinned actions, a stale branch-protection required-checks list) that were fixed alongside it rather than filed separately.

Risk

Low. No src/ behavior change — only tests, CI workflows, and docs. Verified locally via composer lint:all, composer test (527 tests green), composer test:coverage (98.65%, above the 98% gate), and composer check.

Documentation impact

README and CHANGELOG updated to match the jooservices/exceptions ^1.0 bump (was documented as ^0.5).

Rollback

Revert this PR; no data/schema/runtime changes to unwind.

Checklist

  • composer lint:all
  • composer test
  • composer test:coverage
  • composer check
  • CI green on this PR

Validation

  • composer ci
  • composer audit --no-dev --locked --abandoned=fail

Summary by CodeRabbit

  • Dependency Updates

    • Updated the exceptions package requirement to the 1.x release series.
  • Tests

    • Improved HTTP client, middleware, and benchmark test coverage.
    • Strengthened coverage for invalid handler and response scenarios.
    • Removed obsolete static-analysis baseline entries.
  • Security & Quality

    • Added automated security scanning and coverage reporting.
    • Improved workflow safeguards and action version pinning.
  • Documentation

    • Updated dependency documentation and added a quality badge.
    • Documented the dependency update in the changelog.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request updates the exceptions dependency to version 1.x, adapts Guzzle handler tests to typed APIs, removes obsolete PHPStan entries, and adds CI security scanning and workflow permission changes.

Changes

Guzzle Handler Compatibility

Layer / File(s) Summary
Dependency and benchmark handler setup
composer.json, README.md, CHANGELOG.md, tests/Benchmark/CoreBench.php
The exceptions dependency uses ^1.0. The benchmark uses 10,000 mocked responses instead of a custom promise callback.
Middleware handler setup and malformed-handler coverage
tests/TestCase.php, tests/Unit/Middleware/*, tests/Unit/Support/FinalCoverageTest.php
Middleware tests use typed HandlerStack setup with MockHandler. A reflection helper injects malformed handlers for invalid-result coverage.
Test type assertions and PHPStan baseline cleanup
tests/Unit/Client/*, phpstan-tests-baseline.neon
Client tests add explicit type assertions and return types. Obsolete PHPStan diagnostics are removed.

CI Security and Release Workflows

Layer / File(s) Summary
CI coverage and action updates
.github/workflows/ci.yml, .github/workflows/scorecard.yml, .github/workflows/semantic-pr.yml
PHP setup and action references are updated. CI uploads Codacy coverage conditionally and retains coverage artifacts for two days.
Codacy and Fortify scanning workflows
.github/workflows/codacy.yml, .github/workflows/fortify.yml
Codacy and Fortify workflows run on repository events, handle credentials, normalize scan results, and upload SARIF output.
Workflow permissions and release validation
.github/workflows/pr-labeler.yml, .github/workflows/release.yml
The labeler checks out the base commit. Release permissions are scoped by job, actions are pinned, and Composer validation and auditing run before tests.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 18.18% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the primary dependency upgrade, although it does not mention the related CI and security workflow changes.
Description check ✅ Passed The description explains the changes, reasons, testing, documentation impact, rollback, and checklist with sufficient detail.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/upgrade-composer-dependencies

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov-commenter

codecov-commenter commented Aug 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.84%. Comparing base (8f76fc5) to head (d6007ee).
⚠️ Report is 7 commits behind head on develop.

Additional details and impacted files
@@            Coverage Diff             @@
##             develop      #49   +/-   ##
==========================================
  Coverage      98.84%   98.84%           
  Complexity      1023     1023           
==========================================
  Files             76       76           
  Lines           2430     2430           
==========================================
  Hits            2402     2402           
  Misses            28       28           
Flag Coverage Δ
unittests 98.84% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@soulevilx
soulevilx marked this pull request as ready for review August 9, 2026 00:14
@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php (1)

100-109: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use a Guzzle version-neutral HandlerStack PHPDoc where Guzzle 7 compatibility applies.

Guzzle 8.0.2 declares HandlerStack as generic, but Guzzle 7.10.0 does not. Since composer.json still supports ^7.10 || ^8.0, avoid generic HandlerStack<...> annotations at tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php:104, tests/Unit/Middleware/MiddlewarePipelineTest.php:72, and tests/Unit/Support/FinalCoverageTest.php:272, or document the Guzzle 7 PHPStan behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php` around lines 100 -
109, Use a Guzzle-version-neutral HandlerStack PHPDoc in setMalformedHandler and
the corresponding annotations at
tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php:100-109,
tests/Unit/Middleware/MiddlewarePipelineTest.php:68-77, and
tests/Unit/Support/FinalCoverageTest.php:268-277; remove the generic
HandlerStack type arguments or explicitly document the Guzzle 7 PHPStan
compatibility behavior at each site.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php`:
- Around line 100-109: Use a Guzzle-version-neutral HandlerStack PHPDoc in
setMalformedHandler and the corresponding annotations at
tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php:100-109,
tests/Unit/Middleware/MiddlewarePipelineTest.php:68-77, and
tests/Unit/Support/FinalCoverageTest.php:268-277; remove the generic
HandlerStack type arguments or explicitly document the Guzzle 7 PHPStan
compatibility behavior at each site.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4f8549c3-c34f-4eec-9df0-de413c7fdb63

📥 Commits

Reviewing files that changed from the base of the PR and between 6073e73 and baf6b62.

⛔ Files ignored due to path filters (1)
  • composer.lock is excluded by !**/*.lock
📒 Files selected for processing (8)
  • composer.json
  • phpstan-tests-baseline.neon
  • tests/Benchmark/CoreBench.php
  • tests/Unit/Client/ClientBuilderTest.php
  • tests/Unit/Client/HttpClientTest.php
  • tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php
  • tests/Unit/Middleware/MiddlewarePipelineTest.php
  • tests/Unit/Support/FinalCoverageTest.php
💤 Files with no reviewable changes (1)
  • phpstan-tests-baseline.neon

@codacy-production

codacy-production Bot commented Aug 9, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

🟢 Coverage ∅ diff coverage

Metric Results
Coverage variation Report missing for 6073e731
Diff coverage diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (6073e73) Report Missing Report Missing Report Missing
Head commit (d6007ee) 2072 2044 98.65%

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#49) 0 0 ∅ (not applicable)

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

1 Codacy didn't receive coverage data for the commit, or there was an error processing the received data. Check your integration for errors and validate that your coverage setup is correct.

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@github-actions github-actions Bot added the ci/cd label Aug 9, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 9, 2026
@soulevilx
soulevilx requested a lite review from Copilot August 9, 2026 01:19

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR upgrades Composer dependencies (notably Guzzle 8.0.2 and jooservices/exceptions 1.0.0), updates tests/benchmarks to align with Guzzle 8’s stricter handler/promise typing, and refreshes CI/security workflows (including adding Codacy/Fortify scans and tightening permissions/pins).

Changes:

  • Upgrade runtime/dev dependencies and refresh composer.lock.
  • Update tests and benchmarks to use MockHandler/HandlerStack patterns compatible with Guzzle 8 promise generics; remove now-superseded PHPStan baseline entries.
  • Harden/extend GitHub Actions workflows (SHA-pinning, permissions scoping, labeler base-sha checkout, add Codacy & Fortify workflows, add Codacy coverage upload).

Reviewed changes

Copilot reviewed 17 out of 18 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/Unit/Support/FinalCoverageTest.php Updates pipeline stack setup to use a MockHandler-backed HandlerStack for Guzzle 8 compatibility.
tests/Unit/Middleware/MiddlewarePipelineTest.php Adjusts handler injection in tests to bypass stricter handler typing under Guzzle 8.
tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php Uses MockHandler stacks and the new helper to exercise malformed-handler guards under Guzzle 8 typing.
tests/Unit/Client/HttpClientTest.php Adds stronger assertions around captured adapter options shape.
tests/Unit/Client/ClientBuilderTest.php Makes header assertions safer for static analysis; simplifies WAN IP provider return typing in the fixture.
tests/TestCase.php Adds a shared helper to force-set a handler onto a Guzzle HandlerStack for malformed-handler test coverage.
tests/Benchmark/CoreBench.php Reworks benchmark handler to a large MockHandler queue for long benchmark iterations.
README.md Adds a Codacy badge to the project header.
phpstan-tests-baseline.neon Removes obsolete baseline entries related to handler/promise typing and fixture return types.
composer.lock Locks updated dependency versions (Guzzle, promises, PHPUnit tooling, Symfony components, etc.).
composer.json Bumps jooservices/exceptions constraint to ^1.0.
.github/workflows/semantic-pr.yml Pins semantic PR title action to a specific commit SHA.
.github/workflows/scorecard.yml Updates pinned upload-sarif action SHA/version.
.github/workflows/release.yml Scopes job permissions, SHA-pins actions, and adds composer validation/audit in release validation.
.github/workflows/pr-labeler.yml Checks out base SHA to prevent PR-controlled labeler config from influencing labeling; SHA-pins labeler.
.github/workflows/fortify.yml Adds optional Fortify AST scanning workflow that skips cleanly without secrets.
.github/workflows/codacy.yml Adds Codacy Analysis CLI workflow producing SARIF for code scanning.
.github/workflows/ci.yml Updates setup-php pins, adds optional Codacy coverage upload, reduces artifact retention, and exports Codacy token env.
Suppressed comments (1)

composer.json:36

  • Bumping jooservices/exceptions from ^0.5 to ^1.0 is a major-version upgrade and changes the package's minimum dependency set. The README and CHANGELOG currently document jooservices/exceptions (^0.5) (e.g. README.md:33, CHANGELOG.md:34), so those docs should be updated (and a breaking-change note considered) to avoid conflicting guidance for consumers.
    "require": {
        "php": "^8.5",
        "guzzlehttp/guzzle": "^7.10 || ^8.0",
        "jooservices/exceptions": "^1.0",
        "monolog/monolog": "^3.10",
        "psr/http-client": "^1.0",
        "psr/log": "^3.0",
        "psr/simple-cache": "^3.0"

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread tests/TestCase.php Outdated
@soulevilx

Copy link
Copy Markdown
Contributor Author

Addressed the review feedback from this round of checks:

Fixed (d6007ee):

  • Copilot's setMalformedHandler() comment: parameter tightened from mixed to \Closure, and the reflection call now wraps ReflectionException into a clear self::fail() message instead of a raw fatal.
  • CodeRabbit's README.md/CHANGELOG.md staleness (via Copilot's suppressed comment): README.md said jooservices/exceptions (^0.5) after this PR bumps it to ^1.0 — fixed. CHANGELOG.md's ^0.5 mention is inside the dated [2.2.0] entry (historical record of what shipped then) and was left as-is per Keep a Changelog convention; added a new [Unreleased] entry instead for the ^1.0 bump.
  • CodeRabbit "Description check": PR description expanded with Why/Risk/Documentation impact/Rollback/Checklist sections.

Evaluated, not changed:

  • CodeRabbit's nitpick to drop the generic HandlerStack<...> PHPDoc for Guzzle 7 compatibility: kept the generic. Tested — removing it fails this repo's own required Lint - PHPStan check (missingType.generics, since PHPStan here runs against the installed Guzzle 8.0.2, which declares HandlerStack generic). The guzzle-7-compatibility CI job only runs composer test, not PHPStan, under the Guzzle 7 floor, so the annotation is accurate for everything actually type-checked in this repo.
  • CodeRabbit "Docstring Coverage" (28.57%, threshold 80%): not applied. This repo's CLAUDE.md and house style default to no comments unless documenting a non-obvious why — adding docstrings purely to hit a coverage percentage would go against that convention.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/ci.yml (1)

103-108: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Set explicit permissions for the tests job.

The job currently uses the repository default GITHUB_TOKEN permissions. This job installs dependencies and executes test code. Limit it to contents: read unless a command requires an additional permission.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 103 - 108, Add an explicit
least-privilege permissions block to the tests job in the workflow, granting
only contents: read for its GITHUB_TOKEN. Keep the existing tests job
configuration and environment unchanged.

Source: Linters/SAST tools

🧹 Nitpick comments (1)
tests/TestCase.php (1)

62-68: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Correct the setHandler() visibility statement.

HandlerStack::setHandler() is public in Guzzle 7.10.0 and 8.0.2. The docblock incorrectly describes it as private. Document the reflection use without describing a public API as private. (raw.githubusercontent.com)

Proposed documentation fix
-     * exercised. This reaches through Reflection into a private Guzzle
-     * method: it depends on `GuzzleHttp\HandlerStack::setHandler()` keeping
-     * its current name/visibility, and may need updating if a future Guzzle
-     * release changes that internal.
+     * exercised. This invokes Guzzle's public `setHandler()` through
+     * Reflection to install a deliberately malformed handler for this test.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/TestCase.php` around lines 62 - 68, Update the docblock above the
reflection helper in tests/TestCase.php to state that Guzzle’s public
HandlerStack::setHandler() is being invoked through Reflection, while preserving
the note about its method name and potential future changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 107-108: Remove CODACY_API_TOKEN from the workflow-level env
configuration and define it only within the “Upload coverage to Codacy” step.
Keep the token available for that upload while preventing dependency
installation and test steps from inheriting it.

In @.github/workflows/codacy.yml:
- Around line 32-33: Disable GitHub token persistence in both checkout steps by
adding persist-credentials: false to the checkout action in
.github/workflows/codacy.yml lines 32-33 and .github/workflows/fortify.yml lines
45-47.

---

Outside diff comments:
In @.github/workflows/ci.yml:
- Around line 103-108: Add an explicit least-privilege permissions block to the
tests job in the workflow, granting only contents: read for its GITHUB_TOKEN.
Keep the existing tests job configuration and environment unchanged.

---

Nitpick comments:
In `@tests/TestCase.php`:
- Around line 62-68: Update the docblock above the reflection helper in
tests/TestCase.php to state that Guzzle’s public HandlerStack::setHandler() is
being invoked through Reflection, while preserving the note about its method
name and potential future changes.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 437cd134-ac94-4fd9-abad-cf580507e0ee

📥 Commits

Reviewing files that changed from the base of the PR and between baf6b62 and d6007ee.

📒 Files selected for processing (14)
  • .github/workflows/ci.yml
  • .github/workflows/codacy.yml
  • .github/workflows/fortify.yml
  • .github/workflows/pr-labeler.yml
  • .github/workflows/release.yml
  • .github/workflows/scorecard.yml
  • .github/workflows/semantic-pr.yml
  • CHANGELOG.md
  • README.md
  • tests/Benchmark/CoreBench.php
  • tests/TestCase.php
  • tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php
  • tests/Unit/Middleware/MiddlewarePipelineTest.php
  • tests/Unit/Support/FinalCoverageTest.php
💤 Files with no reviewable changes (3)
  • tests/Unit/Middleware/MiddlewarePipelineCoverageTest.php
  • tests/Unit/Middleware/MiddlewarePipelineTest.php
  • tests/Unit/Support/FinalCoverageTest.php
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/Benchmark/CoreBench.php

Comment thread .github/workflows/ci.yml
Comment on lines +107 to +108
env:
CODACY_API_TOKEN: ${{ secrets.CODACY_API_TOKEN }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Limit CODACY_API_TOKEN to the Codacy upload step.

Line 108 exposes the token to dependency installation and test processes. An internal pull request can modify code executed before the upload step and transmit the token.

Move the environment variable to the Upload coverage to Codacy step.

Proposed fix
   tests:
     name: Tests & Coverage
     runs-on: ubuntu-latest
     needs: [lint]
-    env:
-      CODACY_API_TOKEN: ${{ secrets.CODACY_API_TOKEN }}
     services:
       mongodb:
@@
       - name: Upload coverage to Codacy
+        env:
+          CODACY_API_TOKEN: ${{ secrets.CODACY_API_TOKEN }}
         if: env.CODACY_API_TOKEN != ''
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
env:
CODACY_API_TOKEN: ${{ secrets.CODACY_API_TOKEN }}
- name: Upload coverage to Codacy
env:
CODACY_API_TOKEN: ${{ secrets.CODACY_API_TOKEN }}
if: env.CODACY_API_TOKEN != ''
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 107 - 108, Remove CODACY_API_TOKEN
from the workflow-level env configuration and define it only within the “Upload
coverage to Codacy” step. Keep the token available for that upload while
preventing dependency installation and test steps from inheriting it.

Comment on lines +32 to +33
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Do not persist the GitHub token in scan checkouts.

actions/checkout stores the job token in local Git configuration by default. The following scan tools process pull request contents after checkout. Disable credential persistence in both steps.

  • .github/workflows/codacy.yml#L32-L33: add persist-credentials: false to the checkout step.
  • .github/workflows/fortify.yml#L45-L47: add persist-credentials: false to the checkout step.
🧰 Tools
🪛 zizmor (1.29.0)

[warning] 32-33: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

📍 Affects 2 files
  • .github/workflows/codacy.yml#L32-L33 (this comment)
  • .github/workflows/fortify.yml#L45-L47
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/codacy.yml around lines 32 - 33, Disable GitHub token
persistence in both checkout steps by adding persist-credentials: false to the
checkout action in .github/workflows/codacy.yml lines 32-33 and
.github/workflows/fortify.yml lines 45-47.

Source: Linters/SAST tools

@soulevilx
soulevilx merged commit c55f024 into develop Aug 9, 2026
37 checks passed
soulevilx added a commit that referenced this pull request Aug 9, 2026
* ci(deps): bump github/codeql-action/upload-sarif from 4.36.3 to 4.37.4 (#47)

Bumps [github/codeql-action/upload-sarif](https://github.com/github/codeql-action) from 4.36.3 to 4.37.4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@54f647b...f205ea1)

---
updated-dependencies:
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#46)

Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](actions/checkout@v7...v7.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Viet Vu <jooservices@gmail.com>

* chore(deps-dev): bump the dev-dependencies group across 1 directory with 6 updates (#42)

Bumps the dev-dependencies group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer) | `3.95.15` | `3.95.18` |
| [laravel/pint](https://github.com/laravel/pint) | `1.29.3` | `1.30.0` |
| [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source) | `2.2.5` | `2.2.7` |
| [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) | `13.2.4` | `13.2.6` |
| [symfony/var-dumper](https://github.com/symfony/var-dumper) | `8.1.1` | `8.1.2` |



Updates `friendsofphp/php-cs-fixer` from 3.95.15 to 3.95.18
- [Release notes](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases)
- [Changelog](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/CHANGELOG.md)
- [Commits](PHP-CS-Fixer/PHP-CS-Fixer@v3.95.15...v3.95.18)

Updates `laravel/pint` from 1.29.3 to 1.30.0
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](laravel/pint@v1.29.3...v1.30.0)

Updates `phpstan/phpstan` from 2.2.5 to 2.2.7
- [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits)

Updates `phpunit/phpunit` from 13.2.4 to 13.2.6
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/13.2.6/ChangeLog-13.2.md)
- [Commits](sebastianbergmann/phpunit@13.2.4...13.2.6)

Updates `symfony/filesystem` from 7.4.11 to 7.4.15
- [Release notes](https://github.com/symfony/filesystem/releases)
- [Changelog](https://github.com/symfony/filesystem/blob/8.2/CHANGELOG.md)
- [Commits](symfony/filesystem@v7.4.11...v7.4.15)

Updates `symfony/var-dumper` from 8.1.1 to 8.1.2
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/8.2/CHANGELOG.md)
- [Commits](symfony/var-dumper@v8.1.1...v8.1.2)

---
updated-dependencies:
- dependency-name: friendsofphp/php-cs-fixer
  dependency-version: 3.95.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: laravel/pint
  dependency-version: 1.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: phpstan/phpstan
  dependency-version: 2.2.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: phpunit/phpunit
  dependency-version: 13.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: symfony/filesystem
  dependency-version: 7.4.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
- dependency-name: symfony/var-dumper
  dependency-version: 8.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Viet Vu <jooservices@gmail.com>

* chore(deps): bump guzzlehttp/guzzle from 8.0.0 to 8.0.1 (#39)

Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/8.0/CHANGELOG.md)
- [Commits](guzzle/guzzle@8.0.0...8.0.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Viet Vu <jooservices@gmail.com>

* chore(deps-dev): bump squizlabs/php_codesniffer from 4.0.1 to 4.0.2 (#48)

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 4.0.1 to 4.0.2.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/4.x/CHANGELOG-4.x.md)
- [Commits](PHPCSStandards/PHP_CodeSniffer@4.0.1...4.0.2)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-version: 4.0.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Viet Vu <jooservices@gmail.com>

* ci(deps): bump actions/labeler from 6 to 7 (#37)

Bumps [actions/labeler](https://github.com/actions/labeler) from 6 to 7.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](actions/labeler@v6...v7)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#36)

Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.3 to 2.4.4.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](ossf/scorecard-action@4eaacf0...2d11466)

---
updated-dependencies:
- dependency-name: ossf/scorecard-action
  dependency-version: 2.4.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Viet Vu <jooservices@gmail.com>

* chore(deps): Upgrade Composer dependencies (#49)

* chore(deps): upgrade Composer dependencies

* test(bench): dedupe handler-stack bypass helper and clarify magic numbers

* ci: add Codacy security scan and Fortify AST workflows

* ci: bump setup-php pin and cap coverage artifact retention

* ci: harden release/labeler workflows and add Codacy badge

* fix: address PR review feedback on handler bypass and stale docs

* feat(transport): Add native ext-curl transport with builder middleware support (#50)

* feat(transport): add native ext-curl transport with builder middleware support

* docs(guide): Document the uppercase PR-title subject requirement

* fix(transport): Fix CI failures and address review feedback on the cURL transport

* chore(codacy): Move nosemgrep suppressions inline and simplify guidance prose

* docs(claude): Split remaining compound bullet and remove ambiguous pronoun

* test(transport): Cover duplicate multipart names, string/invalid query, auth-type fallback, and UA case-insensitivity

* fix(transport): Register buffered multipart temp file before writing to it

* feat(curl): Add portable cURL transport enhancements (#51)

* feat(curl): Add portable cURL transport enhancements

* test(curl): Cover portable transport edge cases

* fix(curl): Address PR review feedback for transport enhancements

* test(coverage): Raise class and method coverage above 95%

* fix(guzzle): Guard on_headers for Guzzle 7 MockHandler throwables

* chore(codacy): Exclude tests from Codacy static analysis

* fix(middleware): Prevent same-name insert from corrupting pipeline order

* chore(release): Prepare 2.4.0

* fix(release): Address 2.4.0 review feedback

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd configuration dependencies documentation Improvements or additions to documentation tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants