Skip to content

ci: declare contents:write on Release workflow's release job - #2139

Merged
nacx merged 2 commits into
envoyproxy:mainfrom
arpitjain099:chore/release-permissions
Jun 2, 2026
Merged

ci: declare contents:write on Release workflow's release job#2139
nacx merged 2 commits into
envoyproxy:mainfrom
arpitjain099:chore/release-permissions

Conversation

@arpitjain099

@arpitjain099 arpitjain099 commented May 14, 2026

Copy link
Copy Markdown
Contributor

Description

The Release workflow runs on tag push and has two jobs:

  • docker_push -- calls the reusable ./.github/workflows/docker_build_job.yaml workflow
  • release -- runs gh release create (twice, branched on -rc suffix) to attach helm tarballs + the aigw binaries to the GitHub release

The gh release create API call needs contents: write. Right now there's no permissions: block on either the workflow or the release job, so the token gets whatever the repo default grants.

This patch adds permissions: contents: write at the release job (not at workflow scope) for two reasons:

  1. docker_push is a reusable-workflow caller. Per GitHub docs on reusable workflows [1], a caller-level permissions: block intersects with the callee's grants. Keeping the new block on the release job leaves the callee's existing permissions story unchanged.
  2. The docker_push callee already authenticates to DockerHub via DOCKERHUB_PASSWORD and DOCKERHUB_USERNAME (external secrets), so it doesn't need the workflow GITHUB_TOKEN for the push path.

Style matches the per-job permission blocks already used by codeql.yaml (actions: read, contents: read, security-events: write) and the workflow-level block in build_and_test.yaml (contents: read, packages: write, id-token: write).

No behavioural change. The release workflow continues to use ${{ secrets.GITHUB_TOKEN }} for the two gh release create calls, just with the scope spelled out.

1: https://docs.github.com/en/actions/using-workflows/reusing-workflows#access-and-permissions

The release job runs `gh release create` with the implicit GITHUB_TOKEN
to attach helm chart tarballs and the aigw binaries as release assets.
The releases/upload-asset API needs contents:write.

The block sits on the `release` job rather than at workflow scope to
avoid intersecting with the docker_push reusable workflow caller
(`./.github/workflows/docker_build_job.yaml`), which has its own
permissions story for the DockerHub push path.

Style matches the per-job permissions blocks already used by codeql.yaml
(actions:read, contents:read, security-events:write) and the
workflow-level block in build_and_test.yaml (contents:read + packages:write +
id-token:write).

Signed-off-by: Arpit Jain <arpitjain099@gmail.com>
@arpitjain099
arpitjain099 requested a review from a team as a code owner May 14, 2026 02:37
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label May 14, 2026
Comment thread .github/workflows/release.yaml Outdated
Signed-off-by: Ignasi Barrera <nacx@apache.org>
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.33%. Comparing base (1d1e81a) to head (ba2f2f4).
⚠️ Report is 18 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2139      +/-   ##
==========================================
- Coverage   84.40%   84.33%   -0.08%     
==========================================
  Files         134      134              
  Lines       19059    19352     +293     
==========================================
+ Hits        16087    16320     +233     
- Misses       1991     2033      +42     
- Partials      981      999      +18     

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

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nacx
nacx merged commit 95b98bc into envoyproxy:main Jun 2, 2026
33 of 36 checks passed
aabchoo added a commit that referenced this pull request Jun 6, 2026
**Description**
New Features
                  
Multi-Tenant Hostname Routing
- AIGatewayRoute gains a hostnames field enabling hostname-based model
scoping — serve different model catalogs per tenant from a single
Gateway
- /v1/models automatically scopes its response to models matching the
request's Host header
- Wildcard hostnames (*.ai.example.com) supported via Gateway API
hostname matching rules
Provider Translation
- Anthropic → AWS Bedrock Converse — new translator path lets
Anthropic-native clients reach Bedrock without switching protocols
(text, images, tool use, thinking, streaming)
- Anthropic → OpenAI reasoning & image support — thinking/reasoning
blocks and image content no longer silently dropped during translation
- Claude Opus 4.7 reasoning — display parameter (summarized/omitted),
xhigh effort tier, and claude-mythos-preview model recognition
- Anthropic prefix support — VersionedAPISchema.prefix now works for
Anthropic backends (e.g., /{prefix}/messages)
- anthropic-beta header forwarding — mapped into anthropic_beta body
field for AWSAnthropic backends
OpenAI API Compatibility
- Audio transcription & translation — full data-plane support for
/v1/audio/transcriptions and /v1/audio/translations (Whisper endpoints,
multipart/form-data)
- Azure OpenAI Responses API — /v1/responses routes to Azure's
/openai/responses?api-version=... path
- audio_url and video_url content types — multimodal audio/video inputs
for compatible backends (vLLM, phi-4-mm, Qwen 3.5)
Quota-Aware Routing
- Backend rate limit filter injection for QuotaPolicy — first runtime
enforcement: controller injects a backend rate limit filter when a
QuotaPolicy is attached to an AIServiceBackend
MCP Gateway
- Authorization-filtered tools/list — omits tools the caller isn't
authorized to invoke, preventing tool discovery leaks
Observability
- Smarter log redaction — developer-authored metadata (tool
descriptions, function names, JSON schemas) visible in debug logs; user
content and AI-generated text remain redacted
API Changes
- AIGatewayRoute.spec.hostnames — new optional field for hostname-based
request filtering
- AIGatewayRoute.spec.rules capped at 15 (down from 128) to match
Gateway API HTTPRoute limits
- VersionedAPISchema.prefix extended to Anthropic backends
- QuotaPolicy now has runtime enforcement (backend rate limit filter
injection)
Bug Fixes
- SSE parser handles data:{json} (no space after colon)
- Responses API streaming: buffer incomplete SSE events across response
body chunks
- Responses API: capture token usage from response.incomplete and
response.failed events
- Nil-pointer guard in AWS Bedrock response translator (HTTP 200 with no
output field)
- Comprehensive Gemini finish-reason mapping (previously everything fell
through to content_filter)
- GCP Vertex AI streaming: emit empty delta object instead of omitting
it
- Responses API: handle typeless assistant output messages (e.g., from
OpenCode)
Docs
- Proposal: MCPBackend CRD (#2144)
- Proposal: OAuth 2.0 Token Exchange as Upstream Auth for MCP Backends
(#2052)
CI
- contents:write permission declared on Release workflow's release job
(#2139)

---------

Signed-off-by: achoo30 <achoo30@bloomberg.net>
Signed-off-by: Erica Hughberg <erica.sundberg.90@gmail.com>
Co-authored-by: Erica Hughberg <erica.sundberg.90@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
saixso pushed a commit to saixso/ai-gateway that referenced this pull request Jun 21, 2026
**Description**
New Features

Multi-Tenant Hostname Routing
- AIGatewayRoute gains a hostnames field enabling hostname-based model
scoping — serve different model catalogs per tenant from a single
Gateway
- /v1/models automatically scopes its response to models matching the
request's Host header
- Wildcard hostnames (*.ai.example.com) supported via Gateway API
hostname matching rules
Provider Translation
- Anthropic → AWS Bedrock Converse — new translator path lets
Anthropic-native clients reach Bedrock without switching protocols
(text, images, tool use, thinking, streaming)
- Anthropic → OpenAI reasoning & image support — thinking/reasoning
blocks and image content no longer silently dropped during translation
- Claude Opus 4.7 reasoning — display parameter (summarized/omitted),
xhigh effort tier, and claude-mythos-preview model recognition
- Anthropic prefix support — VersionedAPISchema.prefix now works for
Anthropic backends (e.g., /{prefix}/messages)
- anthropic-beta header forwarding — mapped into anthropic_beta body
field for AWSAnthropic backends
OpenAI API Compatibility
- Audio transcription & translation — full data-plane support for
/v1/audio/transcriptions and /v1/audio/translations (Whisper endpoints,
multipart/form-data)
- Azure OpenAI Responses API — /v1/responses routes to Azure's
/openai/responses?api-version=... path
- audio_url and video_url content types — multimodal audio/video inputs
for compatible backends (vLLM, phi-4-mm, Qwen 3.5)
Quota-Aware Routing
- Backend rate limit filter injection for QuotaPolicy — first runtime
enforcement: controller injects a backend rate limit filter when a
QuotaPolicy is attached to an AIServiceBackend
MCP Gateway
- Authorization-filtered tools/list — omits tools the caller isn't
authorized to invoke, preventing tool discovery leaks
Observability
- Smarter log redaction — developer-authored metadata (tool
descriptions, function names, JSON schemas) visible in debug logs; user
content and AI-generated text remain redacted
API Changes
- AIGatewayRoute.spec.hostnames — new optional field for hostname-based
request filtering
- AIGatewayRoute.spec.rules capped at 15 (down from 128) to match
Gateway API HTTPRoute limits
- VersionedAPISchema.prefix extended to Anthropic backends
- QuotaPolicy now has runtime enforcement (backend rate limit filter
injection)
Bug Fixes
- SSE parser handles data:{json} (no space after colon)
- Responses API streaming: buffer incomplete SSE events across response
body chunks
- Responses API: capture token usage from response.incomplete and
response.failed events
- Nil-pointer guard in AWS Bedrock response translator (HTTP 200 with no
output field)
- Comprehensive Gemini finish-reason mapping (previously everything fell
through to content_filter)
- GCP Vertex AI streaming: emit empty delta object instead of omitting
it
- Responses API: handle typeless assistant output messages (e.g., from
OpenCode)
Docs
- Proposal: MCPBackend CRD (envoyproxy#2144)
- Proposal: OAuth 2.0 Token Exchange as Upstream Auth for MCP Backends
(envoyproxy#2052)
CI
- contents:write permission declared on Release workflow's release job
(envoyproxy#2139)

---------

Signed-off-by: achoo30 <achoo30@bloomberg.net>
Signed-off-by: Erica Hughberg <erica.sundberg.90@gmail.com>
Co-authored-by: Erica Hughberg <erica.sundberg.90@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: saixso <sai.soundararajan@spoton.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants