Skip to content

Publish keylessly via WIF (drop the stored credential) - #2

Closed
rbehal wants to merge 7 commits into
gumloop-mainfrom
wif-publish
Closed

Publish keylessly via WIF (drop the stored credential)#2
rbehal wants to merge 7 commits into
gumloop-mainfrom
wif-publish

Conversation

@rbehal

@rbehal rbehal commented Aug 11, 2026

Copy link
Copy Markdown

Switches the publish workflow from the stored GCP_ARTIFACT_REGISTRY_CREDENTIALS secret to keyless OIDC federation: the workflow impersonates the existing agenthub-github-ci-cd CI service account (which already carries artifactregistry.repositories.uploadArtifacts via the AgentHubGitHubCICD custom role) through the new switchyard-github WIF pool.

Merge order: this needs the backend terraform on rahul-GMLP-9804 (module switchyard_wif in environments/staging, mirroring the versioned_fs WIF setup) to have applied first — it trusts gumloop-v* tags and workflow_dispatch runs from gumloop-main. The GCP_WIF_PROVIDER repo variable is already set to the provider name.

After merging: delete the GCP_ARTIFACT_REGISTRY_CREDENTIALS secret and verify with a workflow_dispatch run (idempotent — already-published wheels are skipped via the simple index).

Made with Cursor

rbehal and others added 7 commits August 11, 2026 19:18
- pyo3 abi3-py312 -> abi3-py310: one cp310-abi3 wheel serves CPython 3.10+
- requires-python >= 3.10; patch the 3.11-only constructs (datetime.UTC,
  typing.Self) with runtime-equivalent 3.10 forms
- defer the translation import in switchyard_rust/__init__.py so the
  bindings-only surface (switchyard_rust.libsy) never needs provider SDKs
- move the upstream core deps (openai/anthropic/httpx/pydantic) into the new
  'lib' extra so embedding hosts do not inherit provider-SDK floors; the
  server/cli/all extras pull it in transitively
- version lookups try the renamed dist first, upstream's name second

Co-authored-by: Cursor <cursoragent@cursor.com>
Binds LlmClassifierConfig::Custom (CustomClassifierConfig + TargetSelector)
as custom_classifier(judge_target, targets, *, default_target, config):
schema-driven routing across two or more labeled targets, with the judge's
verdict selecting a label through a JSON Pointer and unusable verdicts
falling open to default_target.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Artifact Registry rejects twine's --skip-existing capability probe.

Co-authored-by: Cursor <cursoragent@cursor.com>
GitHub's OIDC token federates through the switchyard-github pool and
impersonates the agenthub-github-ci-cd CI SA. Merge after the backend
terraform (module switchyard_wif, environments/staging) has applied; the
GCP_ARTIFACT_REGISTRY_CREDENTIALS secret can be deleted once this lands.

Co-authored-by: Cursor <cursoragent@cursor.com>
@rbehal
rbehal force-pushed the gumloop-main branch 3 times, most recently from e512532 to c8c5181 Compare August 11, 2026 20:29
@rbehal rbehal closed this Aug 11, 2026
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