envoyproxy / java-control-plane

Java implementation of an Envoy gRPC control plane
Apache License 2.0
296 stars 136 forks source link

java-control-plane

OpenSSF Scorecard CircleCI codecov Maven Central

This repository contains a Java-based implementation of an API server that implements the discovery service APIs defined in data-plane-api. It started life as a port of go-control-plane, but building an idiomatic Java implementation is prioritized over exact interface parity with the Go implementation.

Only v3 resources as well as transport versions are now supported. Migrating to v3 is necessary as Envoy dropped v2 support at EOY 2020 (see API_VERSIONING.md)

See the v2-to-v3 migration guide for an explanation of migration paths.

Requirements

  1. Java 8+
  2. Maven

Build & Test

mvn clean package

More thorough usage examples are still TODO, but there is a basic test implementation in TestMain.

Envoy API

There is automation built into this repo to keep the Envoy API (i.e. protobuf files) up to date with the latest available Envoy release.

This automation uses Github Workflows and works as follows: a scheduled workflow runs with weekly cadence, and calls a reusable workflow that fetches the latest available Envoy release and compares it with the version currently used in the repo.

If the latest available Envoy release doesn't match the version currently used, another reusable workflow is called which creates a PR that upgrades the Envoy API to the latest available release.

Releasing a new version

To release and publish a new version, do the following:

  1. create a personal API token in CircleCI by following the instructions listed here
  2. from terminal, curl the CircleCI API as follows
 curl -X POST \
    -H "Content-Type: application/json" \
    -d '{ "build_parameters": { "RELEASE": "<e.g. 0.1.29>", "NEXT": "<e.g. 0.1.30-SNAPSHOT>" } }' \
    "https://circleci.com/api/v1.1/project/github/envoyproxy/java-control-plane/tree/main?circle-token=<API token>"