Skip to content

Publish Agent SDK packages - #1269

Merged
DanielButler1 merged 4 commits into
mainfrom
release/publish-agent-sdks-20260726
Jul 26, 2026
Merged

Publish Agent SDK packages#1269
DanielButler1 merged 4 commits into
mainfrom
release/publish-agent-sdks-20260726

Conversation

@DanielButler1

@DanielButler1 DanielButler1 commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add a dedicated protected workflow for publishing Python, Go, PHP, and Ruby Agent SDKs
  • reuse the existing trusted NuGet workflow to publish the C# Agent SDK
  • use OIDC trusted publishing for PyPI, NuGet, and RubyGems
  • publish Go with a module tag and PHP through a dedicated split repository
  • align the first cross-language Agent SDK release on 0.2.0 where applicable
  • make the .NET package depend on the public Phaseo.Sdk package instead of a monorepo project reference

Validation

  • go test ./... in packages/sdk/agent-sdk-go
  • python -m pytest packages/sdk/agent-sdk-py/tests
  • python -m build packages/sdk/agent-sdk-py
  • dotnet test packages/sdk/agent-sdk-csharp/tests/Phaseo.AgentSdk.Tests/Phaseo.AgentSdk.Tests.csproj -c Release
  • dotnet pack packages/sdk/agent-sdk-csharp/Phaseo.AgentSdk.csproj -c Release
  • composer validate --strict and PHP Agent SDK tests
  • Ruby Agent SDK tests and gem build
  • clean local consumer installs for Python, C#, PHP, and Ruby
  • actionlint on both modified publishing workflows
  • release archives inspected for dependency metadata and development traces

Created with Codex

Summary by CodeRabbit

  • New Features

    • Added automated publishing for Agent SDKs across Python, Go, PHP, Ruby, and C#.
    • Added support for publishing Agent SDK packages to their respective language registries.
    • Added version 0.2.0 for the Go, PHP, and C# Agent SDKs.
  • Documentation

    • Expanded release documentation with Agent SDK distribution targets and publishing workflows.

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@DanielButler1, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 44 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6ed074d7-0997-402c-934e-2252266e15fc

📥 Commits

Reviewing files that changed from the base of the PR and between f0bd5e0 and 7028675.

📒 Files selected for processing (2)
  • .github/workflows/publish-agent-sdks.yml
  • packages/sdk/RELEASING.md
📝 Walkthrough

Walkthrough

Adds automated publishing for Python, Go, PHP, and Ruby Agent SDKs, extends the C# NuGet workflow for Agent SDK artifacts, updates SDK versions and dependencies, and documents release destinations and workflow behavior.

Changes

Agent SDK release automation

Layer / File(s) Summary
Package versions and dependencies
packages/sdk/agent-sdk-csharp/Phaseo.AgentSdk.csproj, packages/sdk/agent-sdk-go/*, packages/sdk/agent-sdk-php/VERSION
Sets Agent SDK versions to 0.2.0, pins the C# SDK dependency to NuGet, and updates the Go SDK dependency to v2.0.5.
Registry publishing workflow
.github/workflows/publish-agent-sdks.yml
Adds conditional Python and Ruby build/publish jobs with registry version checks, tests, artifacts, and trusted publishing.
Go and PHP tag release flow
.github/workflows/publish-agent-sdks.yml
Validates Go and PHP releases, creates repository tags, synchronizes the PHP subtree split, and optionally notifies Packagist.
C# NuGet publishing and release documentation
.github/workflows/publish-sdk-csharp.yml, packages/sdk/RELEASING.md
Adds independently resolved Agent SDK versions, tests, packaging, NuGet publication, and documentation for all Agent SDK release targets.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant GitHubActions
  participant PyPI
  participant GoOrigin
  participant PHPRepository
  participant NuGet
  participant RubyGems
  GitHubActions->>PyPI: Check and publish Python artifact
  GitHubActions->>GoOrigin: Validate and push Go version tag
  GitHubActions->>PHPRepository: Push PHP subtree split and tag
  GitHubActions->>NuGet: Push C# Agent SDK packages
  GitHubActions->>RubyGems: Check and publish Ruby gem
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: publishing the Agent SDK packages.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/publish-agent-sdks-20260726

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.

@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 1 package(s) with unknown licenses.
See the Details below.

License Issues

packages/sdk/agent-sdk-csharp/Phaseo.AgentSdk.csproj

PackageVersionLicenseIssue Type
Phaseo.Sdk2.1.0NullUnknown License

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
actions/actions/checkout 9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 🟢 6.9
Details
CheckScoreReason
Maintained🟢 1024 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Packaging⚠️ -1packaging workflow not detected
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
actions/actions/create-github-app-token bcd2ba49218906704ab6c1aa796996da409d3eb1 🟢 6.1
Details
CheckScoreReason
Code-Review⚠️ 2Found 3/14 approved changesets -- score normalized to 2
Maintained🟢 1013 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Binary-Artifacts🟢 10no binaries found in the repo
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Pinned-Dependencies🟢 7dependency not pinned by hash detected -- score normalized to 7
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
SAST🟢 6SAST tool is not run on all commits -- score normalized to 6
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
actions/actions/download-artifact d3f86a106a0bac45b974a628896c90dbdf5c8093 🟢 5.1
Details
CheckScoreReason
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Code-Review🟢 10all changesets reviewed
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 10SAST tool is run on all commits
actions/actions/setup-go b7ad1dad31e06c5925ef5d2fc7ad053ef454303e 🟢 5.5
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained🟢 45 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 10SAST tool is run on all commits
actions/actions/setup-python 5fda3b95a4ea91299a34e894583c3862153e4b97 🟢 6.6
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained🟢 1017 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Pinned-Dependencies🟢 7dependency not pinned by hash detected -- score normalized to 7
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 9SAST tool is not run on all commits -- score normalized to 9
actions/actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 🟢 5.2
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
actions/pypa/gh-action-pypi-publish ba38be9e461d3875417946c167d0b5f3d385a247 🟢 5
Details
CheckScoreReason
Maintained🟢 42 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 4
Code-Review🟢 4Found 8/18 approved changesets -- score normalized to 4
Security-Policy🟢 4security policy file detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
SAST🟢 6SAST tool is not run on all commits -- score normalized to 6
Packaging🟢 10packaging workflow detected
actions/ruby/setup-ruby 003a5c4d8d6321bd302e38f6f0ec593f77f06600 🟢 4.9
Details
CheckScoreReason
Code-Review🟢 8Found 21/24 approved changesets -- score normalized to 8
Maintained🟢 1022 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Security-Policy⚠️ 0security policy file not detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
actions/rubygems/configure-rubygems-credentials dc5a8d8553e6ee01fc26761a49e99e733d17954a UnknownUnknown
actions/shivammathur/setup-php f3e473d116dcccaddc5834248c87452386958240 🟢 7.6
Details
CheckScoreReason
Security-Policy🟢 10security policy file detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review⚠️ 0Found 1/22 approved changesets -- score normalized to 0
Maintained🟢 1030 commit(s) and 10 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices🟢 5badge detected: Passing
License🟢 10license file detected
Pinned-Dependencies🟢 7dependency not pinned by hash detected -- score normalized to 7
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ -1no releases found
Packaging🟢 10packaging workflow detected
SAST🟢 7SAST tool detected but not run on all commits
nuget/Phaseo.Sdk 2.1.0 UnknownUnknown
gomod/github.com/phaseoteam/Phaseo/packages/sdk/sdk-go/v2 2.0.5 🟢 5.7
Details
CheckScoreReason
Code-Review⚠️ 0Found 0/27 approved changesets -- score normalized to 0
Maintained🟢 1030 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Dependency-Update-Tool🟢 10update tool detected
Security-Policy🟢 10security policy file detected
Dangerous-Workflow⚠️ 0dangerous workflow patterns detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Signed-Releases⚠️ -1no releases found
License🟢 9license file detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies🟢 8dependency not pinned by hash detected -- score normalized to 8
Packaging🟢 10packaging workflow detected
Fuzzing⚠️ 0project is not fuzzed
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Contributors🟢 3project has 1 contributing companies or organizations -- score normalized to 3
Vulnerabilities⚠️ 030 existing vulnerabilities detected
CI-Tests🟢 1030 out of 30 merged PRs checked by a CI test -- score normalized to 10

Scanned Files

  • .github/workflows/publish-agent-sdks.yml
  • packages/sdk/agent-sdk-csharp/Phaseo.AgentSdk.csproj
  • packages/sdk/agent-sdk-go/go.mod

@socket-security

socket-security Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedgolang/​github.com/​phaseoteam/​Phaseo/​packages/​sdk/​sdk-go/​v2@​v2.0.59310010010070
Addednuget/​phaseo.sdk@​2.1.09910088100100

View full report

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9cdd0f89d4

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/publish-agent-sdks.yml Outdated
@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Web preview

Open the latest preview

Commit: 9f21b0f

@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: 3

🧹 Nitpick comments (8)
.github/workflows/publish-agent-sdks.yml (8)

48-49: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

persist-credentials: false missing on this checkout, unlike the pattern used elsewhere in this file.

publish-go (Line 155) and publish-php (Line 218) both explicitly set persist-credentials: false on actions/checkout. This step doesn't, leaving the ambient GITHUB_TOKEN persisted in the local git config for the remainder of the job (which then runs pip install -e and pytest against third-party-influenced code paths).

🔒 Proposed fix
       - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
+        with:
+          persist-credentials: false
🤖 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/publish-agent-sdks.yml around lines 48 - 49, Add
persist-credentials: false to the actions/checkout step in the affected workflow
job, matching the existing checkout configuration in publish-go and publish-php
while preserving the pinned action reference.

Source: Linters/SAST tools


1-39: 🩺 Stability & Availability | 🔵 Trivial

Consider a concurrency guard.

Multiple triggers (push to main + manual workflow_dispatch) can overlap; concurrent runs of publish-go/publish-php could race on tag creation/subtree-split pushes. Consider adding a top-level concurrency: group: publish-agent-sdks-${{ github.ref }} to serialize runs.

🤖 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/publish-agent-sdks.yml around lines 1 - 39, Add a
top-level concurrency configuration for the “Publish Agent SDKs” workflow, using
a group keyed by github.ref to serialize overlapping push and workflow_dispatch
runs. Preserve the existing workflow triggers and permissions, and do not cancel
an in-progress run so tag creation and subtree-split pushes complete safely.

141-151: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

app-slug interpolated directly into the shell script instead of via env:.

bot="${{ steps.app-token.outputs.app-slug }}[bot]" expands a workflow expression directly inside the run: block, the same pattern zizmor's template-injection rule flags elsewhere (GH_APP_TOKEN/GIT_USER_NAME on the same step are correctly passed via env:). Route app-slug through env: too for consistency and to eliminate the injection surface.

🔒 Proposed fix
       - name: Resolve GitHub App identity
         id: app-identity
         env:
           GH_TOKEN: ${{ steps.app-token.outputs.token }}
+          APP_SLUG: ${{ steps.app-token.outputs.app-slug }}
         shell: bash
         run: |
           set -euo pipefail
-          bot="${{ steps.app-token.outputs.app-slug }}[bot]"
+          bot="${APP_SLUG}[bot]"
🤖 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/publish-agent-sdks.yml around lines 141 - 151, Update the
“Resolve GitHub App identity” step to pass the app-slug through its env
configuration, then read that environment variable inside the shell script when
constructing bot. Remove the direct workflow-expression interpolation from the
run block while preserving the existing GitHub API lookup and GITHUB_OUTPUT
values.

Source: Linters/SAST tools


278-279: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

persist-credentials: false missing here too.

Same gap as build-python Line 49 — this checkout precedes gem install/gem build, which can execute arbitrary code from the installed gem.

🤖 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/publish-agent-sdks.yml around lines 278 - 279, Update the
checkout step in the publish-agent-sdks workflow to set persist-credentials to
false, matching the secure configuration used by build-python, before the gem
installation and build steps.

Source: Linters/SAST tools


310-330: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

needs.build-ruby.outputs.version interpolated directly into the run: command.

Same template-injection pattern flagged at Lines 148/211 — pass the version via env: rather than inlining the expression into the shell command.

🔒 Proposed fix
+      - env:
+          GEM_VERSION: ${{ needs.build-ruby.outputs.version }}
       - name: Publish to RubyGems
-        run: gem push "dist/ruby-agent/phaseo_agent_sdk-${{ needs.build-ruby.outputs.version }}.gem"
+        run: gem push "dist/ruby-agent/phaseo_agent_sdk-${GEM_VERSION}.gem"
🤖 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/publish-agent-sdks.yml around lines 310 - 330, Update the
publish-ruby job’s “Publish to RubyGems” step to pass
needs.build-ruby.outputs.version through an environment variable, then reference
that variable in the gem push command instead of interpolating the GitHub
expression directly in run.

Source: Linters/SAST tools


160-183: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Version regex allows non-semver Go module tags.

^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ permits a .-delimited suffix (e.g. 1.2.3.4) after the patch version, but Go module tags require the canonical vMAJOR.MINOR.PATCH[-PRERELEASE][+BUILD] form — a fourth .-separated segment isn't valid semver and go get would not resolve such a tag correctly. Restrict the optional suffix to - (pre-release) and + (build metadata) delimiters only.

🐛 Proposed fix
-          if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then
+          if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$ ]]; then
🤖 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/publish-agent-sdks.yml around lines 160 - 183, Update the
version validation regex in the “Test and tag module” workflow step to allow
only canonical MAJOR.MINOR.PATCH versions with optional hyphen-delimited
prerelease or plus-delimited build metadata suffixes; remove the dot delimiter
so versions such as 1.2.3.4 are rejected.

204-214: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Same app-slug inline-expansion pattern as publish-go.

Same as Line 148 — pass app-slug via env: instead of inlining the expression directly in the run: script.

🤖 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/publish-agent-sdks.yml around lines 204 - 214, Update the
“Resolve GitHub App identity” step using id app-identity to pass
steps.app-token.outputs.app-slug through an environment variable, then read that
variable in the bash script when constructing bot; remove the direct GitHub
Actions expression from the run block while preserving the existing output
values.

Source: Linters/SAST tools


215-254: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Same non-semver-permissive regex as publish-go.

Line 233 uses the identical over-permissive pattern flagged at Line 169. Same fix applies for consistency (Composer versions are more lenient than Go, but tightening still guards against typos in the VERSION file).

🤖 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/publish-agent-sdks.yml around lines 215 - 254, Update the
version validation regex in the “Test, tag, and sync split repository” step to
match the stricter semantic-version format already used by publish-go, while
preserving support for the intended prerelease or build suffixes. Keep the
existing invalid-version error and exit behavior unchanged.
🤖 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/publish-agent-sdks.yml:
- Around line 197-203: Update the “Create GitHub App token” step identified by
id app-token to include a repositories restriction containing only Phaseo and
phaseo-php-agent-sdk, while preserving the existing owner and credential inputs.
- Around line 283-295: Update the “Check RubyGems release status” step
identified by id “registry” to distinguish an expected 404 from other HTTP or
network failures: use bounded curl connection/total timeouts, treat only 404 as
should_publish=true, and fail the workflow for 5xx, rate limits, or request
errors instead of publishing. Preserve the existing version extraction and
GitHub output assignments.

In `@packages/sdk/RELEASING.md`:
- Around line 83-90: Update the Agent SDK workflow documentation to remove C#
NuGet publishing and its NuGet trusted-publisher identity from the
publish-agent-sdks.yml description. Document those NuGet details under the C#
workflow entry associated with publish-sdk-csharp.yml, keeping the Python, Go,
PHP, and Ruby workflow description accurate.

---

Nitpick comments:
In @.github/workflows/publish-agent-sdks.yml:
- Around line 48-49: Add persist-credentials: false to the actions/checkout step
in the affected workflow job, matching the existing checkout configuration in
publish-go and publish-php while preserving the pinned action reference.
- Around line 1-39: Add a top-level concurrency configuration for the “Publish
Agent SDKs” workflow, using a group keyed by github.ref to serialize overlapping
push and workflow_dispatch runs. Preserve the existing workflow triggers and
permissions, and do not cancel an in-progress run so tag creation and
subtree-split pushes complete safely.
- Around line 141-151: Update the “Resolve GitHub App identity” step to pass the
app-slug through its env configuration, then read that environment variable
inside the shell script when constructing bot. Remove the direct
workflow-expression interpolation from the run block while preserving the
existing GitHub API lookup and GITHUB_OUTPUT values.
- Around line 278-279: Update the checkout step in the publish-agent-sdks
workflow to set persist-credentials to false, matching the secure configuration
used by build-python, before the gem installation and build steps.
- Around line 310-330: Update the publish-ruby job’s “Publish to RubyGems” step
to pass needs.build-ruby.outputs.version through an environment variable, then
reference that variable in the gem push command instead of interpolating the
GitHub expression directly in run.
- Around line 160-183: Update the version validation regex in the “Test and tag
module” workflow step to allow only canonical MAJOR.MINOR.PATCH versions with
optional hyphen-delimited prerelease or plus-delimited build metadata suffixes;
remove the dot delimiter so versions such as 1.2.3.4 are rejected.
- Around line 204-214: Update the “Resolve GitHub App identity” step using id
app-identity to pass steps.app-token.outputs.app-slug through an environment
variable, then read that variable in the bash script when constructing bot;
remove the direct GitHub Actions expression from the run block while preserving
the existing output values.
- Around line 215-254: Update the version validation regex in the “Test, tag,
and sync split repository” step to match the stricter semantic-version format
already used by publish-go, while preserving support for the intended prerelease
or build suffixes. Keep the existing invalid-version error and exit behavior
unchanged.
🪄 Autofix (Beta)

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: 27962f62-7312-4d4a-b57b-85946b513044

📥 Commits

Reviewing files that changed from the base of the PR and between dbb4520 and f0bd5e0.

⛔ Files ignored due to path filters (1)
  • packages/sdk/agent-sdk-go/go.sum is excluded by !**/*.sum
📒 Files selected for processing (7)
  • .github/workflows/publish-agent-sdks.yml
  • .github/workflows/publish-sdk-csharp.yml
  • packages/sdk/RELEASING.md
  • packages/sdk/agent-sdk-csharp/Phaseo.AgentSdk.csproj
  • packages/sdk/agent-sdk-go/VERSION
  • packages/sdk/agent-sdk-go/go.mod
  • packages/sdk/agent-sdk-php/VERSION

Comment thread .github/workflows/publish-agent-sdks.yml
Comment thread .github/workflows/publish-agent-sdks.yml
Comment thread packages/sdk/RELEASING.md
@DanielButler1
DanielButler1 added this pull request to the merge queue Jul 26, 2026
Merged via the queue into main with commit 7789f62 Jul 26, 2026
48 checks passed
@DanielButler1
DanielButler1 deleted the release/publish-agent-sdks-20260726 branch July 26, 2026 11:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant