Skip to content

chore: bump the actions-all group across 1 directory with 14 updates - #21

Open
dependabot[bot] wants to merge 3 commits into
mainfrom
dependabot/github_actions/actions-all-5a53a122b0
Open

chore: bump the actions-all group across 1 directory with 14 updates#21
dependabot[bot] wants to merge 3 commits into
mainfrom
dependabot/github_actions/actions-all-5a53a122b0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 13, 2026

Copy link
Copy Markdown
Contributor

Bumps the actions-all group with 14 updates in the / directory:

Package From To
astral-sh/setup-uv 4.2.0 9.0.0
actions/checkout 4 7
anthropics/claude-code-action 1.0.169 1.0.183
github/codeql-action/init 3.35.5 4.37.3
github/codeql-action/analyze 3.35.5 4.37.3
docker/setup-buildx-action 3 4
docker/login-action 3 4
docker/build-push-action 6 7
actions/setup-python 5 7
actions/cache 5.0.5 6.1.0
actions/upload-artifact 4.6.2 7.0.1
actions/setup-node 4.4.0 7.0.0
pypa/gh-action-pypi-publish 1.13.0 1.14.1
actions/download-artifact 4.3.0 8.0.1

Updates astral-sh/setup-uv from 4.2.0 to 9.0.0

Release notes

Sourced from astral-sh/setup-uv's releases.

v9.0.0 🌈 Change prune-cache default to false

Changes

This release disables the default cache cache pruning to ease the load on the PyPi infrastructure. Since users might experience more GitHub Actions cache usage which might result in higher costs this is marked as a breaking change. To read more on why we did this (now) you can read the detailed analysis and reasoning in #967

Besides this big breaking change we also have a small bugfix while building caches for linux distributions that behave a big different than the "big ones" and a speed up in version resolution by only reading the version manifest until a matching version is found saving runtime and network bandwith.

🚨 Breaking changes

🐛 Bug fixes

  • fix: fall back to distribution ID when os-release has no version field @​cxzhong (#961)

🚀 Enhancements

🧰 Maintenance

📚 Documentation

⬆️ Dependency updates

v8.2.0 🌈 New inputs quiet and download-from-astral-mirror

Changes

This release brings two new inputs and a few bug fixes.

New inputs

Lets talk about the new inputs first.

quiet

Pretty simple. It turns of all info loggings. Useful if you use this in a composite action and are not interested in all the details. In the upcoming releases we will add log groups to fully implement support for "less noise"

[!NOTE]
Warnings and errors are always logged.

... (truncated)

Commits
  • c771a70 chore(deps): roll up Dependabot updates (#970)
  • 2f537ca chore: update known checksums for 0.11.30 (#968)
  • 2269552 Speed up version client by partial response reads (#807)
  • 47a7f4f Change prune-cache default to false (#967)
  • 71966ef chore(deps): roll up Dependabot updates (#962)
  • f12b1f0 fix: fall back to distribution ID when os-release has no version field (#961)
  • ecd24dd chore: update known checksums for 0.11.29 (#960)
  • 6a19136 docs: update version references to v8.3.2 (#949)
  • 11f9893 chore: roll up Dependabot updates (#948)
  • f798556 docs: update version references to v8.3.1 (#946)
  • Additional commits viewable in compare view

Updates actions/checkout from 4 to 7

Release notes

Sourced from actions/checkout's releases.

v7.0.0

What's Changed

New Contributors

Full Changelog: actions/checkout@v6.0.3...v7.0.0

v6.1.0

What's Changed

https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/ for more details about this breaking change

Full Changelog: actions/checkout@v6.0.3...v6.1.0

v6.0.3

What's Changed

New Contributors

Full Changelog: actions/checkout@v6...v6.0.3

v6.0.2

What's Changed

Full Changelog: actions/checkout@v6.0.1...v6.0.2

v6.0.1

What's Changed

... (truncated)

Commits

Updates anthropics/claude-code-action from 1.0.169 to 1.0.183

Release notes

Sourced from anthropics/claude-code-action's releases.

v1.0.183

Full Changelog: anthropics/claude-code-action@v1...v1.0.183

v1.0.182

Full Changelog: anthropics/claude-code-action@v1...v1.0.182

v1.0.181

What's Changed

New Contributors

Full Changelog: anthropics/claude-code-action@v1...v1.0.181

v1.0.180

Full Changelog: anthropics/claude-code-action@v1...v1.0.180

v1.0.179

Full Changelog: anthropics/claude-code-action@v1...v1.0.179

v1.0.178

Full Changelog: anthropics/claude-code-action@v1...v1.0.178

v1.0.177

Full Changelog: anthropics/claude-code-action@v1...v1.0.177

v1.0.176

What's Changed

New Contributors

Full Changelog: anthropics/claude-code-action@v1...v1.0.176

v1.0.175

... (truncated)

Commits
  • be7b93b chore: bump Claude Code to 2.1.220 and Agent SDK to 0.3.220
  • e0cf66d chore: bump Claude Code to 2.1.219 and Agent SDK to 0.3.219
  • 44423bd chore: bump Claude Code to 2.1.218 and Agent SDK to 0.3.218
  • b00a341 fix: share one exchanged WIF credential across spawned Claude processes (#1407)
  • fa7e2f0 chore: bump Claude Code to 2.1.217 and Agent SDK to 0.3.217
  • b76a077 chore: bump Claude Code to 2.1.216 and Agent SDK to 0.3.216
  • af0559e chore: bump Claude Code to 2.1.215 and Agent SDK to 0.3.215
  • 3553f84 chore: bump Claude Code to 2.1.214 and Agent SDK to 0.3.214
  • 700e7f8 chore: bump Claude Code to 2.1.212 and Agent SDK to 0.3.212
  • 3e807ec fix: handle null comment/review author from deleted accounts (#1490)
  • Additional commits viewable in compare view

Updates github/codeql-action/init from 3.35.5 to 4.37.3

Release notes

Sourced from github/codeql-action/init's releases.

v4.37.3

No user facing changes.

v4.37.2

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

v4.37.1

  • Upcoming breaking change: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. #3956
  • Update default CodeQL bundle version to 2.26.1. #4019

v4.37.0

  • Update default CodeQL bundle version to 2.26.0. #3995
  • In addition to the existing input format, the config-file input for the codeql-action/init step will soon support a new [owner/]repo[@ref][:path] format. All components except the repository name are optional. If omitted, owner defaults to the same owner as the repository the analysis is running for, ref to main, and path to .github/codeql-action.yaml. Support for this format ships in this version of the CodeQL Action, but will only be enabled over the coming weeks. #3973

v4.36.3

No user facing changes.

v4.36.2

  • Cache CodeQL CLI version information across Actions steps. #3943
  • Reduce requests while waiting for analysis processing by using exponential backoff when polling SARIF processing status. #3937
  • Update default CodeQL bundle version to 2.25.6. #3948

v4.36.1

No user facing changes.

v4.36.0

  • Breaking change: Bump the minimum required CodeQL bundle version to 2.19.4. #3894
  • Add support for SHA-256 Git object IDs. #3893
  • Update default CodeQL bundle version to 2.25.5. #3926

v4.35.5

  • We have improved how the JavaScript bundles for the CodeQL Action are generated to avoid duplication across bundles and reduce the size of the repository by around 70%. This should have no effect on the runtime behaviour of the CodeQL Action. #3899
  • For performance and accuracy reasons, improved incremental analysis will now only be enabled on a pull request when diff-informed analysis is also enabled for that run. If diff-informed analysis is unavailable (for example, because the PR diff ranges could not be computed), the action will fall back to a full analysis. #3791
  • If multiple inputs are provided for the GitHub-internal analysis-kinds input, only code-scanning will be enabled. The analysis-kinds input is experimental, for GitHub-internal use only, and may change without notice at any time. #3892
  • Added an experimental change which, when running a Code Scanning analysis for a PR with improved incremental analysis enabled, prefers CodeQL CLI versions that have a cached overlay-base database for the configured languages. This speeds up analysis for a repository when there is not yet a cached overlay-base database for the latest CLI version. We expect to roll this change out to everyone in May. #3880

v4.35.4

  • Update default CodeQL bundle version to 2.25.4. #3881

v4.35.3

  • Upcoming breaking change: Add a deprecation warning for customers using CodeQL version 2.19.3 and earlier. These versions of CodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise Server 3.15, and will be unsupported by the next minor release of the CodeQL Action. #3837
  • Configurations for private registries that use Cloudsmith or GCP OIDC are now accepted. #3850
  • Best-effort connection tests for private registries now use GET requests instead of HEAD for better compatibility with various registry implementations. For NuGet feeds, the test is now always performed against the service index. #3853
  • Fixed a bug where two diagnostics produced within the same millisecond could overwrite each other on disk, causing one of them to be lost. #3852
  • Update default CodeQL bundle version to 2.25.3. #3865

v4.35.2

  • The undocumented TRAP cache cleanup feature that could be enabled using the CODEQL_ACTION_CLEANUP_TRAP_CACHES environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the trap-caching: false input to the init Action. #3795
  • The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. #3789

... (truncated)

Changelog

Sourced from github/codeql-action/init's changelog.

CodeQL Action Changelog

See the releases page for the relevant changes to the CodeQL CLI and language packs.

[UNRELEASED]

  • This version of the CodeQL Action adds support for the tools input for the codeql-action/init step to be specified using a github-codeql-tools repository property. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to toolcache to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for tools in the workflow definition always takes precedence unless the value of the repository property starts with !. #4037

4.37.3 - 22 Jul 2026

No user facing changes.

4.37.2 - 21 Jul 2026

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

4.37.1 - 16 Jul 2026

  • Upcoming breaking change: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. #3956
  • Update default CodeQL bundle version to 2.26.1. #4019

4.37.0 - 08 Jul 2026

  • Update default CodeQL bundle version to 2.26.0. #3995
  • In addition to the existing input format, the config-file input for the codeql-action/init step will soon support a new [owner/]repo[@ref][:path] format. All components except the repository name are optional. If omitted, owner defaults to the same owner as the repository the analysis is running for, ref to main, and path to .github/codeql-action.yaml. Support for this format ships in this version of the CodeQL Action, but will only be enabled over the coming weeks. #3973

4.36.3 - 01 Jul 2026

No user facing changes.

4.36.2 - 04 Jun 2026

  • Cache CodeQL CLI version information across Actions steps. #3943
  • Reduce requests while waiting for analysis processing by using exponential backoff when polling SARIF processing status. #3937
  • Update default CodeQL bundle version to 2.25.6. #3948

4.36.1 - 02 Jun 2026

No user facing changes.

4.36.0 - 22 May 2026

  • Breaking change: Bump the minimum required CodeQL bundle version to 2.19.4. #3894
  • Add support for SHA-256 Git object IDs. #3893
  • Update default CodeQL bundle version to 2.25.5. #3926

4.35.5 - 15 May 2026

  • We have improved how the JavaScript bundles for the CodeQL Action are generated to avoid duplication across bundles and reduce the size of the repository by around 70%. This should have no effect on the runtime behaviour of the CodeQL Action. #3899

... (truncated)

Commits
  • e4fba86 Merge pull request #4031 from github/update-v4.37.3-72f6a9da0
  • fb50ab5 Update changelog for v4.37.3
  • 72f6a9d Merge pull request #4030 from github/mbg/fix/no-proxy
  • 3b5ee58 Use default request options instead of undefined
  • bfb6be4 Merge pull request #4028 from github/mergeback/v4.37.2-to-main-e0647621
  • 526ab84 Rebuild
  • d6217b9 Update changelog and version after v4.37.2
  • e064762 Merge pull request #4027 from github/update-v4.37.2-385bcdc5a
  • e0faed8 Add a couple of change notes
  • 73aad0e Update changelog for v4.37.2
  • Additional commits viewable in compare view

Updates github/codeql-action/analyze from 3.35.5 to 4.37.3

Release notes

Sourced from github/codeql-action/analyze's releases.

v4.37.3

No user facing changes.

v4.37.2

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

v4.37.1

  • Upcoming breaking change: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. #3956
  • Update default CodeQL bundle version to 2.26.1. #4019

v4.37.0

  • Update default CodeQL bundle version to 2.26.0. #3995
  • In addition to the existing input format, the config-file input for the codeql-action/init step will soon support a new [owner/]repo[@ref][:path] format. All components except the repository name are optional. If omitted, owner defaults to the same owner as the repository the analysis is running for, ref to main, and path to .github/codeql-action.yaml. Support for this format ships in this version of the CodeQL Action, but will only be enabled over the coming weeks. #3973

v4.36.3

No user facing changes.

v4.36.2

  • Cache CodeQL CLI version information across Actions steps. #3943
  • Reduce requests while waiting for analysis processing by using exponential backoff when polling SARIF processing status. #3937
  • Update default CodeQL bundle version to 2.25.6. #3948

v4.36.1

No user facing changes.

v4.36.0

  • Breaking change: Bump the minimum required CodeQL bundle version to 2.19.4. #3894
  • Add support for SHA-256 Git object IDs. #3893
  • Update default CodeQL bundle version to 2.25.5. #3926

v4.35.5

  • We have improved how the JavaScript bundles for the CodeQL Action are generated to avoid duplication across bundles and reduce the size of the repository by around 70%. This should have no effect on the runtime behaviour of the CodeQL Action. #3899
  • For performance and accuracy reasons, improved incremental analysis will now only be enabled on a pull request when diff-informed analysis is also enabled for that run. If diff-informed analysis is unavailable (for example, because the PR diff ranges could not be computed), the action will fall back to a full analysis. #3791
  • If multiple inputs are provided for the GitHub-internal analysis-kinds input, only code-scanning will be enabled. The analysis-kinds input is experimental, for GitHub-internal use only, and may change without notice at any time. #3892
  • Added an experimental change which, when running a Code Scanning analysis for a PR with improved incremental analysis enabled, prefers CodeQL CLI versions that have a cached overlay-base database for the configured languages. This speeds up analysis for a repository when there is not yet a cached overlay-base database for the latest CLI version. We expect to roll this change out to everyone in May. #3880

v4.35.4

  • Update default CodeQL bundle version to 2.25.4. #3881

v4.35.3

  • Upcoming breaking change: Add a deprecation warning for customers using CodeQL version 2.19.3 and earlier. These versions of CodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise Server 3.15, and will be unsupported by the next minor release of the CodeQL Action. #3837
  • Configurations for private registries that use Cloudsmith or GCP OIDC are now accepted. #3850
  • Best-effort connection tests for private registries now use GET requests instead of HEAD for better compatibility with various registry implementations. For NuGet feeds, the test is now always performed against the service index. #3853
  • Fixed a bug where two diagnostics produced within the same millisecond could overwrite each other on disk, causing one of them to be lost. #3852
  • Update default CodeQL bundle version to 2.25.3. #3865

v4.35.2

  • The undocumented TRAP cache cleanup feature that could be enabled using the CODEQL_ACTION_CLEANUP_TRAP_CACHES environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the trap-caching: false input to the init Action. #3795
  • The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. #3789

... (truncated)

Changelog

Sourced from github/codeql-action/analyze's changelog.

CodeQL Action Changelog

See the releases page for the relevant changes to the CodeQL CLI and language packs.

[UNRELEASED]

  • This version of the CodeQL Action adds support for the tools input for the codeql-action/init step to be specified using a github-codeql-tools repository property. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to toolcache to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for tools in the workflow definition always takes precedence unless the value of the repository property starts with !. #4037

4.37.3 - 22 Jul 2026

No user facing changes.

4.37.2 - 21 Jul 2026

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

4.37.1 - 16 Jul 2026

  • Upcoming breaking change: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. #3956
  • Update default CodeQL bundle version to 2.26.1. #4019

4.37.0 - 08 Jul 2026

  • Update default CodeQL bundle version to 2.26.0. #3995
  • In addition to the existing input format, the config-file input for the codeql-action/init step will soon support a new [owner/]repo[@ref][:path] format. All components except the repository name are optional. If omitted, owner defaults to the same owner as the repository the analysis is running for, ref to main, and path to .github/codeql-action.yaml. Support for this format ships in this version of the CodeQL Action, but will only be enabled over the coming weeks. #3973

4.36.3 - 01 Jul 2026

No user facing changes.

4.36.2 - 04 Jun 2026

  • Cache CodeQL CLI version information across Actions steps. #3943
  • Reduce requests while waiting for analysis processing by using exponential backoff when polling SARIF processing status. #3937
  • Update default CodeQL bundle version to 2.25.6. #3948

4.36.1 - 02 Jun 2026

No user facing changes.

4.36.0 - 22 May 2026

  • Breaking change: Bump the minimum required CodeQL bundle version to 2.19.4. #3894
  • Add support for SHA-256 Git object IDs. #3893
  • Update default CodeQL bundle version to 2.25.5. #3926

4.35.5 - 15 May 2026

  • We have improved how the JavaScript bundles for the CodeQL Action are generated to avoid duplication across bundles and reduce the size of the repository by around 70%. This should have no effect on the runtime behaviour of the CodeQL Action. #3899

... (truncated)

Commits
  • e4fba86 Merge pull request #4031 from github/update-v4.37.3-72f6a9da0
  • fb50ab5 Update changelog for v4.37.3
  • 72f6a9d Merge pull request #4030 from github/mbg/fix/no-proxy
  • 3b5ee58 Use default request options instead of undefined
  • bfb6be4 Merge pull request #4028 from github/mergeback/v4.37.2-to-main-e0647621
  • 526ab84 Rebuild
  • d6217b9 Update changelog and version after v4.37.2
  • e064762 Merge pull request #4027 from github/update-v4.37.2-385bcdc5a
  • e0faed8 Add a couple of change notes
  • 73aad0e Update changelog for v4.37.2
  • Additional commits viewable in compare view

Updates docker/setup-buildx-action from 3 to 4

Release notes

Sourced from docker/setup-buildx-action's releases.

v4.0.0

Full Changelog: docker/setup-buildx-action@v3.12.0...v4.0.0

v3.12.0

Full Changelog: docker/setup-buildx-action@v3.11.1...v3.12.0

v3.11.1

Full Changelog: docker/setup-buildx-action@v3.11.0...v3.11.1

v3.11.0

Full Changelog: docker/setup-buildx-action@v3.10.0...v3.11.0

v3.10.0

Full Changelog: docker/setup-buildx-action@v3.9.0...v3.10.0

v3.9.0

Full Changelog: docker/setup-buildx-action@v3.8.0...v3.9.0

v3.8.0

@dependabot @github

dependabot Bot commented on behalf of github Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: github-actions. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Jul 13, 2026
@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Jul 13, 2026
@dependabot dependabot Bot changed the title chore: bump the actions-all group with 14 updates chore: bump the actions-all group across 1 directory with 14 updates Jul 22, 2026
@dependabot
dependabot Bot force-pushed the dependabot/github_actions/actions-all-5a53a122b0 branch 4 times, most recently from c6fad67 to 717c5cb Compare July 24, 2026 21:15
Bumps the actions-all group with 14 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `4.2.0` | `9.0.0` |
| [actions/checkout](https://github.com/actions/checkout) | `4` | `7` |
| [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action) | `1.0.169` | `1.0.183` |
| [github/codeql-action/init](https://github.com/github/codeql-action) | `3.35.5` | `4.37.3` |
| [github/codeql-action/analyze](https://github.com/github/codeql-action) | `3.35.5` | `4.37.3` |
| [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3` | `4` |
| [docker/login-action](https://github.com/docker/login-action) | `3` | `4` |
| [docker/build-push-action](https://github.com/docker/build-push-action) | `6` | `7` |
| [actions/setup-python](https://github.com/actions/setup-python) | `5` | `7` |
| [actions/cache](https://github.com/actions/cache) | `5.0.5` | `6.1.0` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.2` | `7.0.1` |
| [actions/setup-node](https://github.com/actions/setup-node) | `4.4.0` | `7.0.0` |
| [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) | `1.13.0` | `1.14.1` |
| [actions/download-artifact](https://github.com/actions/download-artifact) | `4.3.0` | `8.0.1` |



Updates `astral-sh/setup-uv` from 4.2.0 to 9.0.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@38f3f10...c771a70)

Updates `actions/checkout` from 4 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](actions/checkout@v4...v7)

Updates `anthropics/claude-code-action` from 1.0.169 to 1.0.183
- [Release notes](https://github.com/anthropics/claude-code-action/releases)
- [Commits](anthropics/claude-code-action@37b464c...be7b93b)

Updates `github/codeql-action/init` from 3.35.5 to 4.37.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@458d36d...e4fba86)

Updates `github/codeql-action/analyze` from 3.35.5 to 4.37.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@458d36d...e4fba86)

Updates `docker/setup-buildx-action` from 3 to 4
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](docker/setup-buildx-action@v3...v4)

Updates `docker/login-action` from 3 to 4
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@v3...v4)

Updates `docker/build-push-action` from 6 to 7
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](docker/build-push-action@v6...v7)

Updates `actions/setup-python` from 5 to 7
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v5...v7)

Updates `actions/cache` from 5.0.5 to 6.1.0
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@27d5ce7...55cc834)

Updates `actions/upload-artifact` from 4.6.2 to 7.0.1
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v4.6.2...043fb46)

Updates `actions/setup-node` from 4.4.0 to 7.0.0
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](actions/setup-node@49933ea...8207627)

Updates `pypa/gh-action-pypi-publish` from 1.13.0 to 1.14.1
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](pypa/gh-action-pypi-publish@ed0c539...ba38be9)

Updates `actions/download-artifact` from 4.3.0 to 8.0.1
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@d3f86a1...3e5f45b)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: actions/checkout
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: actions/download-artifact
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: actions/setup-node
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: actions/setup-python
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: anthropics/claude-code-action
  dependency-version: 1.0.171
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions-all
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.3.2
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.37.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: github/codeql-action/init
  dependency-version: 4.37.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-all
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-all
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/github_actions/actions-all-5a53a122b0 branch from 717c5cb to efa0268 Compare July 27, 2026 18:19

@uipreliga uipreliga left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Review: chore: bump the actions-all group across 1 directory with 14 updates

PR #21 by @dependabot · dependabot/github_actions/actions-all-5a53a122b0main · OPEN · reviewed against 1591548 · all 8 axes · 2026-07-27T20:41Z

Change class: complex — 14 GitHub Actions bumps, 9 crossing a major version, on the release/publish path and inside the published composite action (action.yml), so correctness requires checking each action's breaking changes rather than reading the diff

A clean, high-discipline dependency-bump PR on an exceptionally healthy codebase (perfect scores on type safety, architecture, and error handling; zero critical or high findings in the Python surface), where the only real risks live entirely in the CI/publishing layer: the published composite action's unparameterized astral-sh/setup-uv bump to v9.0.0 silently rebinds the graded toolchain to whatever uv the consumer's repo pins (plus an uninvited unpruned cache write and a new node24 runner floor) and ships to every @v0 consumer on the next release, while a pre-existing two-tier pinning convention leaves five mutable-tag refs — including the push-to-main docker build that shares an image with the SHA-pinned release.yml path — outside the repo's own SHA-pin policy with no mechanical guard; bottom line: merge-ready once action.yml:83 gets an explicit with: block, with the pinning convergence and an actionlint/CE-rule guard as fast follow-ups.

Summary

Axis Score 🔴 🟠 🟡 🔵 Top Issue
1. Code Quality & Style 9.4 / 10 0 0 1 1 Two-tier pinning convention: 5 bumped uses: refs left on mutable major tags while the other 55 repo refs are SHA-pinned (incl. the docker buildcache producer/consumer pair), with no guard test enforcing the convention
2. Type Safety 10 / 10 0 0 0 0
3. Test Health 9.9 / 10 0 0 0 1 No workflow linter runs anywhere in CI, so a 9-file / 50-line workflow edit lands with zero mechanical validation
4. Security 9.9 / 10 0 0 0 1 Security-rationale comments attached to the two bumped refs in claude-pr-review.yml no longer match the pinned versions' behavior
5. Architecture & Design 10 / 10 0 0 0 0
6. Error Handling & Resilience 10 / 10 0 0 0 0
7. API Surface & Maintainability 9.9 / 10 0 0 0 1 CI tutorial's consumer-facing gate recipe left stale by these bumps — it still teaches action majors that no longer match any workflow in the repo, with no parity guard
8. Evaluation Harness Quality 9 / 10 0 1 0 0 Published composite action's setup-uv step passes no with:, so the v4.2.0→v9.0.0 bump silently rebinds defaults (cache/prune-cache, uv-version resolution from the consumer's pyproject, PATH, Node runtime) for every @v0 consumer, with no opt-out input and no doc note

Overall Score: 9.8 / 10 · Weakest Axis: Evaluation Harness Quality at 9 / 10
Totals: 🔴 0 · 🟠 1 · 🟡 1 · 🔵 4 across 8 axes.

Blockers

  1. [Axis 8] Published composite action's setup-uv step passes no with:, so the v4.2.0→v9.0.0 bump silently rebinds defaults (cache/prune-cache, uv-version resolution from the consumer's pyproject, PATH, Node runtime) for every @v0 consumer, with no opt-out input and no doc note (action.yml:83) — action.yml:83 is uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with no with: block, so all four of these defaults changed under it (read from the two pinned action.yml blobs at SHA 38f3f10… = v4.2.0 and c771a70… = v9.0.0):
  2. version: v4 default: "latest" → v9 default: "" ("Defaults to the version in pyproject.toml or 'latest'"). v9 resolves it from working-directory (v9 default ${{ github.workspace }} = the CONSUMER's repo) via getWorkspaceCandidates()uv.toml, then pyproject.tomlpyproject.tool?.uv?.["required-version"] (setup-uv src/version/version-request-resolver.ts + src/version/file-parser.ts). A consumer repo that pins an old uv now gets THAT uv for the next step's uv tool install "coder-eval==$CE_VERSION" (action.yml:94).
  3. enable-cache: "false""auto" (= true on GitHub-hosted). The gate now restores AND saves a uv cache entry into the consumer's 10 GB repo cache uninvited, keyed on the consumer's own files (cache-dependency-glob now includes **/pyproject.toml, **/uv.lock, **/*requirements*.txt).
  4. prune-cache: "true""false" (v9.0.0's headline breaking change) — that cache entry is unpruned.
  5. Runtime using: "node20"using: "node24" (v7.0.0 breaking change), requiring Actions Runner ≥ 2.327.1; on an older self-hosted runner the gate's FIRST step hard-fails.
    Blast radius: per CLAUDE.md, release.yml maintains action.yml's version: default *plus the moving v<major> tag, so every UiPath/coder_eval@v0 consumer (README.md:105, docs/CI_GATE.md:22) picks this up with no coder-eval version change to blame. The harness's own coverage cannot catch it: the dogfood job (pr-checks.yml:856 uses: ./) runs in coder_eval's workspace, which has no uv.tomland no[tool.uv] required-version/uvrequirement inpyproject.toml, so it still resolves latestexactly as v4 did — green dogfood, broken consumer. Fix: make the published gate's toolchain a property of coder-eval, not of the consumer's repo — addwith: on action.yml:83 pinning the previous behavior explicitly (version: "latest", enable-cache: "false"; or enable-cache: "true"+prune-cache: "true"` if caching is wanted), and state the Runner ≥ 2.327.1 floor in docs/CI_GATE.md.

Non-blocking, but please consider before merge

  1. [Axis 1] Two-tier pinning convention: 5 bumped uses: refs left on mutable major tags while the other 55 repo refs are SHA-pinned (incl. the docker buildcache producer/consumer pair), with no guard test enforcing the convention (.github/workflows/docker-publish.yml:68) — This PR bumped every uses: ref in the repo, but did so in two different styles. 55 of the 60 third-party refs (per tmp/code-review-260727-1341/automated/uses-matrix.txt) are full-SHA + trailing version comment, e.g. .github/workflows/docker-publish.yml:54: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1. Five refs the PR touched stayed on mutable tags: docker-publish.yml:68: uses: docker/setup-buildx-action@v4, :71: uses: docker/login-action@v4, :78: uses: docker/build-push-action@v7, docs.yml:37: - uses: actions/checkout@v7, :38: - uses: actions/setup-python@v7. The worst part is the divergent duplicate: docker-publish.yml:68/71/78 and release.yml:382/387/396 run the same three actions to build the same image from the same file: docker/Dockerfile into the same ghcr coder-eval-agent repo, yet release.yml is SHA-pinned (docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0, docker/login-action@abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1, docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0) while docker-publish.yml is not. The two build paths can therefore silently run different action code, and nothing mechanically flags it: tests/test_action_version_pin.py only asserts action.yml's default: "…" # <-- kept in sync coder-eval version, and tests/test_pr_review_workflow.py:107 only matches startswith("actions/checkout@"). Fix: SHA-pin those 5 refs to the same commits already used elsewhere for the docker trio (bb05f3f…/abd2ef4…/53b7df9…) so both build paths are byte-identical, and add a guard — either an actionlint/CI grep asserting every non-local uses: matches @[0-9a-f]{40} with a trailing # v… comment, or a tests/lint/-style test in the CE00n family walking .github/workflows/*.yml + action.yml. Otherwise state explicitly in a comment why docker-publish.yml is exempt.

Nits

  1. [Axis 1] Version-comment spacing drift on two lines this PR rewrote (one space before # vs two everywhere else) (.github/workflows/pr-checks.yml:170) — Every other SHA-pinned ref in the repo separates the ref from its version comment with two spaces, e.g. pr-checks.yml:237: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1. The two lines in the no-uipath-extra job use one: pr-checks.yml:170: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 and pr-checks.yml:173: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0. The drift is pre-existing but both lines were rewritten by this PR, so it is free to fix: add the second space to match the surrounding 55 refs. Purely cosmetic — noted, not blocking.

  2. [Axis 3] No workflow linter runs anywhere in CI, so a 9-file / 50-line workflow edit lands with zero mechanical validation (.github/workflows/pr-checks.yml:84) — grep -rn "actionlint\|zizmor\|yamllint" .github/ Makefile .pre-commit-config.yaml pyproject.toml returns no matches — the CI-config surface has no syntax or action-metadata gate at all, while the Python surface has ruff + pyright + a full CE001+ custom-lint suite (.github/workflows/pr-checks.yml:84: run: .venv/bin/pytest tests/test_custom_lint.py -v --tb=short --no-header -p no:warnings). That asymmetry is why this diff's 14 major bumps get no automated check on whether a new major still accepts the inputs the surrounding unchanged steps pass (e.g. actions/setup-python v7.0.0's release notes list "Remove the pip-install input" — harmless here, since grep -rn "pip-install" .github/workflows/ action.yml is empty, but nothing would have told the author that). actionlint's popular-actions database knows the input sets for actions/checkout, setup-python, setup-node and cache, so it is the cheapest gate for exactly this class of change. Add an actionlint step to the quality-gate job beside line 84 (pin the binary by version + sha256 as the osv-scanner step at .github/workflows/pr-checks.yml:109-122 already does). Note when wiring it that running actionlint over action.yml produces false "jobs section is missing" / "unexpected key" syntax-check noise (automated/actionlint.txt lines for action.yml:1:1, :2:1, :3:1, :16:1, :71:1, :79:1) because action.yml is a composite action, not a workflow — scope the glob to .github/workflows/ only.

  3. [Axis 4] Security-rationale comments attached to the two bumped refs in claude-pr-review.yml no longer match the pinned versions' behavior (.github/workflows/claude-pr-review.yml:56) — Refresh the two comment blocks that justify this job's containment design; the mitigations themselves are correct and should stay, only their stated mechanism/pointer is stale.

  4. .github/workflows/claude-pr-review.yml:55-58 says of the checkout bumped on line 51 to v7.0.1: "Default-true persistence writes the write-scoped token to disk as an http.extraheader" in .git/config, and the same claim is repeated at :139-141 ("GITHUB_TOKEN would be persisted to .git/config by checkout") and in the docstring of tests/test_pr_review_workflow.py::test_checkout_does_not_persist_credentials. As of actions/checkout v6.0.0 ("Persist creds to a separate file", actions/checkout#2286 — v6-beta notes: "store the credentials under $RUNNER_TEMP instead of directly in the local git config"), a persisted token lands in a RUNNER_TEMP file referenced by an includeIf, not in .git/config. persist-credentials: false (:60) is still required and still right — the token would still be on the filesystem, just elsewhere — so the risk here is only that a future reader concludes .git/config is the sole exfil path and relaxes the setting. Reword to "persisted to disk (under RUNNER_TEMP since checkout v6) and readable by the allowlisted Read tool".

  5. .github/workflows/claude-pr-review.yml:86 points at "see action.yml lines 299-309" for the Bedrock env forwarding in the action bumped on line 91 to v1.0.183. At that exact pinned commit (be7b93b1907a4abad570368f3c74b6fe3807510b) the forwarding is at lines 333 (CLAUDE_CODE_USE_BEDROCK: ${{ inputs.use_bedrock == 'true' && '1' || '' }}) and 342 (AWS_BEARER_TOKEN_BEDROCK: ${{ env.AWS_BEARER_TOKEN_BEDROCK }}). Prefer naming the step over hardcoding upstream line numbers, which drift on every bump.

(For the record, the containment surface itself was verified intact at the new pin: use_bedrock, include_comments_by_actor, exclude_comments_by_actor, and track_progress all still exist as inputs at that commit, so no silently-dropped input reopens the planted-comment vector.) CVSS:3.1/AV:L/AC:H/PR:H/UI:R/S:U/C:L/I:N/A:N
4. [Axis 7] CI tutorial's consumer-facing gate recipe left stale by these bumps — it still teaches action majors that no longer match any workflow in the repo, with no parity guard (.github/workflows/docs.yml:37) — This PR bumped the docs-publishing workflow itself — docs.yml:37 - uses: actions/checkout@v7 and docs.yml:38 - uses: actions/setup-python@v7 — but not the hand-rolled CI recipe that workflow publishes. docs/tutorials/02-ci-pipeline.md is the canonical "wire coder-eval into CI" surface and still shows the pre-bump majors of five of the exact actions bumped here: line 84 - uses: actions/checkout@v4, line 86 - uses: actions/setup-python@v5, line 90 - uses: astral-sh/setup-uv@v4, line 129 uses: actions/upload-artifact@v4, line 168 - uses: actions/setup-node@v4. The sharpest inconsistency is line 90: the shipped composite action now runs setup-uv v9 (action.yml:83) while the tutorial's equivalent step tells users v4 — and v9's enable-cache: auto / node24 defaults are materially different from v4's. Nothing is broken (the old major tags still resolve), so this is informational: refresh the five refs in the tutorial, or add one sentence stating the example deliberately pins majors and is not kept in lockstep with .github/workflows/. README.md:158's actions/setup-node reference is version-less and needs no change. Worth pairing with a docs/workflow parity check in the deferred actionlint harness item (.claude/harness-candidates.md:92-98) so the next grouped bump surfaces the drift mechanically instead of relying on a reviewer.

What's Missing

⚠️ Not produced. The dedicated What's-Missing synthesis pass failed to complete
(reviewer-side quota), so this section is incomplete, not clean — read it as
unmeasured rather than as "nothing missing." Partial coverage survives in Priority
Actions #2 and #5 below, and in the docs-drift item under Nits.

Harness & Lint Improvements

⚠️ Not produced. The dedicated Harness & Lint synthesis pass failed to complete
(reviewer-side quota), so this section is incomplete, not clean. Partial coverage
survives in Priority Action #4 (an actionlint step + a tests/lint/ CE00n rule
asserting every non-local uses: is SHA-pinned) and in the workflow-linter item
under Nits.

Top 5 Priority Actions

  1. Pin the published gate's toolchain explicitly at action.yml:83 — add a with: block (version: "latest", enable-cache: "false", or enable-cache: "true" + prune-cache: "true") so setup-uv v9's defaults can no longer resolve uv from the consumer's uv.toml/[tool.uv] required-version and hand a different uv to uv tool install "coder-eval==$CE_VERSION" (action.yml:94), which is the one change here that can alter a graded run's harness/toolchain — and therefore a task's score or final_status — for byte-identical agent output.
  2. Close the dogfood blind spot that let this through: pr-checks.yml:856's uses: ./ runs in coder_eval's own workspace (no uv.toml, no [tool.uv] required-version), so it hits setup-uv's latest fallback exactly as v4 did — add a consumer-shaped fixture job that checks out a workspace pinning an old uv and asserts the gate still installs and runs the expected coder-eval version, and document the new Actions Runner >= 2.327.1 (node24) floor in docs/CI_GATE.md.
  3. Converge the divergent docker build paths by SHA-pinning .github/workflows/docker-publish.yml:68/71/78 to the same commits release.yml:382/387/396 already uses (bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0, abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1, 53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0), plus docs.yml:37/38, since docker-publish.yml runs on every push to main with packages: write and both UV_INDEX_UIPATH_* build secrets in scope while building the same docker/Dockerfile into the same ghcr coder-eval-agent repo.
  4. Make the pinning convention mechanical instead of conventional: add an actionlint step beside the custom-lint gate at .github/workflows/pr-checks.yml:84 (pinned by version + sha256 like the osv-scanner step at :109-122, glob scoped to .github/workflows/ so composite action.yml doesn't produce false 'jobs section is missing' noise) and a tests/lint/-style CE00n rule asserting every non-local uses: matches @[0-9a-f]{40} with a trailing # v… comment — today tests/test_action_version_pin.py only checks action.yml's coder-eval version and tests/test_pr_review_workflow.py:107 only matches startswith("actions/checkout@").
  5. Refresh the docs and rationale comments this bump left stale: update the five action majors in docs/tutorials/02-ci-pipeline.md (lines 84, 86, 90, 129, 168 — line 90's setup-uv @v4 most sharply contradicts the shipped v9 at action.yml:83) or state the example deliberately pins majors, and correct .github/workflows/claude-pr-review.yml:55-58 (and the duplicate at :139-141 plus tests/test_pr_review_workflow.py::test_checkout_does_not_persist_credentials) to say credentials persist under RUNNER_TEMP since checkout v6 rather than in .git/config, and replace the hardcoded 'action.yml lines 299-309' pointer at :86 with the step name; the one-space-vs-two version-comment drift at pr-checks.yml:170/173 is free to fix in the same pass.

Stats: 0 🔴 · 1 🟠 · 1 🟡 · 4 🔵 across 8 axes reviewed.

@uipreliga uipreliga left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Review: chore: bump the actions-all group across 1 directory with 14 updates

PR #21 by @dependabot · dependabot/github_actions/actions-all-5a53a122b0main · OPEN · reviewed against 1591548 · all 8 axes · 2026-07-27T20:41Z

Supersedes the earlier review comment on this PR. That one was posted with the
What's Missing and Harness & Lint Improvements passes incomplete (they had failed
to run). Both are now complete and included below. Scores and findings are unchanged
— the two runs produced identical per-axis counts.

Change class: complex — 14 GitHub Actions bumps, 9 crossing a major version, on the release/publish path and inside the published composite action (action.yml), so correctness requires checking each action's breaking changes rather than reading the diff

The Python core is in excellent shape — type safety, architecture, and error handling are clean at 10/10 with zero critical or high findings across seven of eight axes — and the entire residual risk sits in the CI/CD surface: one high-severity unparameterized astral-sh/setup-uv v4→v9 bump in the published composite action (action.yml:83) that silently hands the gate's toolchain resolution, cache behavior, and Node runtime floor to every external @v0 consumer while the dogfood job stays green, plus a handful of unpinned workflow refs and stale docs; bottom line, merge-ready once the action's toolchain is explicitly pinned, because nothing here touches evaluation correctness but the gate itself can break under consumers with no coder-eval change to blame.

Summary

Axis Score 🔴 🟠 🟡 🔵 Top Issue
1. Code Quality & Style 9.4 / 10 0 0 1 1 5 of 60 non-local uses: refs remain on mutable major tags (incl. write-credentialed jobs and the docker buildcache producer/consumer pair) while 55 are SHA-pinned, with no guard test enforcing the convention
2. Type Safety 10 / 10 0 0 0 0
3. Test Health 9.9 / 10 0 0 0 1 No workflow linter runs anywhere in CI, so a 9-file / 50-line workflow edit lands with zero mechanical validation
4. Security 9.9 / 10 0 0 0 1 Security-rationale comments attached to the two bumped refs in claude-pr-review.yml no longer match the pinned versions' behavior
5. Architecture & Design 10 / 10 0 0 0 0
6. Error Handling & Resilience 10 / 10 0 0 0 0
7. API Surface & Maintainability 9.9 / 10 0 0 0 1 CI tutorial's consumer-facing snippet is left 3–5 majors behind the pins this PR sets, with no parity guard
8. Evaluation Harness Quality 9 / 10 0 1 0 0 action.yml:83 setup-uv v4.2.0 -> v9.0.0 with no with: block silently rebinds defaults (cache/prune-cache, uv-version resolution from consumer's config, PATH mode, Node runtime) for every external @v0 consumer, with no opt-out input and no doc note

Overall Score: 9.8 / 10 · Weakest Axis: Evaluation Harness Quality at 9 / 10
Totals: 🔴 0 · 🟠 1 · 🟡 1 · 🔵 4 across 8 axes.

Blockers

  1. [Axis 8] action.yml:83 setup-uv v4.2.0 -> v9.0.0 with no with: block silently rebinds defaults (cache/prune-cache, uv-version resolution from consumer's config, PATH mode, Node runtime) for every external @v0 consumer, with no opt-out input and no doc note (action.yml:83) — action.yml:83 is uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 with no with: block, so all four of these defaults changed under it (read from the two pinned action.yml blobs at SHA 38f3f10… = v4.2.0 and c771a70… = v9.0.0):
  2. version: v4 default: "latest" → v9 default: "" ("Defaults to the version in pyproject.toml or 'latest'"). v9 resolves it from working-directory (v9 default ${{ github.workspace }} = the CONSUMER's repo) via getWorkspaceCandidates()uv.toml, then pyproject.tomlpyproject.tool?.uv?.["required-version"] (setup-uv src/version/version-request-resolver.ts + src/version/file-parser.ts). A consumer repo that pins an old uv now gets THAT uv for the next step's uv tool install "coder-eval==$CE_VERSION" (action.yml:94).
  3. enable-cache: "false""auto" (= true on GitHub-hosted). The gate now restores AND saves a uv cache entry into the consumer's 10 GB repo cache uninvited, keyed on the consumer's own files (cache-dependency-glob now includes **/pyproject.toml, **/uv.lock, **/*requirements*.txt).
  4. prune-cache: "true""false" (v9.0.0's headline breaking change) — that cache entry is unpruned.
  5. Runtime using: "node20"using: "node24" (v7.0.0 breaking change), requiring Actions Runner ≥ 2.327.1; on an older self-hosted runner the gate's FIRST step hard-fails.
    Blast radius: per CLAUDE.md, release.yml maintains action.yml's version: default *plus the moving v<major> tag, so every UiPath/coder_eval@v0 consumer (README.md:105, docs/CI_GATE.md:22) picks this up with no coder-eval version change to blame. The harness's own coverage cannot catch it: the dogfood job (pr-checks.yml:856 uses: ./) runs in coder_eval's workspace, which has no uv.tomland no[tool.uv] required-version/uvrequirement inpyproject.toml, so it still resolves latestexactly as v4 did — green dogfood, broken consumer. Fix: make the published gate's toolchain a property of coder-eval, not of the consumer's repo — addwith: on action.yml:83 pinning the previous behavior explicitly (version: "latest", enable-cache: "false"; or enable-cache: "true"+prune-cache: "true"` if caching is wanted), and state the Runner ≥ 2.327.1 floor in docs/CI_GATE.md.

Non-blocking, but please consider before merge

  1. [Axis 1] 5 of 60 non-local uses: refs remain on mutable major tags (incl. write-credentialed jobs and the docker buildcache producer/consumer pair) while 55 are SHA-pinned, with no guard test enforcing the convention (.github/workflows/docker-publish.yml:68) — This PR bumped every uses: ref in the repo, but did so in two different styles. 55 of the 60 third-party refs (per tmp/code-review-260727-1341/automated/uses-matrix.txt) are full-SHA + trailing version comment, e.g. .github/workflows/docker-publish.yml:54: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1. Five refs the PR touched stayed on mutable tags: docker-publish.yml:68: uses: docker/setup-buildx-action@v4, :71: uses: docker/login-action@v4, :78: uses: docker/build-push-action@v7, docs.yml:37: - uses: actions/checkout@v7, :38: - uses: actions/setup-python@v7. The worst part is the divergent duplicate: docker-publish.yml:68/71/78 and release.yml:382/387/396 run the same three actions to build the same image from the same file: docker/Dockerfile into the same ghcr coder-eval-agent repo, yet release.yml is SHA-pinned (docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0, docker/login-action@abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1, docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0) while docker-publish.yml is not. The two build paths can therefore silently run different action code, and nothing mechanically flags it: tests/test_action_version_pin.py only asserts action.yml's default: "…" # <-- kept in sync coder-eval version, and tests/test_pr_review_workflow.py:107 only matches startswith("actions/checkout@"). Fix: SHA-pin those 5 refs to the same commits already used elsewhere for the docker trio (bb05f3f…/abd2ef4…/53b7df9…) so both build paths are byte-identical, and add a guard — either an actionlint/CI grep asserting every non-local uses: matches @[0-9a-f]{40} with a trailing # v… comment, or a tests/lint/-style test in the CE00n family walking .github/workflows/*.yml + action.yml. Otherwise state explicitly in a comment why docker-publish.yml is exempt.

Nits

  1. [Axis 1] Version-comment spacing drift on two lines this PR rewrote (one space before # vs two everywhere else) (.github/workflows/pr-checks.yml:170) — Every other SHA-pinned ref in the repo separates the ref from its version comment with two spaces, e.g. pr-checks.yml:237: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1. The two lines in the no-uipath-extra job use one: pr-checks.yml:170: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 and pr-checks.yml:173: uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0. The drift is pre-existing but both lines were rewritten by this PR, so it is free to fix: add the second space to match the surrounding 55 refs. Purely cosmetic — noted, not blocking.

  2. [Axis 3] No workflow linter runs anywhere in CI, so a 9-file / 50-line workflow edit lands with zero mechanical validation (.github/workflows/pr-checks.yml:84) — grep -rn "actionlint\|zizmor\|yamllint" .github/ Makefile .pre-commit-config.yaml pyproject.toml returns no matches — the CI-config surface has no syntax or action-metadata gate at all, while the Python surface has ruff + pyright + a full CE001+ custom-lint suite (.github/workflows/pr-checks.yml:84: run: .venv/bin/pytest tests/test_custom_lint.py -v --tb=short --no-header -p no:warnings). That asymmetry is why this diff's 14 major bumps get no automated check on whether a new major still accepts the inputs the surrounding unchanged steps pass (e.g. actions/setup-python v7.0.0's release notes list "Remove the pip-install input" — harmless here, since grep -rn "pip-install" .github/workflows/ action.yml is empty, but nothing would have told the author that). actionlint's popular-actions database knows the input sets for actions/checkout, setup-python, setup-node and cache, so it is the cheapest gate for exactly this class of change. Add an actionlint step to the quality-gate job beside line 84 (pin the binary by version + sha256 as the osv-scanner step at .github/workflows/pr-checks.yml:109-122 already does). Note when wiring it that running actionlint over action.yml produces false "jobs section is missing" / "unexpected key" syntax-check noise (automated/actionlint.txt lines for action.yml:1:1, :2:1, :3:1, :16:1, :71:1, :79:1) because action.yml is a composite action, not a workflow — scope the glob to .github/workflows/ only.

  3. [Axis 4] Security-rationale comments attached to the two bumped refs in claude-pr-review.yml no longer match the pinned versions' behavior (.github/workflows/claude-pr-review.yml:56) — Refresh the two comment blocks that justify this job's containment design; the mitigations themselves are correct and should stay, only their stated mechanism/pointer is stale.

  4. .github/workflows/claude-pr-review.yml:55-58 says of the checkout bumped on line 51 to v7.0.1: "Default-true persistence writes the write-scoped token to disk as an http.extraheader" in .git/config, and the same claim is repeated at :139-141 ("GITHUB_TOKEN would be persisted to .git/config by checkout") and in the docstring of tests/test_pr_review_workflow.py::test_checkout_does_not_persist_credentials. As of actions/checkout v6.0.0 ("Persist creds to a separate file", actions/checkout#2286 — v6-beta notes: "store the credentials under $RUNNER_TEMP instead of directly in the local git config"), a persisted token lands in a RUNNER_TEMP file referenced by an includeIf, not in .git/config. persist-credentials: false (:60) is still required and still right — the token would still be on the filesystem, just elsewhere — so the risk here is only that a future reader concludes .git/config is the sole exfil path and relaxes the setting. Reword to "persisted to disk (under RUNNER_TEMP since checkout v6) and readable by the allowlisted Read tool".

  5. .github/workflows/claude-pr-review.yml:86 points at "see action.yml lines 299-309" for the Bedrock env forwarding in the action bumped on line 91 to v1.0.183. At that exact pinned commit (be7b93b1907a4abad570368f3c74b6fe3807510b) the forwarding is at lines 333 (CLAUDE_CODE_USE_BEDROCK: ${{ inputs.use_bedrock == 'true' && '1' || '' }}) and 342 (AWS_BEARER_TOKEN_BEDROCK: ${{ env.AWS_BEARER_TOKEN_BEDROCK }}). Prefer naming the step over hardcoding upstream line numbers, which drift on every bump.

(For the record, the containment surface itself was verified intact at the new pin: use_bedrock, include_comments_by_actor, exclude_comments_by_actor, and track_progress all still exist as inputs at that commit, so no silently-dropped input reopens the planted-comment vector.) CVSS:3.1/AV:L/AC:H/PR:H/UI:R/S:U/C:L/I:N/A:N
4. [Axis 7] CI tutorial's consumer-facing snippet is left 3–5 majors behind the pins this PR sets, with no parity guard (.github/workflows/docs.yml:37) — This PR bumped the docs-publishing workflow itself — docs.yml:37 - uses: actions/checkout@v7 and docs.yml:38 - uses: actions/setup-python@v7 — but not the hand-rolled CI recipe that workflow publishes. docs/tutorials/02-ci-pipeline.md is the canonical "wire coder-eval into CI" surface and still shows the pre-bump majors of five of the exact actions bumped here: line 84 - uses: actions/checkout@v4, line 86 - uses: actions/setup-python@v5, line 90 - uses: astral-sh/setup-uv@v4, line 129 uses: actions/upload-artifact@v4, line 168 - uses: actions/setup-node@v4. The sharpest inconsistency is line 90: the shipped composite action now runs setup-uv v9 (action.yml:83) while the tutorial's equivalent step tells users v4 — and v9's enable-cache: auto / node24 defaults are materially different from v4's. Nothing is broken (the old major tags still resolve), so this is informational: refresh the five refs in the tutorial, or add one sentence stating the example deliberately pins majors and is not kept in lockstep with .github/workflows/. README.md:158's actions/setup-node reference is version-less and needs no change. Worth pairing with a docs/workflow parity check in the deferred actionlint harness item (.claude/harness-candidates.md:92-98) so the next grouped bump surfaces the drift mechanically instead of relying on a reviewer.

What's Missing

Parallel paths:

  • 🟡 The two GHCR build paths were bumped in opposite styles instead of converged: docker-publish.yml:68/71/78 went floating @v4/@v4/@v7 while release.yml:382/387/396 went pinned bb05f3f… # v4.2.0 / abd2ef4… # v4.5.1 / 53b7df9… # v7.3.0 — same file: docker/Dockerfile, same ghcr.io/<owner>/coder-eval-agent image, same build secrets. The PR should have pinned docker-publish.yml to the identical three SHAs so both paths run byte-identical action code. (trigger: .github/workflows/docker-publish.yml) (restates: Axis 1: 5 of 60 non-local uses: refs remain on mutable major tags)
  • 🟠 astral-sh/setup-uv was bumped to v9.0.0 at three sites but only two were kept parameterized: release.yml:96 and publish-testpypi.yml:55 both carry with: enable-cache: true, while action.yml:83 — the one site that executes in a consumer's workspace — has no with: block at all, so the v9 default flips (version: "" resolved from the consumer's pyproject.toml/uv.toml, enable-cache: auto, prune-cache: false, node24) land only on the externally-published path. The parallel-site edit that pins the prior behavior on action.yml was not made. (trigger: action.yml) (restates: Axis 8: action.yml:83 setup-uv v4.2.0 -> v9.0.0 with no with: block silently rebinds defaults)
  • 🔵 docs.yml:37/38 are the only two actions/checkout / actions/setup-python refs in the repo left floating (@v7/@v7) after this PR; the other 12 checkout refs and 10 setup-python refs across the same 9 files all got 3d3c42e5… # v7.0.1 / 5fda3b95… # v7.0.0. The bump touched the file, so the pin was free to apply there too. (trigger: .github/workflows/docs.yml) (restates: Axis 1: 5 of 60 non-local uses: refs remain on mutable major tags)
  • 🔵 The container toolchain was not moved with the CI toolchain: CI/action now install uv via setup-uv@… # v9.0.0, while docker/Dockerfile:40 (the image this workflow builds and publishes as coder-eval-agent:latest) still installs uv from an unversioned https://astral.sh/uv/install.sh. The agent image and the harness can therefore run different uv majors, and nothing — no pin, no comment, no test — keeps the two in step. (trigger: .github/workflows/docker-publish.yml)

Tests:

  • 🟡 No test encodes the SHA-pin convention this PR mostly follows: tests/test_action_version_pin.py only asserts action.yml's coder-eval==<version> default matches pyproject, and tests/test_pr_review_workflow.py:107 only matches startswith("actions/checkout@"). A ~15-line test walking .github/workflows/*.yml + action.yml and asserting every non-local uses: matches @[0-9a-f]{40} with a trailing # v… comment (plus an explicit exemption list) would have failed this PR on all 5 floating refs. (trigger: .github/workflows/docker-publish.yml) (restates: Axis 1: 5 of 60 non-local uses: refs remain on mutable major tags)
  • 🟠 The published action's only coverage is structurally blind to the setup-uv bump: pr-checks.yml:856 runs uses: ./ with version: local inside coder_eval's own workspace, which has no uv.toml and no [tool.uv] required-version, so v9 still resolves latest exactly as v4 did and the uv tool install "coder-eval==$CE_VERSION" PyPI branch is never taken. Missing: a second dogfood invocation with working-directory (or a fixture checkout) containing a required-version pin, which is the case that actually regresses for @v0 consumers. (trigger: action.yml) (restates: Axis 8: action.yml:83 setup-uv v4.2.0 -> v9.0.0 with no with: block silently rebinds defaults)
  • 🔵 tests/test_pr_review_workflow.py::test_checkout_does_not_persist_credentials still documents the pre-v6 mechanism ("writes the write-scoped GITHUB_TOKEN into .git/config") for the checkout ref this PR bumped to v7.0.1; the assertion is still correct but its stated rationale is not, and no test covers the RUNNER_TEMP/includeIf location the token now takes. The guard test should have been updated in the same commit as the ref it guards. (trigger: .github/workflows/claude-pr-review.yml) (restates: Axis 4: Security-rationale comments attached to the two bumped refs in claude-pr-review.yml are stale)
  • 🔵 A 9-file / 14-action-bump change to the CI surface merged with zero mechanical validation — grep -rn "actionlint\|zizmor\|yamllint" over .github/, Makefile, .pre-commit-config.yaml, pyproject.toml returns nothing — while the Python surface has ruff + pyright + the CE001+ suite at pr-checks.yml:84. An actionlint step (scoped to .github/workflows/ only; action.yml is a composite and produces false "jobs section is missing" noise) is the missing gate for exactly this diff class. (trigger: .github/workflows/pr-checks.yml) (restates: Axis 3: No workflow linter runs anywhere in CI)

Downstream consumers:

  • 🟡 The release artifact hand-off crossed two majors on both ends in one shot with no round-trip exercised anywhere: release.yml:241 produces dist with upload-artifact v4.6.2 -> v7.0.1 and release.yml:429 consumes it in a separate job with download-artifact v4.3.0 -> v8.0.1. Every other upload-artifact site (pr-checks.yml:129/147/321/500/673/751/829/887) is upload-only, so PR CI proves nothing about the pairing; the first real download happens mid-release, immediately before the PyPI publish step. (trigger: .github/workflows/release.yml)
  • 🟡 The registry buildcache has a cross-workflow producer/consumer contract that this PR left straddling two pin styles: docker-publish.yml:78 (build-push-action@v7, floating) is the sole writer (cache-to: …:buildcache,mode=max) and release.yml:396 (build-push-action@53b7df96… # v7.3.0, pinned) is a reader-only consumer whose comment explicitly says "Read the shared buildcache docker-publish.yml writes". Cache-format compatibility for the release build is now a function of a mutable tag on the writer side. (trigger: .github/workflows/docker-publish.yml) (restates: Axis 1: 5 of 60 non-local uses: refs remain on mutable major tags)
  • 🟡 Nothing downstream of the composite action was updated to announce its behavior change: docs/CI_GATE.md (which advertises uses: UiPath/coder_eval@v0 at line 22 and documents the version input at line 43) gains no note about the new Actions Runner >= 2.327.1 (node24) floor, the uninvited uv cache write into the consumer's repo cache, or uv resolution from the consumer's pyproject.toml; and the CHANGELOG entry release.yml generates is a Python-package semver that carries no signal about the gate's toolchain. @v0 consumers get this force-moved onto them (release.yml:229-230) with nothing to attribute a breakage to. (trigger: action.yml) (restates: Axis 8: action.yml:83 setup-uv v4.2.0 -> v9.0.0 with no with: block silently rebinds defaults)

Display & mapping dicts:

  • 🔵 The version-to-docs mapping was not extended: docs/tutorials/02-ci-pipeline.md still shows checkout@v4 (:84), setup-python@v5 (:86), setup-uv@v4 (:90), upload-artifact@v4 (:129), setup-node@v4 (:168) — the pre-bump major of five of the actions changed here — and docs/CI_GATE.md:128 similarly carries mikepenz/action-junit-report@v5. Either refresh them or add one line stating the examples deliberately pin majors and are not kept in lockstep with .github/workflows/. (trigger: .github/workflows/docs.yml) (restates: Axis 7: CI tutorial's consumer-facing snippet is left 3–5 majors behind)
  • 🔵 .github/dependabot.yml's github-actions block states the repo policy in a comment — "No ignore block — keep SHA pins current for patch and minor releases too, otherwise SHA pinning fossilizes the actions in place" — but Dependabot rewrites a floating tag as another floating tag, so the 5 refs it just moved to @v4/@v4/@v7/@v7/@v7 can never acquire a pin. Neither the policy comment nor any exemption list was updated to record that these 5 are permanently outside it. (trigger: .github/workflows/docker-publish.yml) (restates: Axis 1: 5 of 60 non-local uses: refs remain on mutable major tags)
  • 🔵 The pin-comment format is a de-facto mapping (<40-hex> + two spaces + # vX.Y.Z) and two lines this PR rewrote don't match it: pr-checks.yml:170 and :173 use a single space before # where the other 53 pinned refs use two. Free to normalize on lines the diff already touches. (trigger: .github/workflows/pr-checks.yml) (restates: Axis 1: Version-comment spacing drift on two lines this PR rewrote)

Daily/nightly:

  • 🟠 The PR states nothing about the production publish path, and none of it runs on PRs: release.yml is workflow_dispatch-only and crossed majors on six actions at once (checkout v7, setup-python v7, setup-uv v9, upload-artifact v7, download-artifact v8, docker v4/v4/v7) on the job that does OIDC Trusted Publishing to public PyPI, pushes the versioned GHCR image, and force-moves the v<major> action tag; publish-testpypi.yml (the designated rehearsal) exercises neither the artifact hand-off nor the docker path. The workflow's own header documents the mitigation — a PRERELEASE dispatch from a non-main branch, which the ADO nightly infra then pins via coderEvalVersion — so the missing step is dispatching release.yml off this branch (and publish-testpypi.yml) before merge, and saying so in the PR. (trigger: .github/workflows/release.yml)
  • 🟡 docker-publish.yml runs on every push to main, so the merge commit itself is the first-ever execution of setup-buildx@v4 + login@v4 + build-push@v7 — with packages: write and the UV_INDEX_UIPATH_USERNAME/UV_INDEX_UIPATH_PASSWORD build secrets in scope, and writing the shared :buildcache tag that the release build later consumes. A failure or a cache-format change here silently degrades coder-eval-agent:latest (what downstream agent runs pull) with no pre-merge signal and no note in the PR. (trigger: .github/workflows/docker-publish.yml)
  • 🔵 codeql.yml carries a weekly cron (0 6 * * 1) plus security-events: write, and its init/analyze crossed v3.35.5 -> v4.37.3 with queries: security-and-quality. It does at least run on pull_request, so this PR's own CodeQL run is the evidence that v4 accepts the config — the gap is that the PR does not cite it, and the workflow has no workflow_dispatch trigger, so if the scheduled run later regresses there is no manual re-run path and no required check that would go red. (trigger: .github/workflows/codeql.yml)

Harness & Lint Improvements

Static checks (lint / type):

  • [ce-lint] CE026 (class 1) — uses: pin form. New whole-tree rule wired as a @pytest.mark.lint test class in tests/test_custom_lint.py (the CE027–CE031 pattern, not a BaseRule — it walks YAML text, not one .py AST at a time), with the walker helper in tests/lint/workflow_pins.py. Statement: every non-local uses: ref in .github/workflows/*.yml and action.yml must match ^uses: [^./].*@[0-9a-f]{40} # v\S+$ — a 40-hex commit SHA, exactly two spaces, and a trailing # v<version> comment. Local refs (./, ./.github/...) are exempt; any deliberate exception needs an EXEMPT entry with a reason (mirrors CE030's exemption mechanism). CE026 is the id already earmarked for this pattern in .claude/harness-candidates.md; it is free (implemented rules stop at CE031), while CE032/CE033 are earmarked for the workflow-heredoc rules, so subsequent new rules below claim CE034+. Runs offline in make lint, so it gates before any network-dependent job. Prevents: A1/A3/A4/A5 medium — the 5 floating refs (docker-publish.yml:68/71/78 docker/setup-buildx-action@v4 / docker/login-action@v4 / docker/build-push-action@v7, docs.yml:37/38 actions/checkout@v7 / actions/setup-python@v7) against 55 SHA-pinned siblings, with no guard test (tests/test_action_version_pin.py only checks action.yml's coder-eval version; tests/test_pr_review_workflow.py:107 only startswith("actions/checkout@")). The two-space clause also catches A1 low — the one-space drift on pr-checks.yml:170 and :173. It additionally closes the Dependabot hole documented in .github/dependabot.yml (a floating tag is rewritten as another floating tag, so those refs never acquire a pin).
  • [ce-lint] CE026 (class 2) — cross-file SHA agreement. Second violation class in the same rule: an action referenced from more than one file must resolve to the same SHA everywhere, unless listed in an EXEMPT map with a reason. Implementation is a dict-of-sets over the refs CE026 class 1 already parsed (action_name -> {sha}), failing when len(shas) > 1. Keeps the two docker build paths byte-identical by construction rather than by reviewer vigilance. Prevents: A1/A3/A4/A5 medium, specifically the divergent-duplicate half: docker-publish.yml:68/71/78 and release.yml:382/387/396 run the same three docker actions to build the same docker/Dockerfile into the same ghcr coder-eval-agent repo, but only release.yml is pinned (bb05f3f5… v4.2.0, abd2ef45… v4.5.1, 53b7df96… v7.3.0). The verify pass confirmed this divergence is pre-existing and survived a PR that touched both sides — exactly the shape a mechanical check exists for.
  • [ce-lint] CE034 — published composite action must not inherit upstream defaults. New whole-tree lint test class scoped to action.yml (and any future published composite action): every uses: step in a published composite action must carry a with: block that explicitly sets the upstream inputs that determine toolchain behavior — for the setup-family actions that means at minimum version:, plus enable-cache:/prune-cache: for astral-sh/setup-uv and cache: for actions/setup-python/setup-node. Encode the required-input set as a small {action_name: frozenset[str]} table so it is auditable and extensible; an unknown action defaults to "must declare version:". Rationale to put in the rule docstring: action.yml executes inside the consumer's workspace, so an unparameterized uses: silently re-binds behavior to whatever upstream defaults ship next, for every UiPath/coder_eval@v0 consumer. Prevents: A8 high (merged A2/A5/A6/A7) — action.yml:83 astral-sh/setup-uv@c771a70e… # v9.0.0 with no with: block, which flipped four defaults under the published gate: version "latest""" (now resolved from the consumer's uv.toml/[tool.uv] required-version via the new working-directory: ${{ github.workspace }} input), enable-cache "false""auto", prune-cache "true""false", and using: node20node24. The rule would have failed the PR at make lint, before the moving v<major> tag carried it to consumers.
  • [ce-lint] CE035 — doc ↔ workflow action-version parity. New doc-surface lint test class in the CE028/CE030 family (helper in tests/lint/doc_action_parity.py): for any uses: <action>@vN appearing in README.md or docs/**/*.md, N must be ≥ the major pinned for that action in .github/workflows/*.yml or action.yml (the major is read from the trailing # v… comment CE026 already mandates — the two rules compose). Escape hatch: an inline <!-- action-version-exempt: <reason> --> above the fence, for examples that deliberately show an older major. This is the same SSOT-parity shape the repo already enforces for env vars (CE027), docs indexes (CE028), and schema fields (CE030). Prevents: A7 low (merged A3/A8) — docs/tutorials/02-ci-pipeline.md still shows actions/checkout@v4 (:84), actions/setup-python@v5 (:86), astral-sh/setup-uv@v4 (:90), actions/upload-artifact@v4 (:129), actions/setup-node@v4 (:168) while the shipped gate runs setup-uv v9 (action.yml:83) — a 5-major gap on the canonical "wire coder-eval into CI" surface, where v9's enable-cache: auto / node24 behavior is materially different from what the tutorial describes.
  • [ce-lint] CE036 — checkout credential hygiene in privileged/untrusted jobs. New workflow-YAML lint test class: any actions/checkout step in a job that declares a write permissions: scope, or lives in a workflow triggered by pull_request_target / issue_comment / workflow_run, must set persist-credentials: false (or carry an EXEMPT entry naming the step that needs the on-disk token). Parses the workflow with yaml.safe_load and walks jobs.*.steps, so it is robust to comment rewording. This turns a hand-written rationale comment into an executable invariant. Prevents: A4 low — the security-rationale comments at claude-pr-review.yml:55-58 and :139-141 (and the docstring of tests/test_pr_review_workflow.py::test_checkout_does_not_persist_credentials) still assert the token lands in .git/config, which stopped being true at actions/checkout v6.0.0 (credentials moved under $RUNNER_TEMP behind an includeIf). The stated risk is that a future reader concludes .git/config is the sole exfil path and relaxes persist-credentials: false; with CE036 that relaxation fails make lint no matter how stale the prose is.
  • [ce-lint] CE037 — no hardcoded upstream line-number citations in CI config comments. Cheap regex class (can ride inside CE026's file walk): comments in .github/workflows/*.yml and action.yml may not cite line numbers in a third-party file — forbid \bline[s]?\s+\d+(\s*[-–]\s*\d+)?\b in a comment that also names a .yml/.yaml/.ts/.js path, and require naming the step/input instead. Upstream line numbers drift on every SHA bump and nothing revalidates them. Prevents: A4 low, item 2 — claude-pr-review.yml:86 says "see action.yml lines 299-309" for the Bedrock env forwarding, but at the newly pinned be7b93b1… (v1.0.183) that forwarding is at lines 333 and 342. Pure prose rot that a 10-line regex makes impossible to reintroduce.

Harness improvements (not statically reachable):

  • Add actionlint (+ optionally zizmor) over .github/workflows/** to the quality-gate job, beside the custom-lint step at .github/workflows/pr-checks.yml:84, with the binary pinned by version + sha256 exactly as the osv-scanner step at pr-checks.yml:109-122 already does. Scope the glob to .github/workflows/ only — running it over action.yml produces spurious "jobs section is missing" / "unexpected key" errors because a composite action is not a workflow. Start non-blocking (annotations only) for one cycle, then flip to blocking. This is the already-deferred item at .claude/harness-candidates.md:92-98; CE026 above is the offline pin gate, actionlint is the semantic one, and they are complementary rather than redundant. Why not static: actionlint's value here is its bundled shellcheck pass over run: bodies and its popular-actions database of upstream input sets and deprecations — data that lives outside this repo and is refreshed with the binary. No ruff/pyright/CE AST rule can reproduce it (tests/lint/runner.py::check_paths walks only *.py under src/), so it must be an external pinned binary invoked as a CI/make step. Prevents: A3 low — the whole CI-config surface has zero mechanical validation today (grep -rn "actionlint\|zizmor\|yamllint" .github/ Makefile .pre-commit-config.yaml pyproject.toml is empty) while the Python surface has ruff + pyright + CE001+. It is the generic net for "a new major dropped an input the surrounding unchanged steps still pass" — the class behind A8 high and the 14 major bumps in this PR.
  • Consumer-simulation job for the published composite action. The existing dogfood step (pr-checks.yml:856 uses: ./) runs in coder_eval's own workspace, which has no uv.toml and no [tool.uv] required-version, so it provably resolves setup-uv's version to latest exactly as before the bump: green dogfood, changed consumer. Add a second matrix leg that checks out a synthetic minimal consumer fixture (tests/fixtures/ci-gate-consumer/ — a pyproject.toml declaring an old [tool.uv] required-version, no uv.lock), invokes the action from there, and asserts the resolved uv --version and coder-eval --version are what coder-eval intends rather than what the consumer's files dictate. Also assert no unexpected cache entry is written. Why not static: The defect is invisible in action.yml's text — the file is byte-identical in the passing and failing cases. It only manifests from the consumer's workspace contents at action runtime, so it needs a live runner, a real uv tool install, and network egress; no offline lint can reach it. CE034 above blocks the unparameterized uses:; this job is what proves the parameterization actually produces the intended toolchain. Prevents: A8 high (merged A2/A5/A6/A7) — action.yml:83 setup-uv v4.2.0 → v9.0.0, where version is now resolved from the consumer's pyproject.toml/uv.toml via working-directory: ${{ github.workspace }}. Generally: closes the "our dogfood job is not a consumer" blind spot for every future change to the published gate.
  • Upstream action-metadata diff on grouped Dependabot bumps. Add a workflow (triggered on PRs touching .github/workflows/** or action.yml) that, for every changed uses: ref, fetches the upstream action.yml at both the old and new SHAs and posts a diff of inputs: (names + default: values + deprecationMessage) and runs.using. Comment it on the PR so default flips are visible in review instead of requiring the reviewer to go read upstream sources by hand. Why not static: Requires network fetches of two upstream blobs per ref; it is inherently a CI job with GitHub API access, not an offline gate in make verify. (Vendoring the metadata to make it offline would just move the staleness problem into this repo.) Prevents: A8 high — every one of the four setup-uv default flips (version "latest""", enable-cache "false""auto", prune-cache "true""false", using node20→node24, plus the 7-entry cache-dependency-glob and the new working-directory input) is a one-line entry in that diff. It also surfaces A4's class: actions/checkout v6's credential-persistence change would have shown up as a metadata/behavior delta rather than silently invalidating the rationale comments at claude-pr-review.yml:55-58.
  • Runner-floor guard for the published gate. Resolve the runs.using: runtime of every action pinned in action.yml, compute the implied minimum Actions Runner version (node24 ⇒ ≥ 2.327.1), and fail if it exceeds the floor documented in docs/CI_GATE.md. Ship it as a scheduled/low-frequency job rather than a per-PR blocker, and pair it with an explicit "Requirements" line in docs/CI_GATE.md (today grep -n "2.327\|node24\|Runner" docs/CI_GATE.md README.md returns nothing). Why not static: The runtime of a pinned third-party action is recorded in its action.yml, not ours, so determining it needs a network fetch at the pinned SHA. Only the docs half (a documented floor exists at all) is locally checkable. Prevents: A8 high, node24 sub-claim — on an Actions Runner older than 2.327.1 the gate's first step hard-fails for @v0 consumers, with no coder-eval release note to attribute it to (the semver bump release.yml publishes is a Python-package version and carries no signal that the action's CI toolchain changed).
  • Record the outcome back into .claude/harness-candidates.md and close the loop on CE026. The SHA-pinning rule has now been proposed by two independent reviews (the 260701-1954 entry and this one) and observed as a live defect in a write-credentialed, secrets-scoped workflow (docker-publish.yml runs on every push to main with packages: write and both UV_INDEX_UIPATH_* build secrets in scope). Promote CE026 out of the candidates file in this cycle rather than deferring it a third time, and add a short "CI-config surface" section to CLAUDE.md's lint guidance noting that .github/workflows/** + action.yml are in scope for CE rules — the current text reads as if only src/**/*.py is lintable, which is plausibly why the gap persisted. Why not static: This is a process/documentation item about which gates exist, not a defect a gate can detect. Prevents: Recurrence of the entire A1/A3/A4/A5 cluster: every workflow finding in this review, and in the 2026-07-24 review before it, was caught by a human reading YAML.

Top 5 Priority Actions

  1. Add an explicit with: block to action.yml:83 pinning version: "latest" and enable-cache: "false" (or enable-cache: "true" + prune-cache: "true"), so the published gate's uv toolchain is a property of coder-eval rather than of the consumer's uv.toml / [tool.uv] required-version — today a consumer pinning an old uv silently supplies the uv that runs uv tool install "coder-eval==$CE_VERSION" at action.yml:94, which can change a gate's pass/fail outcome for identical agent output, and the dogfood job (.github/workflows/pr-checks.yml:856 uses: ./) provably cannot catch it.
  2. Document the Actions Runner >= 2.327.1 floor in docs/CI_GATE.md (setup-uv v9 moved using: from node20 to node24), since on an older self-hosted runner the gate's very first step now hard-fails before any evaluation runs.
  3. SHA-pin the three floating docker refs at .github/workflows/docker-publish.yml:68/71/78 to the commits release.yml:382/387/396 already uses (bb05f3f5… v4.2.0, abd2ef45… v4.5.1, 53b7df96… v7.3.0) — both paths build the same docker/Dockerfile into the same ghcr coder-eval-agent repo, yet only this one runs on every push to main with packages: write and the UV_INDEX_UIPATH_* secrets in scope while resolving mutable tags.
  4. Add a mechanical guard for the SHA-pin convention plus workflow linting next to the custom-lint step at .github/workflows/pr-checks.yml:84 — a tests/lint/-style CE00n rule asserting every non-local uses: in .github/workflows/*.yml and action.yml matches @[0-9a-f]{40} with a trailing # v…, and an actionlint step scoped to .github/workflows/ only (it emits false syntax errors on the composite action.yml) — today the CI-config surface has zero validation while the Python surface has ruff, pyright, and CE001+.
  5. Refresh the stale consumer-facing and rationale text left behind by these bumps: the five action majors in docs/tutorials/02-ci-pipeline.md:84/86/90/129/168 (notably setup-uv @v4 versus the shipped action.yml:83 v9), the .git/config credential-persistence claim at .github/workflows/claude-pr-review.yml:55-58 and :139-141 (checkout v6+ persists under RUNNER_TEMP, so persist-credentials: false is still required), the hardcoded upstream line pointer at claude-pr-review.yml:86, and the one-space comment drift at .github/workflows/pr-checks.yml:170/173.

Stats: 0 🔴 · 1 🟠 · 1 🟡 · 4 🔵 across 8 axes reviewed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants