Skip to content

Commit 9ef2eca

Browse files
chore: release 3.17.0
Signed-off-by: Abhishek Choudhary <shreemaan.abhishek@gmail.com>
1 parent e2671c4 commit 9ef2eca

7 files changed

Lines changed: 147 additions & 9 deletions

File tree

.github/workflows/check-changelog.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
name: Check Changelog
22

33
on:
4-
push:
5-
paths:
6-
- 'CHANGELOG.md'
7-
- 'ci/check_changelog_prs.ts'
84
pull_request:
95
paths:
106
- 'CHANGELOG.md'
@@ -21,6 +17,10 @@ jobs:
2117
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2218
with:
2319
fetch-depth: 0
20+
# Check out the PR branch head itself, not the default merge-with-base
21+
# commit, so the changelog is validated against the release branch's
22+
# own scope (since-last-release) rather than a moving target base.
23+
ref: ${{ github.event.pull_request.head.sha }}
2424

2525

2626
- name: Run check_changelog_prs script

.requirements

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
APISIX_PACKAGE_NAME=apisix
1919

2020
APISIX_RUNTIME=1.3.6
21-
APISIX_DASHBOARD_COMMIT=bbe05ad95396f90db03d831660f454c2844d906e
21+
APISIX_DASHBOARD_COMMIT=c8d3466d3c36386d3888efbc8250cd8183c77298

CHANGELOG.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ title: Changelog
2323

2424
## Table of Contents
2525

26+
- [3.17.0](#3170)
2627
- [3.16.0](#3160)
2728
- [3.15.0](#3150)
2829
- [3.14.1](#3141)
@@ -84,6 +85,135 @@ title: Changelog
8485
- [0.7.0](#070)
8586
- [0.6.0](#060)
8687

88+
## 3.17.0
89+
90+
**The changes marked with :warning: are not backward compatible.**
91+
92+
### Change
93+
94+
- :warning: change(auth): require configured jwt claims, harden empty claims_to_verify and key-auth anonymous fallback [#13468](https://github.com/apache/apisix/pull/13468)
95+
- :warning: enforce algorithm match before signature verification in jwt-auth plugin [#13182](https://github.com/apache/apisix/pull/13182)
96+
- :warning: remove server-side token generation endpoint (`/apisix/plugin/jwe/encrypt`) from jwe-decrypt plugin [#13464](https://github.com/apache/apisix/pull/13464)
97+
- :warning: require admin key for the schema validate endpoint [#13328](https://github.com/apache/apisix/pull/13328)
98+
- :warning: bound batch-requests pipeline item count, timeout, and tighten request schema [#13492](https://github.com/apache/apisix/pull/13492)
99+
- :warning: default signed_headers to ["date"] in hmac-auth plugin [#13388](https://github.com/apache/apisix/pull/13388)
100+
- :warning: sign request URI cookie and tighten cookie attributes in cas-auth plugin (new required `cookie.secret`) [#13331](https://github.com/apache/apisix/pull/13331)
101+
- :warning: add consumer_isolation (default true) and cache_set_cookie options to proxy-cache plugin [#13350](https://github.com/apache/apisix/pull/13350)
102+
- :warning: add ssl_verify option (default true) and fix shared state in tencent-cloud-cls plugin [#13194](https://github.com/apache/apisix/pull/13194)
103+
- :warning: address TLS ssl_verify hardcoding and credential encryption issues (ai-rag ssl_verify now defaults to true) [#13203](https://github.com/apache/apisix/pull/13203)
104+
- :warning: resolve env vars before YAML parsing to preserve types in standalone mode [#13078](https://github.com/apache/apisix/pull/13078)
105+
106+
### Core
107+
108+
- feat: support batch TCP/UDP port ranges in stream_proxy config [#13153](https://github.com/apache/apisix/pull/13153)
109+
- feat(admin): make /configs/validate available in all modes [#13220](https://github.com/apache/apisix/pull/13220)
110+
- feat: add core.response.get_response_source() API for response origin classification [#13224](https://github.com/apache/apisix/pull/13224)
111+
- feat: add rate-limiting-info variable [#13155](https://github.com/apache/apisix/pull/13155)
112+
- feat: enhance encrypt_fields to support nested structures [#13192](https://github.com/apache/apisix/pull/13192)
113+
- feat: extend secret references to all plugins with central resolution [#13312](https://github.com/apache/apisix/pull/13312)
114+
- perf(core): cache parsed JSON request body to avoid redundant decoding [#13377](https://github.com/apache/apisix/pull/13377)
115+
- perf(ctx): cache parsed request body to avoid repeated decode for post_arg.* [#13356](https://github.com/apache/apisix/pull/13356)
116+
- refactor: extract reusable building blocks from K8s and Nacos discovery [#13201](https://github.com/apache/apisix/pull/13201)
117+
- refactor: extract reusable building blocks from Consul discovery [#13230](https://github.com/apache/apisix/pull/13230)
118+
- fix: replace module-level mutable tables with per-call allocation [#13369](https://github.com/apache/apisix/pull/13369)
119+
- fix: add null_as_nil option to core.json.decode for AI plugins [#13231](https://github.com/apache/apisix/pull/13231)
120+
- fix: add schema compatibility for consumer and credential resources [#13154](https://github.com/apache/apisix/pull/13154)
121+
- fix(admin): use local config to fetch global rules in standalone mode [#13122](https://github.com/apache/apisix/pull/13122)
122+
- fix(admin): strip SSL private keys array in GET single and list responses [#13227](https://github.com/apache/apisix/pull/13227)
123+
- fix: split global rules phase execution for client-control compatibility [#13345](https://github.com/apache/apisix/pull/13345)
124+
- fix: preserve stream service plugin context [#13402](https://github.com/apache/apisix/pull/13402)
125+
- fix(stream/traffic-split): handle upstream_id set by plugin in stream context [#13285](https://github.com/apache/apisix/pull/13285)
126+
- fix(stream/traffic-split): set route_id in stream preread phase [#13284](https://github.com/apache/apisix/pull/13284)
127+
- fix: rebuild stream router when services change [#13318](https://github.com/apache/apisix/pull/13318)
128+
- fix: remove stale HTTP2 body guard [#13428](https://github.com/apache/apisix/pull/13428)
129+
- fix: isolate logger response body buffers [#13450](https://github.com/apache/apisix/pull/13450)
130+
- fix: batch-processor infinite timer loop prevents graceful shutdown [#13288](https://github.com/apache/apisix/pull/13288)
131+
- fix(tracer): prevent stale ctx.tracing crash on HTTPS keepalive connections [#13232](https://github.com/apache/apisix/pull/13232)
132+
- fix: handle missing X-Etcd-Index header gracefully in config_etcd [#13364](https://github.com/apache/apisix/pull/13364)
133+
- fix(core/etcd): nil-deref on response without header field [#13361](https://github.com/apache/apisix/pull/13361)
134+
- fix(consul): tolerate null Service.Meta in fetch_services_from_server [#13258](https://github.com/apache/apisix/pull/13258)
135+
- fix: address TLS security vulnerabilities in SSL log, OIDC encryption, and K8s ssl_verify [#13190](https://github.com/apache/apisix/pull/13190)
136+
- fix: avoid logging plaintext value when encrypt/decrypt fails in ssl.lua [#13298](https://github.com/apache/apisix/pull/13298)
137+
- fix: downgrade decrypt failure log from warn to info [#13324](https://github.com/apache/apisix/pull/13324)
138+
- fix(xrpc): bound redis command-line preallocation size [#13483](https://github.com/apache/apisix/pull/13483)
139+
140+
### Plugins
141+
142+
- feat: add acl plugin [#13349](https://github.com/apache/apisix/pull/13349)
143+
- feat: add data-mask plugin [#13347](https://github.com/apache/apisix/pull/13347)
144+
- feat: add saml-auth plugin [#13346](https://github.com/apache/apisix/pull/13346)
145+
- feat: add dingtalk-auth plugin [#13381](https://github.com/apache/apisix/pull/13381)
146+
- feat: add feishu-auth plugin [#13382](https://github.com/apache/apisix/pull/13382)
147+
- feat(plugin): add error-page plugin [#13380](https://github.com/apache/apisix/pull/13380)
148+
- feat(plugin): add graphql-limit-count plugin [#13372](https://github.com/apache/apisix/pull/13372)
149+
- feat(plugin): add graphql-proxy-cache plugin [#13435](https://github.com/apache/apisix/pull/13435)
150+
- feat: add proxy-buffering plugin [#13446](https://github.com/apache/apisix/pull/13446)
151+
- feat: add oas-validator plugin [#13344](https://github.com/apache/apisix/pull/13344)
152+
- feat: add traffic-label plugin [#13342](https://github.com/apache/apisix/pull/13342)
153+
- feat: add exit-transformer plugin [#13343](https://github.com/apache/apisix/pull/13343)
154+
- feat(request-id): add UUID v7 generation support [#13152](https://github.com/apache/apisix/pull/13152)
155+
- feat(ai-proxy): support aws bedrock [#13249](https://github.com/apache/apisix/pull/13249)
156+
- feat(ai-proxy): support Bedrock ConverseStream streaming [#13307](https://github.com/apache/apisix/pull/13307)
157+
- feat(ai-proxy): add native Anthropic Messages API protocol support [#13181](https://github.com/apache/apisix/pull/13181)
158+
- feat(ai): add OpenAI Responses API (/v1/responses) support [#13186](https://github.com/apache/apisix/pull/13186)
159+
- feat(ai-proxy): add passthrough protocol for unrecognized API formats [#13320](https://github.com/apache/apisix/pull/13320)
160+
- feat(ai-proxy): rewrite Anthropic-to-OpenAI converter with whitelist body construction [#13321](https://github.com/apache/apisix/pull/13321)
161+
- feat(ai-proxy): add provider-aware max_tokens override with priority control [#13251](https://github.com/apache/apisix/pull/13251)
162+
- feat(ai-proxy): add per-protocol request_body override and rename max_tokens mapping to llm_options [#13269](https://github.com/apache/apisix/pull/13269)
163+
- feat(ai-proxy): add max_stream_duration_ms and max_response_bytes safeguards [#13250](https://github.com/apache/apisix/pull/13250)
164+
- feat(ai-proxy): abort upstream read on client disconnect during streaming [#13254](https://github.com/apache/apisix/pull/13254)
165+
- feat: populate upstream nginx variables when ai-proxy uses cosocket transport [#13317](https://github.com/apache/apisix/pull/13317)
166+
- feat(ai-rate-limiting): add expression-based limit strategy [#13191](https://github.com/apache/apisix/pull/13191)
167+
- feat(ai-proxy-multi): add max_retries and retry_on_failure_within_ms for fallback [#13495](https://github.com/apache/apisix/pull/13495)
168+
- feat(elasticsearch-logger): support dynamic index with time and variable resolution [#13334](https://github.com/apache/apisix/pull/13334)
169+
- feat(limit-count): upgrade lua-resty-limit-traffic to v1.2.0 [#13212](https://github.com/apache/apisix/pull/13212)
170+
- feat(proxy-cache): honor Vary header for memory strategy [#13376](https://github.com/apache/apisix/pull/13376)
171+
- feat(cas-auth): support configuring an absolute callback URL [#13413](https://github.com/apache/apisix/pull/13413)
172+
- feat(openid-connect): make client_secret optional for local JWT verification modes [#13472](https://github.com/apache/apisix/pull/13472)
173+
- feat(openid-connect): update session config to support lua-resty-session, fixes deprecated session.cookie.lifetime [#13178](https://github.com/apache/apisix/pull/13178)
174+
- feat(hmac-auth): add max_req_body_size to bound request body during validation [#13478](https://github.com/apache/apisix/pull/13478)
175+
- feat: add max_req_body_size to bound client request body in forward-auth and ai-proxy [#13466](https://github.com/apache/apisix/pull/13466)
176+
- refactor: three-layer AI proxy architecture (protocols/providers/transport) [#13170](https://github.com/apache/apisix/pull/13170)
177+
- perf(ai-proxy): optimize SSE decoder - remove PCRE, add decode_buf, fix comment lines [#13391](https://github.com/apache/apisix/pull/13391)
178+
- perf(ai): reuse raw request body when unchanged [#13406](https://github.com/apache/apisix/pull/13406)
179+
- perf(limit-count): use evalsha with NOSCRIPT fallback for Redis script execution [#13363](https://github.com/apache/apisix/pull/13363)
180+
- fix: sort AI proxy upstream request JSON keys [#13461](https://github.com/apache/apisix/pull/13461)
181+
- fix(ai-proxy-multi): stabilize domain health checks [#13441](https://github.com/apache/apisix/pull/13441)
182+
- fix(ai-proxy-multi): resolve _dns_value in construct_upstream when nil [#13322](https://github.com/apache/apisix/pull/13322)
183+
- fix(ai-proxy): map upstream LLM timeouts to 504 instead of 500 [#13481](https://github.com/apache/apisix/pull/13481)
184+
- fix(ai-proxy): return 502 when streaming converter receives mismatched response format [#13229](https://github.com/apache/apisix/pull/13229)
185+
- fix(ai-proxy): yield to scheduler in streaming SSE loop to avoid worker CPU starvation [#13255](https://github.com/apache/apisix/pull/13255)
186+
- fix(ai-proxy): populate $upstream_response_length for cosocket transport [#13323](https://github.com/apache/apisix/pull/13323)
187+
- fix(ai-request-rewrite): return 400 when request body is missing [#13097](https://github.com/apache/apisix/pull/13097)
188+
- fix(ai-prompt-template): fix malformed JSON error message [#13096](https://github.com/apache/apisix/pull/13096)
189+
- fix(ai-prompt-*): handle nil err in JSON body parse path [#13314](https://github.com/apache/apisix/pull/13314)
190+
- fix: remove llm related metrics for non llm requests [#13088](https://github.com/apache/apisix/pull/13088)
191+
- fix(limit): atomic redis commits and resolved-var validation [#13467](https://github.com/apache/apisix/pull/13467)
192+
- fix(security): encrypt missing secret-like plugin fields at rest [#13389](https://github.com/apache/apisix/pull/13389)
193+
- fix: redact sensitive data from plugin log output [#13123](https://github.com/apache/apisix/pull/13123)
194+
- fix: remove credential-leaking log statements in sls-logger, hmac-auth, tcp-logger, udp-logger [#13205](https://github.com/apache/apisix/pull/13205)
195+
- fix(gcp): report auth_file path instead of file contents in parse error [#13409](https://github.com/apache/apisix/pull/13409)
196+
- fix(authz-keycloak): copy permissions before appending http_method_as_scope [#13410](https://github.com/apache/apisix/pull/13410)
197+
- fix(authz-casdoor): scope session cookie per Casdoor client [#13387](https://github.com/apache/apisix/pull/13387)
198+
- fix(opa): apply send_headers_upstream for headers absent from OPA response [#13433](https://github.com/apache/apisix/pull/13433)
199+
- fix(cas-auth): harden session and callback handling [#13427](https://github.com/apache/apisix/pull/13427)
200+
- fix(cas-auth): return 400 instead of 500 for SLO POST with empty body [#13471](https://github.com/apache/apisix/pull/13471)
201+
- fix(jwe-decrypt): reject tokens that fail to decrypt [#13404](https://github.com/apache/apisix/pull/13404)
202+
- fix(openidc): include request port in `redirect_uri` [#13081](https://github.com/apache/apisix/pull/13081)
203+
- fix(openid-connect): ensure identity headers reflect validated tokens [#13330](https://github.com/apache/apisix/pull/13330)
204+
- fix(forward-auth): clear configured upstream headers not present in auth response [#13183](https://github.com/apache/apisix/pull/13183)
205+
- fix(wolf-rbac): use trusted client IP source for access_check [#13329](https://github.com/apache/apisix/pull/13329)
206+
- fix(chaitin-waf): use trusted client IP source for WAF backend [#13339](https://github.com/apache/apisix/pull/13339)
207+
- fix(file-logger): incorrectly attempts to decompress uncompressed response body [#13100](https://github.com/apache/apisix/pull/13100)
208+
- fix: preserve processed_entries during stale buffer cleanup [#13094](https://github.com/apache/apisix/pull/13094)
209+
- fix(opentelemetry): inject additional_attributes in log phase [#13265](https://github.com/apache/apisix/pull/13265)
210+
- fix(opentelemetry): coerce additional_attributes values to string [#13146](https://github.com/apache/apisix/pull/13146)
211+
- fix(opentelemetry): preserve booleans, handle multi-value headers, tighten test [#13315](https://github.com/apache/apisix/pull/13315)
212+
- fix(brotli): preserve ETag and Last-Modified headers in Brotli-compressed response [#12853](https://github.com/apache/apisix/pull/12853)
213+
- fix: harden cors, multi-auth and body-transformer plugins against malformed requests [#13469](https://github.com/apache/apisix/pull/13469)
214+
- fix(proxy-mirror): keep the original method path when mirroring gRPC requests [#13499](https://github.com/apache/apisix/pull/13499)
215+
- fix(dingtalk-auth): clear client-supplied X-Userinfo before authentication [#13491](https://github.com/apache/apisix/pull/13491)
216+
87217
## 3.16.0
88218

89219
**The changes marked with :warning: are not backward compatible.**

apisix/core/version.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@
2020
-- @module core.version
2121

2222
return {
23-
VERSION = "3.16.0"
23+
VERSION = "3.17.0"
2424
}

ci/check_changelog_prs.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,15 @@ const IGNORE_PRS = [
5555
// 3.15.0
5656
12761, 12805, 12844, 12863, 12829, 12725, 12948,
5757
// 3.16.0
58-
12958, 13053, 13148, 13100, 13094, 13081,
58+
12958, 13053, 13148,
59+
// 3.17.0
60+
// 13386 (add configurable request JSON library) + 13407 (qjson error fix) were
61+
// fully reverted by 13449 within this release, so they net to a no-op and are
62+
// not user-facing. The rest are test-only / CI-only / docs-only changes whose
63+
// subject prefix (e.g. "fix ", "fix(ci)", "feat(seo)", "feat(test)") dodges the
64+
// docs/chore/test/ci type filter but which do not belong in a user changelog.
65+
13386, 13407, 13449, 13485,
66+
13139, 13156, 13157, 13158, 13222, 13234,
5967
];
6068

6169

docs/en/latest/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.16.0",
2+
"version": "3.17.0",
33
"sidebar": [
44
{
55
"type": "category",

docs/zh/latest/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.16.0",
2+
"version": "3.17.0",
33
"sidebar": [
44
{
55
"type": "category",

0 commit comments

Comments
 (0)