feat(proto): support typed message metadata (#1645) - #1976
vishalsahare wants to merge 65 commits into
Conversation
|
Hello @vishalsahare! Thanks a lot for your contribution 🙏 I see there are a bit of merge conflicts. Would you please rebase your branch on top of latest main? |
ee0d7bf to
061517f
Compare
|
I have resolved conflicts. Thank you. |
061517f to
1a2cfe9
Compare
There was a problem hiding this comment.
Thanks for your PR @vishalsahare!
With this change we are breaking the protobuf compatibility, and as we are not going to release a v3 soon, the PR cannot be merged as it is.
We should introduce a parallel metadata field supporting google Struct to be used in parallel with the current one, and when we will upgrade to v3 we can remove the old map<string, string> metadata.
So in the protobuf, we should have:
map<string, string> metadata = 4;
google.protobuf.Struct metadata_v3 = 5;And then we can offer an additional API allowing to set/get generic metadata (so not only string -> string).
Reply: 5 is used for link message hence using 7 |
031362d to
e87336f
Compare
|
ci-buf: All jobs have failed => I have created vishalsahare login in buf.build. agntcy is not listed. Getting suggestion as follows "ask an AGNTCY organization administrator to grant access. A token from an account without write permission cannot push to buf.build/agntcy/slim." https://github.com/vishalsahare/slim/actions/runs/33795311152 reference for error. Can you please help me in this. |
305c419 to
4288c83
Compare
…ayload (agntcy#1961) # Description is_eos() treated any Ok message with an empty payload as end-of-stream, and send_response_stream stamped slimrpc-code = Ok onto every response data frame. A response that encodes to zero bytes was therefore indistinguishable from the terminator and got consumed as one — Channel::unary returned Internal: "No response received". This hits every RPC returning google.protobuf.Empty, and any response with no fields set (an empty list result, for example). It surfaced in the A2A Go SDK, where DeleteTaskPushNotificationConfig fails on every successful delete. Response data frames no longer carry a status, so the presence of the status header is the terminal signal — matching gRPC's grpc-status trailer, and matching what the client side already did via first_msg_metadata / continuation_metadata. is_eos() keeps the empty-payload check alongside the status-presence check: presence alone would make a client on this version read the first data frame from an older server as EOS, since those stamp Ok on every frame. With both clauses, behaviour against older peers is unchanged rather than broken — no wire break. Also updates the demux filter in server.rs, which identified echoed server responses by status presence; it now keys off RPC_DIR_KEY directly, which is what it meant. Adds regression coverage for zero-byte unary and streamed responses, and extends test_request_stream to cover all four frame shapes including a legacy-style data frame carrying both a status and a payload. ## Type of Change - [ ] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) ## Checklist - [ ] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [ ] Existing issues have been referenced (where applicable) - [ ] I have verified this change is not present in other open pull requests - [ ] Functionality is documented - [ ] All code style checks pass - [ ] New code contribution is covered by automated tests - [ ] All new and existing tests pass --------- Signed-off-by: Janos Sarusi-Kis <janossk@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
# Description This PR fixes the GitHub Good First Issues link so it only shows the open issues. ## Type of Change - [x] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) ## Checklist - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [ ] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [ ] Functionality is documented - [ ] All code style checks pass - [ ] New code contribution is covered by automated tests - [ ] All new and existing tests pass Signed-off-by: Aron Kerekes <arkereke@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
agntcy#1971) # Description Two processes sharing the same `refresh_token_file` could both read the same refresh token and send it to the IdP concurrently. The first succeeds and rotates the token; the second gets `invalid_grant` and its background renewal loop exits permanently. # Changes - Add `lock_and_reload` callback to `RefreshTokenProviderConfig` that acquires an exclusive lock and returns the current tokens from the backing store - In `fetch_new_token`, acquire the lock before the IdP call and hold it until `persist_credentials` completes - Skip the IdP call if the access token from disk is still fresh (within the first 2/3 of its lifetime), consistent with the background task's refresh threshold - Add `extract_exp_iat_claims_unsafe` to the JWT module for the freshness check - Wire up the `lock_and_reload` closure in the `refresh_token_file` branch of `get_client_layer`, using a companion `.lock` file as the locking target so `write_secret_file` can open the token file freely without a re-entrant lock - Use `fs2::FileExt::lock_exclusive` for cross-platform file locking without unsafe - Add a test verifying that concurrent callers of the lock closure are serialized and read distinct tokens ## Type of Change - [x] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) ## Checklist - [ ] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [ ] Existing issues have been referenced (where applicable) - [ ] I have verified this change is not present in other open pull requests - [ ] Functionality is documented - [ ] All code style checks pass - [ ] New code contribution is covered by automated tests - [ ] All new and existing tests pass --------- Signed-off-by: Mark Marton <mark.p.marton@gmail.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
## 🤖 New release
* `agntcy-slim-version`: 2.0.0 -> 2.1.0
* `agntcy-slim-auth`: 0.14.6 -> 0.15.0 (⚠ API breaking changes)
* `agntcy-slim-config`: 0.14.5 -> 0.15.0 (⚠ API breaking changes)
* `agntcy-slim-datapath`: 0.18.2 -> 0.18.3 (✓ API compatible changes)
* `agntcy-slim`: 2.0.0 -> 2.1.0
* `agntcy-slim-channel-manager`: 2.0.0 -> 2.1.0
* `agntcy-slim-control-plane`: 2.0.0 -> 2.1.0 (✓ API compatible changes)
* `agntcy-slim-bindings`: 2.0.0 -> 2.1.0 (✓ API compatible changes)
* `agntcy-slim-rpc`: 2.0.0 -> 2.1.0 (✓ API compatible changes)
* `agntcy-slimctl`: 2.0.0 -> 2.1.0
* `agntcy-slim-proto`: 0.5.6 -> 0.5.7
* `agntcy-slim-tracing`: 0.4.15 -> 0.4.16
* `agntcy-slim-mls`: 0.3.5 -> 0.3.6
* `agntcy-slim-session`: 0.7.6 -> 0.7.7
* `agntcy-slim-signal`: 0.1.21 -> 0.1.22
* `agntcy-slim-controller`: 0.12.6 -> 0.12.7
* `agntcy-slim-service`: 0.12.6 -> 0.12.7
### ⚠ `agntcy-slim-auth` breaking changes
```text
--- failure enum_variant_added: enum variant added on exhaustive enum ---
Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron
Failed in:
variant AuthError:OidcDiscoveryMissingIssuer in /tmp/.tmp180Cii/slim/crates/auth/src/errors.rs:44
variant AuthError:OidcDiscoveryIssuerMismatch in /tmp/.tmp180Cii/slim/crates/auth/src/errors.rs:46
variant AuthError:OidcDiscoveryUrlOriginMismatch in /tmp/.tmp180Cii/slim/crates/auth/src/errors.rs:48
variant AuthError:OidcInsecureIssuerUrl in /tmp/.tmp180Cii/slim/crates/auth/src/errors.rs:50
variant AuthError:RefreshTokenRevoked in /tmp/.tmp180Cii/slim/crates/auth/src/errors.rs:64
variant AuthError:PolicyCompile in /tmp/.tmp180Cii/slim/crates/auth/src/errors.rs:179
```
### ⚠ `agntcy-slim-config` breaking changes
```text
--- failure constructible_struct_adds_field: externally-constructible struct adds field ---
Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/constructible_struct_adds_field.ron
Failed in:
field Config.refresh_token in /tmp/.tmp180Cii/slim/crates/config/src/auth/oidc.rs:49
field Config.refresh_token_file in /tmp/.tmp180Cii/slim/crates/config/src/auth/oidc.rs:65
field Config.access_token_file in /tmp/.tmp180Cii/slim/crates/config/src/auth/oidc.rs:74
field Config.claim_cache_ttl in /tmp/.tmp180Cii/slim/crates/config/src/auth/oidc.rs:97
field Config.policy in /tmp/.tmp180Cii/slim/crates/config/src/auth/oidc.rs:104
--- failure enum_variant_added: enum variant added on exhaustive enum ---
Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron
Failed in:
variant AuthenticationConfig:Oidc in /tmp/.tmp180Cii/slim/crates/config/src/client.rs:133
variant AuthenticationConfig:Oidc in /tmp/.tmp180Cii/slim/crates/config/src/client.rs:133
variant AuthenticationConfig:Oidc in /tmp/.tmp180Cii/slim/crates/config/src/server.rs:76
variant AuthenticationConfig:Oidc in /tmp/.tmp180Cii/slim/crates/config/src/server.rs:76
```
<details><summary><i><b>Changelog</b></i></summary><p>
## `agntcy-slim-version`
<blockquote>
##
[1.3.0](https://github.com/agntcy/slim/releases/tag/slim-version-v1.3.0)
- 2026-03-20
### Added
- add agntcy-slim-version crate as single source of truth for version
and build info ([agntcy#1360](agntcy#1360))
</blockquote>
## `agntcy-slim-auth`
<blockquote>
##
[0.15.0](agntcy/slim@slim-auth-v0.14.6...slim-auth-v0.15.0)
- 2026-08-12
### Added
- *(slimctl)* OIDC token refresh for long-lived nodes
([agntcy#1960](agntcy#1960))
- *(auth)* OIDC and static JWT validation with claim-based access
control ([agntcy#1957](agntcy#1957))
### Fixed
- *(auth)* serialize concurrent refresh-token exchanges with file lock
([agntcy#1971](agntcy#1971))
- *(auth)* await the rotated-credential persist instead of detaching it
([agntcy#1967](agntcy#1967))
</blockquote>
## `agntcy-slim-config`
<blockquote>
##
[0.15.0](agntcy/slim@slim-config-v0.14.5...slim-config-v0.15.0)
- 2026-08-12
### Added
- *(slimctl)* record login credentials in the connection config
([agntcy#1965](agntcy#1965))
- *(slimctl)* OIDC token refresh for long-lived nodes
([agntcy#1960](agntcy#1960))
- *(auth)* OIDC and static JWT validation with claim-based access
control ([agntcy#1957](agntcy#1957))
### Fixed
- *(auth)* serialize concurrent refresh-token exchanges with file lock
([agntcy#1971](agntcy#1971))
### Other
- *(config)* use DurationString for timeout and jwks_ttl in OIDC config
([agntcy#1964](agntcy#1964))
</blockquote>
## `agntcy-slim-datapath`
<blockquote>
##
[0.18.3](agntcy/slim@slim-datapath-v0.18.2...slim-datapath-v0.18.3)
- 2026-08-12
### Added
- *(auth)* OIDC and static JWT validation with claim-based access
control ([agntcy#1957](agntcy#1957))
</blockquote>
## `agntcy-slim`
<blockquote>
##
[2.0.0](agntcy/slim@slim-v2.0.0...slim-v2.0.0)
- 2026-08-04
### Other
- update Cargo.lock dependencies
</blockquote>
## `agntcy-slim-channel-manager`
<blockquote>
##
[2.0.0](agntcy/slim@slim-channel-manager-v2.0.0...slim-channel-manager-v2.0.0)
- 2026-08-04
### Other
- update Cargo.lock dependencies
</blockquote>
## `agntcy-slim-control-plane`
<blockquote>
##
[2.1.0](agntcy/slim@slim-control-plane-v2.0.0...slim-control-plane-v2.1.0)
- 2026-08-12
### Added
- *(control-plane)* support multiple northbound and southbound listeners
([agntcy#1966](agntcy#1966))
</blockquote>
## `agntcy-slim-bindings`
<blockquote>
##
[2.1.0](agntcy/slim@slim-bindings-v2.0.0...slim-bindings-v2.1.0)
- 2026-08-12
### Added
- *(slimctl)* OIDC token refresh for long-lived nodes
([agntcy#1960](agntcy#1960))
- *(auth)* OIDC and static JWT validation with claim-based access
control ([agntcy#1957](agntcy#1957))
</blockquote>
## `agntcy-slim-rpc`
<blockquote>
##
[2.1.0](agntcy/slim@slim-rpc-v2.0.0...slim-rpc-v2.1.0)
- 2026-08-12
### Fixed
- *(rpc)* signal end-of-stream with the status header, not an empty
payload ([agntcy#1961](agntcy#1961))
</blockquote>
## `agntcy-slimctl`
<blockquote>
##
[2.1.0](agntcy/slim@slimctl-v2.0.0...slimctl-v2.1.0)
- 2026-08-12
### Added
- *(slimctl)* record login credentials in the connection config
([agntcy#1965](agntcy#1965))
- *(slimctl)* OIDC token refresh for long-lived nodes
([agntcy#1960](agntcy#1960))
- *(auth)* OIDC and static JWT validation with claim-based access
control ([agntcy#1957](agntcy#1957))
- *(slimctl)* add login subcommand with OIDC auth code flow and PKCE
([agntcy#1955](agntcy#1955))
</blockquote>
## `agntcy-slim-proto`
<blockquote>
##
[0.5.7](agntcy/slim@slim-proto-v0.5.6...slim-proto-v0.5.7)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version,
agntcy-slim-config
</blockquote>
## `agntcy-slim-tracing`
<blockquote>
##
[0.4.16](agntcy/slim@slim-tracing-v0.4.15...slim-tracing-v0.4.16)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version,
agntcy-slim-config
</blockquote>
## `agntcy-slim-mls`
<blockquote>
##
[0.3.6](agntcy/slim@slim-mls-v0.3.5...slim-mls-v0.3.6)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version,
agntcy-slim-auth
</blockquote>
## `agntcy-slim-session`
<blockquote>
##
[0.7.7](agntcy/slim@slim-session-v0.7.6...slim-session-v0.7.7)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version,
agntcy-slim-auth, agntcy-slim-datapath, agntcy-slim-mls
</blockquote>
## `agntcy-slim-signal`
<blockquote>
##
[0.1.22](agntcy/slim@slim-signal-v0.1.21...slim-signal-v0.1.22)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version
</blockquote>
## `agntcy-slim-controller`
<blockquote>
##
[0.12.7](agntcy/slim@slim-controller-v0.12.6...slim-controller-v0.12.7)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version,
agntcy-slim-auth, agntcy-slim-config, agntcy-slim-datapath,
agntcy-slim-proto, agntcy-slim-tracing, agntcy-slim-session,
agntcy-slim-signal
</blockquote>
## `agntcy-slim-service`
<blockquote>
##
[0.12.7](agntcy/slim@slim-service-v0.12.6...slim-service-v0.12.7)
- 2026-08-12
### Other
- updated the following local packages: agntcy-slim-version,
agntcy-slim-auth, agntcy-slim-config, agntcy-slim-datapath,
agntcy-slim-mls, agntcy-slim-session, agntcy-slim-controller
</blockquote>
</p></details>
---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
- This update changes SLIM message metadata from a string-only Protobuf map to
google.protobuf.Struct, enabling typed metadata values.
- Metadata APIs
* Updated ProtoMessage and its builder to:
* Create metadata lazily with get_or_insert_default().
* Insert values implementing Into<prost_types::Value>.
* Get and remove typed Protobuf values.
* Set or retrieve the complete metadata Struct.
* Represent absent metadata as None.
- Compatibility conversions
* These preserve existing string-only interfaces in session, RPC, and language bindings.
When converting back to a string map, non-string values are intentionally omitted
- Dependencies
* Added prost-types dependencies to crates that now access Protobuf Struct and Value directly.
- Tests
* Added or updated tests covering:
* String metadata insertion.
* Typed metadata values.
* Nested and list values.
* Null values.
* Protobuf encode/decode round trips.
* Session publishing with metadata.
- Targeted verification passed:
* Proto message tests: 19 passed
* Session metadata test: 1 passed
* Formatting check: passed
- [x] Bugfix
- [ ] New Feature
- [ ] Breaking Change
- [ ] Refactor
- [ ] Documentation
- [ ] Other (please describe)
- [x] I have read the [contributing
guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md)
- [ ] Existing issues have been referenced (where applicable)
- [x] I have verified this change is not present in other open pull
requests
- [ ] Functionality is documented
- [x] All code style checks pass
- [x] New code contribution is covered by automated tests
- [x] All new and existing tests pass
---------
Signed-off-by: Vishal Sahare <vishal.sahare@gmail.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Added metadata protobuf api version v3
- [x] Bugfix
- [ ] New Feature
- [ ] Breaking Change
- [ ] Refactor
- [ ] Documentation
- [ ] Other (please describe)
- [x] I have read the [contributing
guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md)
- [ ] Existing issues have been referenced (where applicable)
- [x] I have verified this change is not present in other open pull
requests
- [ ] Functionality is documented
- [x] All code style checks pass
- [x] New code contribution is covered by automated tests
- [x] All new and existing tests pass
---------
Signed-off-by: Vishal Sahare <vishal.sahare@gmail.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
# Description Upgrade all images to version v2.1.0 ## Type of Change - [ ] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [x] Release ## Checklist - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [x] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [x] Functionality is documented - [x] All code style checks pass - [x] New code contribution is covered by automated tests - [x] All new and existing tests pass Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [2.1.0](agntcy/slim@helm-slim-v2.0.0...helm-slim-v2.1.0) (2026-08-12) ### Features * upgrade helm chart to latest image version ([agntcy#1973](agntcy#1973)) ([ad183e9](agntcy@ad183e9)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Signed-off-by: Agntcy Build Bot <build@agntcy.io> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [2.1.0](agntcy/slim@helm-slim-channel-manager-v2.0.0...helm-slim-channel-manager-v2.1.0) (2026-08-12) ### Features * upgrade helm chart to latest image version ([agntcy#1973](agntcy#1973)) ([ad183e9](agntcy@ad183e9)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Signed-off-by: Agntcy Build Bot <build@agntcy.io> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [2.1.0](agntcy/slim@helm-slim-control-plane-v2.0.0...helm-slim-control-plane-v2.1.0) (2026-08-12) ### Features * **control-plane:** support multiple northbound and southbound listeners ([agntcy#1966](agntcy#1966)) ([1c140dc](agntcy@1c140dc)) * upgrade helm chart to latest image version ([agntcy#1973](agntcy#1973)) ([ad183e9](agntcy@ad183e9)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Signed-off-by: Agntcy Build Bot <build@agntcy.io> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
# Description Fix build on windows due to an issue of the file mode not available there. ## Type of Change - [x] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) ## Checklist - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [x] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [x] Functionality is documented - [x] All code style checks pass - [x] New code contribution is covered by automated tests - [x] All new and existing tests pass Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
# Description Fix windows build failure due to Spire not available. ## Type of Change - [x] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) ## Checklist - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [x] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [x] Functionality is documented - [x] All code style checks pass - [x] New code contribution is covered by automated tests - [x] All new and existing tests pass --------- Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
## 🤖 New release * `agntcy-slim-version`: 2.1.0 -> 2.1.1 * `agntcy-slim`: 2.1.0 -> 2.1.1 * `agntcy-slim-channel-manager`: 2.1.0 -> 2.1.1 * `agntcy-slim-control-plane`: 2.1.0 -> 2.1.1 (✓ API compatible changes) * `agntcy-slim-bindings`: 2.1.0 -> 2.1.1 * `agntcy-slim-rpc`: 2.1.0 -> 2.1.1 * `agntcy-slimctl`: 2.1.0 -> 2.1.1 * `agntcy-slim-auth`: 0.15.0 -> 0.15.1 * `agntcy-slim-config`: 0.15.0 -> 0.15.1 * `agntcy-slim-proto`: 0.5.7 -> 0.5.8 * `agntcy-slim-tracing`: 0.4.16 -> 0.4.17 * `agntcy-slim-datapath`: 0.18.3 -> 0.18.4 * `agntcy-slim-mls`: 0.3.6 -> 0.3.7 * `agntcy-slim-session`: 0.7.7 -> 0.7.8 * `agntcy-slim-signal`: 0.1.22 -> 0.1.23 * `agntcy-slim-controller`: 0.12.7 -> 0.12.8 * `agntcy-slim-service`: 0.12.7 -> 0.12.8 <details><summary><i><b>Changelog</b></i></summary><p> ## `agntcy-slim-version` <blockquote> ## [1.3.0](https://github.com/agntcy/slim/releases/tag/slim-version-v1.3.0) - 2026-03-20 ### Added - add agntcy-slim-version crate as single source of truth for version and build info ([agntcy#1360](agntcy#1360)) </blockquote> ## `agntcy-slim` <blockquote> ## [2.0.0](agntcy/slim@slim-v2.0.0...slim-v2.0.0) - 2026-08-04 ### Other - update Cargo.lock dependencies </blockquote> ## `agntcy-slim-channel-manager` <blockquote> ## [2.0.0](agntcy/slim@slim-channel-manager-v2.0.0...slim-channel-manager-v2.0.0) - 2026-08-04 ### Other - update Cargo.lock dependencies </blockquote> ## `agntcy-slim-control-plane` <blockquote> ## [2.1.1](agntcy/slim@slim-control-plane-v2.1.0...slim-control-plane-v2.1.1) - 2026-08-12 ### Fixed - windows build ([agntcy#1978](agntcy#1978)) </blockquote> ## `agntcy-slim-bindings` <blockquote> ## [2.1.0](agntcy/slim@slim-bindings-v2.0.0...slim-bindings-v2.1.0) - 2026-08-12 ### Added - *(slimctl)* OIDC token refresh for long-lived nodes ([agntcy#1960](agntcy#1960)) - *(auth)* OIDC and static JWT validation with claim-based access control ([agntcy#1957](agntcy#1957)) </blockquote> ## `agntcy-slim-rpc` <blockquote> ## [2.1.0](agntcy/slim@slim-rpc-v2.0.0...slim-rpc-v2.1.0) - 2026-08-12 ### Fixed - *(rpc)* signal end-of-stream with the status header, not an empty payload ([agntcy#1961](agntcy#1961)) </blockquote> ## `agntcy-slimctl` <blockquote> ## [2.1.1](agntcy/slim@slimctl-v2.1.0...slimctl-v2.1.1) - 2026-08-12 ### Fixed - windows build ([agntcy#1978](agntcy#1978)) - windows build ([agntcy#1977](agntcy#1977)) </blockquote> ## `agntcy-slim-auth` <blockquote> ## [0.15.1](agntcy/slim@slim-auth-v0.15.0...slim-auth-v0.15.1) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version </blockquote> ## `agntcy-slim-config` <blockquote> ## [0.15.1](agntcy/slim@slim-config-v0.15.0...slim-config-v0.15.1) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth </blockquote> ## `agntcy-slim-proto` <blockquote> ## [0.5.8](agntcy/slim@slim-proto-v0.5.7...slim-proto-v0.5.8) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-config </blockquote> ## `agntcy-slim-tracing` <blockquote> ## [0.4.17](agntcy/slim@slim-tracing-v0.4.16...slim-tracing-v0.4.17) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-config </blockquote> ## `agntcy-slim-datapath` <blockquote> ## [0.18.4](agntcy/slim@slim-datapath-v0.18.3...slim-datapath-v0.18.4) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-config, agntcy-slim-proto, agntcy-slim-tracing </blockquote> ## `agntcy-slim-mls` <blockquote> ## [0.3.7](agntcy/slim@slim-mls-v0.3.6...slim-mls-v0.3.7) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth </blockquote> ## `agntcy-slim-session` <blockquote> ## [0.7.8](agntcy/slim@slim-session-v0.7.7...slim-session-v0.7.8) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth, agntcy-slim-datapath, agntcy-slim-mls </blockquote> ## `agntcy-slim-signal` <blockquote> ## [0.1.23](agntcy/slim@slim-signal-v0.1.22...slim-signal-v0.1.23) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version </blockquote> ## `agntcy-slim-controller` <blockquote> ## [0.12.8](agntcy/slim@slim-controller-v0.12.7...slim-controller-v0.12.8) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth, agntcy-slim-config, agntcy-slim-proto, agntcy-slim-tracing, agntcy-slim-datapath, agntcy-slim-session, agntcy-slim-signal </blockquote> ## `agntcy-slim-service` <blockquote> ## [0.12.8](agntcy/slim@slim-service-v0.12.7...slim-service-v0.12.8) - 2026-08-12 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth, agntcy-slim-config, agntcy-slim-datapath, agntcy-slim-mls, agntcy-slim-session, agntcy-slim-controller </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Update Homebrew cask to reflect release changes Release: slimctl-v2.1.1 Co-authored-by: build-agntcy <198542035+build-agntcy@users.noreply.github.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
…cy#1982) ## Summary - Add `OidcConfig` record (mirrors `slim_config::auth::oidc::Config`) with all fields: `issuer_url`, `client_id`, `client_secret`, `audience`, `refresh_token`, `refresh_token_file`, `access_token_file`, `scope`, `timeout`, `jwks_ttl`, `claim_cache_ttl`, `policy` - Add `OidcPolicyConfig` enum (mirrors `slim_config::auth::PolicyConfig`) with `Rego`, `RegoFile`, and `Cel` variants - Add `Oidc { config: OidcConfig }` variant to `ClientAuthenticationConfig` and `ServerAuthenticationConfig` - Fix the placeholder that silently returned `None` for OIDC client auth and the `unimplemented!()` panic for OIDC server auth ## Test plan - [ ] `cargo test -p agntcy-slim-bindings` passes (all 303 tests pass locally) - [ ] Build succeeds on all platforms - [ ] Verify OIDC client-credentials flow works from Go/Swift/Kotlin bindings - [ ] Verify OIDC refresh-token flow works from bindings - [ ] Verify OIDC server-side verification (JWKS) works from bindings --------- Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
## 🤖 New release * `agntcy-slim-version`: 2.1.1 -> 2.2.0 * `agntcy-slim`: 2.1.1 -> 2.2.0 * `agntcy-slim-channel-manager`: 2.1.1 -> 2.2.0 * `agntcy-slim-control-plane`: 2.1.1 -> 2.2.0 * `agntcy-slim-bindings`: 2.1.1 -> 2.2.0 (✓ API compatible changes) * `agntcy-slim-rpc`: 2.1.1 -> 2.2.0 * `agntcy-slimctl`: 2.1.1 -> 2.2.0 * `agntcy-slim-auth`: 0.15.1 -> 0.15.2 * `agntcy-slim-config`: 0.15.1 -> 0.15.2 * `agntcy-slim-proto`: 0.5.8 -> 0.5.9 * `agntcy-slim-tracing`: 0.4.17 -> 0.4.18 * `agntcy-slim-datapath`: 0.18.4 -> 0.18.5 * `agntcy-slim-mls`: 0.3.7 -> 0.3.8 * `agntcy-slim-session`: 0.7.8 -> 0.7.9 * `agntcy-slim-signal`: 0.1.23 -> 0.1.24 * `agntcy-slim-controller`: 0.12.8 -> 0.12.9 * `agntcy-slim-service`: 0.12.8 -> 0.12.9 <details><summary><i><b>Changelog</b></i></summary><p> ## `agntcy-slim-version` <blockquote> ## [1.3.0](https://github.com/agntcy/slim/releases/tag/slim-version-v1.3.0) - 2026-03-20 ### Added - add agntcy-slim-version crate as single source of truth for version and build info ([agntcy#1360](agntcy#1360)) </blockquote> ## `agntcy-slim` <blockquote> ## [2.0.0](agntcy/slim@slim-v2.0.0...slim-v2.0.0) - 2026-08-04 ### Other - update Cargo.lock dependencies </blockquote> ## `agntcy-slim-channel-manager` <blockquote> ## [2.0.0](agntcy/slim@slim-channel-manager-v2.0.0...slim-channel-manager-v2.0.0) - 2026-08-04 ### Other - update Cargo.lock dependencies </blockquote> ## `agntcy-slim-control-plane` <blockquote> ## [2.1.1](agntcy/slim@slim-control-plane-v2.1.0...slim-control-plane-v2.1.1) - 2026-08-12 ### Fixed - windows build ([agntcy#1978](agntcy#1978)) </blockquote> ## `agntcy-slim-bindings` <blockquote> ## [2.2.0](agntcy/slim@slim-bindings-v2.1.1...slim-bindings-v2.2.0) - 2026-08-13 ### Added - *(bindings)* expose OIDC authentication in language bindings ([agntcy#1982](agntcy#1982)) </blockquote> ## `agntcy-slim-rpc` <blockquote> ## [2.1.0](agntcy/slim@slim-rpc-v2.0.0...slim-rpc-v2.1.0) - 2026-08-12 ### Fixed - *(rpc)* signal end-of-stream with the status header, not an empty payload ([agntcy#1961](agntcy#1961)) </blockquote> ## `agntcy-slimctl` <blockquote> ## [2.1.1](agntcy/slim@slimctl-v2.1.0...slimctl-v2.1.1) - 2026-08-12 ### Fixed - windows build ([agntcy#1978](agntcy#1978)) - windows build ([agntcy#1977](agntcy#1977)) </blockquote> ## `agntcy-slim-auth` <blockquote> ## [0.15.2](agntcy/slim@slim-auth-v0.15.1...slim-auth-v0.15.2) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version </blockquote> ## `agntcy-slim-config` <blockquote> ## [0.15.2](agntcy/slim@slim-config-v0.15.1...slim-config-v0.15.2) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth </blockquote> ## `agntcy-slim-proto` <blockquote> ## [0.5.9](agntcy/slim@slim-proto-v0.5.8...slim-proto-v0.5.9) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-config </blockquote> ## `agntcy-slim-tracing` <blockquote> ## [0.4.18](agntcy/slim@slim-tracing-v0.4.17...slim-tracing-v0.4.18) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-config </blockquote> ## `agntcy-slim-datapath` <blockquote> ## [0.18.5](agntcy/slim@slim-datapath-v0.18.4...slim-datapath-v0.18.5) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-config, agntcy-slim-proto, agntcy-slim-tracing </blockquote> ## `agntcy-slim-mls` <blockquote> ## [0.3.8](agntcy/slim@slim-mls-v0.3.7...slim-mls-v0.3.8) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth </blockquote> ## `agntcy-slim-session` <blockquote> ## [0.7.9](agntcy/slim@slim-session-v0.7.8...slim-session-v0.7.9) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth, agntcy-slim-datapath, agntcy-slim-mls </blockquote> ## `agntcy-slim-signal` <blockquote> ## [0.1.24](agntcy/slim@slim-signal-v0.1.23...slim-signal-v0.1.24) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version </blockquote> ## `agntcy-slim-controller` <blockquote> ## [0.12.9](agntcy/slim@slim-controller-v0.12.8...slim-controller-v0.12.9) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth, agntcy-slim-config, agntcy-slim-proto, agntcy-slim-tracing, agntcy-slim-datapath, agntcy-slim-session, agntcy-slim-signal </blockquote> ## `agntcy-slim-service` <blockquote> ## [0.12.9](agntcy/slim@slim-service-v0.12.8...slim-service-v0.12.9) - 2026-08-13 ### Other - updated the following local packages: agntcy-slim-version, agntcy-slim-auth, agntcy-slim-config, agntcy-slim-datapath, agntcy-slim-mls, agntcy-slim-session, agntcy-slim-controller </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
) ## Summary - `RequiredAuthMethod` lacked an `Oidc` variant, causing OIDC client configs to be silently folded into `Jwt` in `from_client_config`, with no matching arm in `merge_server_requirements` - `diff_connections` had no access to `controller.clients` credentials as a fallback when no `outbound_clients` entry matched the CP-assigned endpoint - `RequiredAuthMethod::None` was wiping local auth (`self.auth = None`), so any locally configured OIDC credentials were destroyed when the CP sent `None` for the auth method — which it does whenever it doesn't model the auth explicitly - The proto `AuthMethod` enum and `model::AuthMethod` had no `Oidc` variant, so the CP could never signal OIDC to nodes ## Changes **`crates/config/src/client.rs`** - Add `RequiredAuthMethod::Oidc`; fix `from_client_config` to map `AuthenticationConfig::Oidc` → `RequiredAuthMethod::Oidc` (was `Jwt`) - Add `RequiredAuthMethod::Oidc => {}` arm to `merge_server_requirements` (preserves local auth, matching `Jwt` behaviour) - Change `RequiredAuthMethod::None` arm from `self.auth = None` to a no-op — `None` means "no auth required", not "force no auth", so locally configured credentials survive **`crates/controller/src/service.rs`** - Store `controller.clients` on `ControllerServiceInternal` for auth fallback - `diff_connections` inherits auth from the first non-`None` `clients` entry when no `outbound_clients` entry matches the CP-assigned endpoint - Credential guard updated to cover `Oidc` and check post-merge `client_config.auth` instead of `outbound_clients` membership **`crates/control-plane/`** - Add `AUTH_METHOD_OIDC = 4` to the controller proto enum and regenerate bindings - Add `model::AuthMethod::Oidc` with full southbound (proto→model) and northbound (model→proto) round-trip - Wire `model::AuthMethod::Oidc → RequiredAuthMethod::Oidc` in `generate_config_data` ## Test plan - [ ] Build `agntcy-slim-config`, `agntcy-slim-controller`, and `agntcy-slim-control-plane` with no errors - [ ] All 261+ `agntcy-slim-config` tests pass - [ ] Node configured with OIDC in `controller.clients` can establish CP-managed outbound links without a duplicate `outbound_clients` entry - [ ] Node with explicit `outbound_clients` entries continues to use those credentials (fallback not triggered) - [ ] Node with `auth_method: None` on a link no longer has its local OIDC credentials wiped - [ ] CP registered with `auth_method: oidc` correctly sends `RequiredAuthMethod::Oidc` to nodes --------- Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
## Summary
- On every reconnect cycle, the span hierarchy grew by two levels:
`process_stream → reconnect → process_stream → reconnect → …`
- `#[tracing::instrument]` on `reconnect` creates its span
**synchronously when the function is called**, making it a child of the
current `process_stream` span before `.instrument(Span::none())` at the
call site could have any effect
- The new `process_stream` spawned inside `reconnect` then inherited
that span as its parent, and its own reconnect loop continued the chain
## Fix
Remove `#[tracing::instrument]` from `reconnect` and create the span
manually **inside the async body**. Code inside `async fn` runs when the
future is first polled, not when the function is called. The call site
wraps the future with `.instrument(Span::none())`, so `Span::none()` is
the active context at poll time — any span created inside the body
becomes a root span.
Result: every reconnect cycle starts a fresh `reconnect` root span.
Depth is capped at `reconnect → process_stream` regardless of how many
cycles occur.
## Before / After
**Before** (after 11 reconnects):
```
process_stream:reconnect:process_stream:reconnect:process_stream:reconnect:…:reconnect: connection re-established
```
**After** (any number of reconnects):
```
reconnect{conn_index=0}: connection re-established
```
## Test plan
- [ ] Build `agntcy-slim-datapath` with no errors
- [ ] Run a node against a peer that repeatedly drops — confirm log
spans stay flat (`reconnect{…}: …`) and do not accumulate nesting
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
…llback (agntcy#1989) ## Summary - Fix `from_server_config` so `AuthenticationConfig::Oidc` maps to `AuthMethod::Oidc` instead of falling through to `None`, ensuring the CP stores and forwards the correct auth method after node registration. - Fix `merge_server_requirements` so `RequiredAuthMethod::None` from the CP no longer wipes local OIDC credentials (now a no-op). - In `diff_connections`, after failing to find credentials in `outbound_clients` (exact endpoint match or empty-endpoint default), fall back to the node's own `dataplane.clients` by endpoint. This means a node that already authenticates to an endpoint via `dataplane.clients` (e.g. with OIDC) does not need to duplicate those credentials under `controller.outbound_clients` to satisfy CP-managed Remote links to the same endpoint. - Normalize endpoints before comparison (`https://host` and `https://host:443` are treated as equivalent) so the fallback lookup matches even when the CP records an explicit port but the local config omits it. ## Test plan - Build passes (`cargo build --bin slim`). - All existing unit tests pass. - Manually verified: CP-ordered Remote link to an endpoint that is already reachable via `dataplane.clients` with OIDC now inherits those credentials and connects successfully without duplicating config. Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Adds an OpenSSF Scorecard workflow so the project gets a published security score. - Runs weekly, on push to main, on branch protection changes, and via manual dispatch - Publishes results to securityscorecards.dev (enables badge) - Uploads SARIF results to GitHub code scanning Validation: `actionlint .github/workflows/scorecard.yaml` passes with no errors. --------- Signed-off-by: Luca Muscariello <muscariello@ieee.org> Co-authored-by: Árpád Csepi <21104922+arpad-csepi@users.noreply.github.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Bumps action pins in the Scorecard workflow to the latest releases. - actions/checkout to v7.0.1 (3d3c42e5aac5ba805825da76410c181273ba90b1) - github/codeql-action/upload-sarif to v4.37.9 (cdf488f595d80d6e07e03d4674febd5ab45fa938) Validation: `actionlint .github/workflows/scorecard.yaml` passes with no errors. --------- Signed-off-by: Luca Muscariello <muscariello@ieee.org> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Addresses several open GitHub code scanning alerts (CodeQL, zizmor, Scorecard). - auth: enforce HTTPS on issuer_url in refresh_token.rs before token exchange (matches oidc.rs's existing guard) — closes a cleartext-transmission gap - Suppress CodeQL hard-coded-cryptographic-value false positives on test-only fixture credentials - zizmor: fix template-injection in trigger-integrations action (env vars instead of inline script interpolation) - zizmor: replace superfluous softprops/action-gh-release with gh CLI - zizmor: switch ad-hoc npm install to a lockfile-backed npm ci for the CVE-issue-creation script (also fixes a real glob advisory) - zizmor: justified ignore comments for dangerous-triggers and github-app findings - Scorecard: add explicit top-level permissions to workflows missing one Validation: `actionlint`, `zizmor --offline` (0 high/medium findings), and `cargo check --tests` all pass for the affected crates/workflows. --------- Signed-off-by: Luca Muscariello <muscariello@ieee.org> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Continues addressing open Scorecard code scanning alerts. - Pin all Docker FROM images in Dockerfile and Dockerfile.mock-agent to sha256 digests (Pinned-Dependencies) - reusable-docs.yml: move contents:write to job-level, top-level set to contents:read (Token-Permissions) Validation: digests resolved via `docker buildx imagetools inspect` and verified with `docker pull`; `actionlint` passes. Signed-off-by: Luca Muscariello <muscariello@ieee.org> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Adds a `cargo publish --dry-run` step so OpenSSF Scorecard's Packaging check can detect our Rust publishing workflow (it doesn't recognize `release-plz/action` as a publishing pattern). - Runs on every push to `main` in `release-crates-pr` - Safe to run repeatedly: cargo warns (doesn't fail) if the version already shipped, only fails on real packaging/build problems Validation: ran locally, exits 0 with just a warning since `agntcy-slim-version` is already published; `actionlint` passes. Signed-off-by: Luca Muscariello <muscariello@ieee.org> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Fixed Formatting
---------
Signed-off-by: Vishal Sahare <vishal.sahare@gmail.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
- This update changes SLIM message metadata from a string-only Protobuf map to
google.protobuf.Struct, enabling typed metadata values.
- Metadata APIs
* Updated ProtoMessage and its builder to:
* Create metadata lazily with get_or_insert_default().
* Insert values implementing Into<prost_types::Value>.
* Get and remove typed Protobuf values.
* Set or retrieve the complete metadata Struct.
* Represent absent metadata as None.
- Compatibility conversions
* These preserve existing string-only interfaces in session, RPC, and language bindings.
When converting back to a string map, non-string values are intentionally omitted
- Dependencies
* Added prost-types dependencies to crates that now access Protobuf Struct and Value directly.
- Tests
* Added or updated tests covering:
* String metadata insertion.
* Typed metadata values.
* Nested and list values.
* Null values.
* Protobuf encode/decode round trips.
* Session publishing with metadata.
- Targeted verification passed:
* Proto message tests: 19 passed
* Session metadata test: 1 passed
* Formatting check: passed
- [x] Bugfix
- [ ] New Feature
- [ ] Breaking Change
- [ ] Refactor
- [ ] Documentation
- [ ] Other (please describe)
- [x] I have read the [contributing
guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md)
- [ ] Existing issues have been referenced (where applicable)
- [x] I have verified this change is not present in other open pull
requests
- [ ] Functionality is documented
- [x] All code style checks pass
- [x] New code contribution is covered by automated tests
- [x] All new and existing tests pass
---------
Signed-off-by: Vishal Sahare <vishal.sahare@gmail.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Added metadata protobuf api version v3
- [x] Bugfix
- [ ] New Feature
- [ ] Breaking Change
- [ ] Refactor
- [ ] Documentation
- [ ] Other (please describe)
- [x] I have read the [contributing
guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md)
- [ ] Existing issues have been referenced (where applicable)
- [x] I have verified this change is not present in other open pull
requests
- [ ] Functionality is documented
- [x] All code style checks pass
- [x] New code contribution is covered by automated tests
- [x] All new and existing tests pass
---------
Signed-off-by: Vishal Sahare <vishal.sahare@gmail.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Upgrade all images to version v2.1.0 - [ ] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [x] Release - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [x] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [x] Functionality is documented - [x] All code style checks pass - [x] New code contribution is covered by automated tests - [x] All new and existing tests pass Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- [2.1.0](agntcy/slim@helm-slim-control-plane-v2.0.0...helm-slim-control-plane-v2.1.0) (2026-08-12) * **control-plane:** support multiple northbound and southbound listeners ([agntcy#1966](agntcy#1966)) ([1c140dc](agntcy@1c140dc)) * upgrade helm chart to latest image version ([agntcy#1973](agntcy#1973)) ([ad183e9](agntcy@ad183e9)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Signed-off-by: Agntcy Build Bot <build@agntcy.io> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Fix build on windows due to an issue of the file mode not available there. - [x] Bugfix - [ ] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [x] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [x] Functionality is documented - [x] All code style checks pass - [x] New code contribution is covered by automated tests - [x] All new and existing tests pass Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
) - `RequiredAuthMethod` lacked an `Oidc` variant, causing OIDC client configs to be silently folded into `Jwt` in `from_client_config`, with no matching arm in `merge_server_requirements` - `diff_connections` had no access to `controller.clients` credentials as a fallback when no `outbound_clients` entry matched the CP-assigned endpoint - `RequiredAuthMethod::None` was wiping local auth (`self.auth = None`), so any locally configured OIDC credentials were destroyed when the CP sent `None` for the auth method — which it does whenever it doesn't model the auth explicitly - The proto `AuthMethod` enum and `model::AuthMethod` had no `Oidc` variant, so the CP could never signal OIDC to nodes **`crates/config/src/client.rs`** - Add `RequiredAuthMethod::Oidc`; fix `from_client_config` to map `AuthenticationConfig::Oidc` → `RequiredAuthMethod::Oidc` (was `Jwt`) - Add `RequiredAuthMethod::Oidc => {}` arm to `merge_server_requirements` (preserves local auth, matching `Jwt` behaviour) - Change `RequiredAuthMethod::None` arm from `self.auth = None` to a no-op — `None` means "no auth required", not "force no auth", so locally configured credentials survive **`crates/controller/src/service.rs`** - Store `controller.clients` on `ControllerServiceInternal` for auth fallback - `diff_connections` inherits auth from the first non-`None` `clients` entry when no `outbound_clients` entry matches the CP-assigned endpoint - Credential guard updated to cover `Oidc` and check post-merge `client_config.auth` instead of `outbound_clients` membership **`crates/control-plane/`** - Add `AUTH_METHOD_OIDC = 4` to the controller proto enum and regenerate bindings - Add `model::AuthMethod::Oidc` with full southbound (proto→model) and northbound (model→proto) round-trip - Wire `model::AuthMethod::Oidc → RequiredAuthMethod::Oidc` in `generate_config_data` - [ ] Build `agntcy-slim-config`, `agntcy-slim-controller`, and `agntcy-slim-control-plane` with no errors - [ ] All 261+ `agntcy-slim-config` tests pass - [ ] Node configured with OIDC in `controller.clients` can establish CP-managed outbound links without a duplicate `outbound_clients` entry - [ ] Node with explicit `outbound_clients` entries continues to use those credentials (fallback not triggered) - [ ] Node with `auth_method: None` on a link no longer has its local OIDC credentials wiped - [ ] CP registered with `auth_method: oidc` correctly sends `RequiredAuthMethod::Oidc` to nodes --------- Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
…llback (agntcy#1989) ## Summary - Fix `from_server_config` so `AuthenticationConfig::Oidc` maps to `AuthMethod::Oidc` instead of falling through to `None`, ensuring the CP stores and forwards the correct auth method after node registration. - Fix `merge_server_requirements` so `RequiredAuthMethod::None` from the CP no longer wipes local OIDC credentials (now a no-op). - In `diff_connections`, after failing to find credentials in `outbound_clients` (exact endpoint match or empty-endpoint default), fall back to the node's own `dataplane.clients` by endpoint. This means a node that already authenticates to an endpoint via `dataplane.clients` (e.g. with OIDC) does not need to duplicate those credentials under `controller.outbound_clients` to satisfy CP-managed Remote links to the same endpoint. - Normalize endpoints before comparison (`https://host` and `https://host:443` are treated as equivalent) so the fallback lookup matches even when the CP records an explicit port but the local config omits it. ## Test plan - Build passes (`cargo build --bin slim`). - All existing unit tests pass. - Manually verified: CP-ordered Remote link to an endpoint that is already reachable via `dataplane.clients` with OIDC now inherits those credentials and connects successfully without duplicating config. Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
* `agntcy-slim-version`: 2.2.0 -> 2.3.0
* `agntcy-slim-config`: 0.15.2 -> 0.16.0 (⚠ API breaking changes)
* `agntcy-slim-proto`: 0.5.9 -> 0.6.0 (⚠ API breaking changes)
* `agntcy-slim-datapath`: 0.18.5 -> 0.18.6 (✓ API compatible changes)
* `agntcy-slim-controller`: 0.12.9 -> 0.13.0 (⚠ API breaking changes)
* `agntcy-slim-service`: 0.12.9 -> 0.12.10 (✓ API compatible changes)
* `agntcy-slim`: 2.2.0 -> 2.3.0
* `agntcy-slim-channel-manager`: 2.2.0 -> 2.3.0
* `agntcy-slim-control-plane`: 2.2.0 -> 2.3.0 (⚠ API breaking changes)
* `agntcy-slim-bindings`: 2.2.0 -> 2.3.0
* `agntcy-slim-rpc`: 2.2.0 -> 2.3.0
* `agntcy-slimctl`: 2.2.0 -> 2.3.0
* `agntcy-slim-auth`: 0.15.2 -> 0.15.3
* `agntcy-slim-tracing`: 0.4.18 -> 0.4.19
* `agntcy-slim-mls`: 0.3.8 -> 0.3.9
* `agntcy-slim-session`: 0.7.9 -> 0.7.10
* `agntcy-slim-signal`: 0.1.24 -> 0.1.25
```text
--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---
Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_no_repr_variant_discriminant_changed.ron
Failed in:
variant RequiredAuthMethod::Spire 3 -> 4 in /tmp/.tmp8XqivK/slim/crates/config/src/client.rs:636
--- failure enum_variant_added: enum variant added on exhaustive enum ---
Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron
Failed in:
variant RequiredAuthMethod:Oidc in /tmp/.tmp8XqivK/slim/crates/config/src/client.rs:634
```
```text
--- failure enum_variant_added: enum variant added on exhaustive enum ---
Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron
Failed in:
variant AuthMethod:Oidc in /tmp/.tmp8XqivK/slim/crates/proto/src/gen/controller.proto.v1.rs:283
```
```text
--- failure constructible_struct_adds_field: externally-constructible struct adds field ---
Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/constructible_struct_adds_field.ron
Failed in:
field ControlPlaneSettings.dataplane_clients in /tmp/.tmp8XqivK/slim/crates/controller/src/service.rs:76
--- failure method_parameter_count_changed: pub method parameter count changed ---
Description:
A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/method_parameter_count_changed.ron
Failed in:
slim_controller::config::Config::into_service now takes 6 parameters instead of 5, in /tmp/.tmp8XqivK/slim/crates/controller/src/config.rs:123
```
```text
--- failure enum_variant_added: enum variant added on exhaustive enum ---
Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron
Failed in:
variant AuthMethod:Oidc in /tmp/.tmp8XqivK/slim/crates/control-plane/src/db/model.rs:163
variant AuthMethod:Oidc in /tmp/.tmp8XqivK/slim/crates/control-plane/src/db/model.rs:163
```
<details><summary><i><b>Changelog</b></i></summary><p>
<blockquote>
[1.3.0](https://github.com/agntcy/slim/releases/tag/slim-version-v1.3.0)
- 2026-03-20
- add agntcy-slim-version crate as single source of truth for version
and build info ([agntcy#1360](agntcy#1360))
</blockquote>
<blockquote>
[0.16.0](agntcy/slim@slim-config-v0.15.2...slim-config-v0.16.0)
- 2026-08-13
- propagate OIDC auth through merge and diff_connections
([agntcy#1983](agntcy#1983))
</blockquote>
<blockquote>
[0.6.0](agntcy/slim@slim-proto-v0.5.9...slim-proto-v0.6.0)
- 2026-08-13
- propagate OIDC auth through merge and diff_connections
([agntcy#1983](agntcy#1983))
</blockquote>
<blockquote>
[0.18.6](agntcy/slim@slim-datapath-v0.18.5...slim-datapath-v0.18.6)
- 2026-08-13
- prevent unbounded span nesting on reconnect cycles
([agntcy#1986](agntcy#1986))
</blockquote>
<blockquote>
[0.13.0](agntcy/slim@slim-controller-v0.12.9...slim-controller-v0.13.0)
- 2026-08-13
- OIDC credentials for CP-managed links using dataplane.clients fallback
([agntcy#1989](agntcy#1989))
- propagate OIDC auth through merge and diff_connections
([agntcy#1983](agntcy#1983))
</blockquote>
<blockquote>
[0.12.10](agntcy/slim@slim-service-v0.12.9...slim-service-v0.12.10)
- 2026-08-13
- OIDC credentials for CP-managed links using dataplane.clients fallback
([agntcy#1989](agntcy#1989))
</blockquote>
<blockquote>
[2.0.0](agntcy/slim@slim-v2.0.0...slim-v2.0.0)
- 2026-08-04
- update Cargo.lock dependencies
</blockquote>
<blockquote>
[2.0.0](agntcy/slim@slim-channel-manager-v2.0.0...slim-channel-manager-v2.0.0)
- 2026-08-04
- update Cargo.lock dependencies
</blockquote>
<blockquote>
[2.3.0](agntcy/slim@slim-control-plane-v2.2.0...slim-control-plane-v2.3.0)
- 2026-08-13
- propagate OIDC auth through merge and diff_connections
([agntcy#1983](agntcy#1983))
</blockquote>
<blockquote>
[2.2.0](agntcy/slim@slim-bindings-v2.1.1...slim-bindings-v2.2.0)
- 2026-08-13
- *(bindings)* expose OIDC authentication in language bindings
([agntcy#1982](agntcy#1982))
</blockquote>
<blockquote>
[2.1.0](agntcy/slim@slim-rpc-v2.0.0...slim-rpc-v2.1.0)
- 2026-08-12
- *(rpc)* signal end-of-stream with the status header, not an empty
payload ([agntcy#1961](agntcy#1961))
</blockquote>
<blockquote>
[2.1.1](agntcy/slim@slimctl-v2.1.0...slimctl-v2.1.1)
- 2026-08-12
- windows build ([agntcy#1978](agntcy#1978))
- windows build ([agntcy#1977](agntcy#1977))
</blockquote>
<blockquote>
[0.15.3](agntcy/slim@slim-auth-v0.15.2...slim-auth-v0.15.3)
- 2026-08-13
- updated the following local packages: agntcy-slim-version
</blockquote>
<blockquote>
[0.4.19](agntcy/slim@slim-tracing-v0.4.18...slim-tracing-v0.4.19)
- 2026-08-13
- updated the following local packages: agntcy-slim-version,
agntcy-slim-config
</blockquote>
<blockquote>
[0.3.9](agntcy/slim@slim-mls-v0.3.8...slim-mls-v0.3.9)
- 2026-08-13
- updated the following local packages: agntcy-slim-version,
agntcy-slim-auth
</blockquote>
<blockquote>
[0.7.10](agntcy/slim@slim-session-v0.7.9...slim-session-v0.7.10)
- 2026-08-13
- updated the following local packages: agntcy-slim-version,
agntcy-slim-datapath, agntcy-slim-auth, agntcy-slim-mls
</blockquote>
<blockquote>
[0.1.25](agntcy/slim@slim-signal-v0.1.24...slim-signal-v0.1.25)
- 2026-08-13
- updated the following local packages: agntcy-slim-version
</blockquote>
</p></details>
---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
---------
Co-authored-by: Mauro Sardara <msardara@cisco.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
# Description Upgrade image version to 2.3.0 ## Type of Change - [ ] Bugfix - [x] New Feature - [ ] Breaking Change - [ ] Refactor - [ ] Documentation - [ ] Other (please describe) ## Checklist - [x] I have read the [contributing guidelines](/agntcy/repo-template/blob/main/CONTRIBUTING.md) - [x] Existing issues have been referenced (where applicable) - [x] I have verified this change is not present in other open pull requests - [x] Functionality is documented - [x] All code style checks pass - [x] New code contribution is covered by automated tests - [x] All new and existing tests pass Signed-off-by: Mauro Sardara <msardara@cisco.com> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [2.2.0](agntcy/slim@helm-slim-control-plane-v2.1.0...helm-slim-control-plane-v2.2.0) (2026-08-13) ### Features * **charts/control-plane:** upgrade image version to 2.3.0 ([agntcy#1990](agntcy#1990)) ([cd81796](agntcy@cd81796)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Signed-off-by: Agntcy Build Bot <build@agntcy.io> Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
4288c83 to
d822131
Compare
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
|
@msardara can you please check this PR and provide your comments |
msardara
left a comment
There was a problem hiding this comment.
Hey @vishalsahare! looks good overall, but I see many changes that should not be partof this PR. I think we should open a new PR for them.
Fixed comment
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
Signed-off-by: Vishal Sahare <6853259+vishalsahare@users.noreply.github.com>
951647f to
0dc43ed
Compare
|
Hi Mark, fixed comment. Could you please check and merge now. |
|
Can you please heck and approve? |
This update changes SLIM message metadata from a string-only Protobuf map to google.protobuf.Struct, enabling typed metadata values.
Metadata APIs
Compatibility conversions
Dependencies
Tests
Bugfix
New Feature
Breaking Change
Refactor
Documentation
Other (please describe)
I have read the contributing guidelines
Existing issues have been referenced (where applicable)
I have verified this change is not present in other open pull requests
Functionality is documented
All code style checks pass
New code contribution is covered by automated tests
All new and existing tests pass