Skip to content

Upgrade to grpc 1.0 (grpc_server) and test against Envoy 1.38.2 in CI#13

Merged
dergraf merged 2 commits into
proxyconf:mainfrom
larshesel:feat/grpc-1.0
Jun 23, 2026
Merged

Upgrade to grpc 1.0 (grpc_server) and test against Envoy 1.38.2 in CI#13
dergraf merged 2 commits into
proxyconf:mainfrom
larshesel:feat/grpc-1.0

Conversation

@larshesel

@larshesel larshesel commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

This PR contains two changes (see commits):

  1. Upgrade to grpc 1.0 via grpc_server
  2. Also test against Envoy 1.38.2 in CI

1. Upgrade to grpc 1.0 via grpc_server

Migrates ex_control_plane to grpc 1.0.0, which split the previously monolithic grpc package into three:

  • grpc_core — shared base (GRPC.Service, GRPC.Credential, …)
  • grpc — client (GRPC.Stub, …)
  • grpc_server — server implementation (GRPC.Server, GRPC.Endpoint, GRPC.Server.Stream, interceptors, supervisor)

Since ex_control_plane is a gRPC server (xDS/ADS), it now depends on grpc_server ~> 1.0 instead of pulling grpc transitively via envoy_xds.

Why this works

The package split preserved all public module namespaces. Every gRPC module this project uses still exists under the same name, just sourced from grpc_server:

  • GRPC.Server.Supervisor (application.ex)
  • use GRPC.Server (aggregated_discovery_service_server.ex)
  • GRPC.Server.Stream.send_reply/3 (stream.ex)
  • use GRPC.Endpoint + GRPC.Server.Interceptors.Logger (endpoint.ex)

As a result no source changes are required — this is a dependency-only change.

Motivation — security

grpc 0.11.x is affected by four advisories fixed only in grpc 1.0.0, including a 9.2 Critical (RCE/DoS via unsafe Erlang term deserialization). Staying on 0.11.x left every consumer of ex_control_plane transitively exposed. Upgrading also drops gun from the dependency tree entirely (it becomes an optional dep of the grpc client only), removing three further gun advisories.

envoy_xds dependency

envoy_xds now tracks the latest upstream proxyconf/envoy_xds_ex main, which carries the matching grpc ~> 1.0 / protobuf ~> 0.17 bump and a refreshed xDS proto set (merged via proxyconf/envoy_xds_ex#7):

{:envoy_xds, git: "https://github.com/proxyconf/envoy_xds_ex.git"},

An earlier revision of this PR temporarily pointed at a fork branch while that bump was in review; it now points back at upstream.

2. Also test against Envoy 1.38.2 in CI

Adds Envoy 1.38.2 (current stable) to the CI test matrix alongside the existing 1.37.0 and 1.36.4, so the integration tests run against the latest Envoy minor in addition to the two prior ones:

# Envoy stable (1.38) and the two prior minors (1.37, 1.36)
envoy: ["1.38.2", "1.37.0", "1.36.4"]

How this was tested

Verified with Elixir 1.19 / OTP 28:

  • Dependency resolution (rm mix.lock && mix deps.get): resolves grpc_server 1.0.0, grpc 1.0.0, grpc_core 1.0.0, protobuf 0.17.0; gun is not resolved into the tree.
  • Compile: mix compile --warnings-as-errors succeeds with no source changes; zero redefining module warnings.
  • Tests: full suite passes — 75 tests, 0 failures, 1 skipped (1 doctest). The gRPC ADS/CDS/LDS streams are exercised end-to-end.
  • Envoy 1.38.2: ran the envoy integration suite (9 tests) and the full suite (75 tests) against the Envoy 1.38.2 release binary — 0 failures.

@larshesel larshesel force-pushed the feat/grpc-1.0 branch 4 times, most recently from 3857dc5 to 40f2478 Compare June 19, 2026 11:33
grpc 1.0.0 split the umbrella into grpc_core / grpc (client) /
grpc_server. The server-side modules this library uses (GRPC.Server,
GRPC.Endpoint, GRPC.Server.Interceptors.Logger, GRPC.Server.Stream) now
live in the grpc_server package, so depend on grpc_server ~> 1.0. No
source changes are required as the module namespaces are unchanged.

envoy_xds tracks the latest upstream proxyconf/envoy_xds_ex main, which
now carries the matching grpc ~> 1.0 / protobuf ~> 0.17 bump and the
refreshed xDS proto set.

Verified: compiles with zero redefining-module warnings and the full
test suite passes (75 tests, 0 failures). gun is no longer pulled into
the dependency tree (optional dep of the grpc client only).
Add Envoy 1.38.2 (current stable) to the CI test matrix alongside the
existing 1.37.0 and 1.36.4, so the integration tests run against the
latest Envoy minor in addition to the two prior ones.

Verified locally: the envoy integration suite and the full test suite
pass against Envoy 1.38.2.
@larshesel larshesel changed the title Upgrade to grpc 1.0 via grpc_server package Upgrade to grpc 1.0 (grpc_server) and test against Envoy 1.38.2 in CI Jun 19, 2026
@dergraf dergraf merged commit afbec39 into proxyconf:main Jun 23, 2026
15 of 16 checks passed
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.

2 participants