Contributing
December 2, 2025 · View on GitHub
This guide is for those who wish to contribute to the project.
Development
To build echoserver locally, use the following commands:
make
To serve HTML files from the filesystem instead of using bundled files, use the following command:
./echoserver -live
As an alternative, you can build the project, generate test certificates, and run echoserver in both HTTP and HTTPS modes using the following Makefile target:
make run
To run test suite, use the following command:
make test
To build the container image, use the following command:
make container
To lint the code, use the following command:
make lint
To test the OIDC applications, you need to have an OIDC provider. To run Keyclaok as an OIDC provider, use the following command:
make run # Generate test certificates and run echoserver in one terminal.
docker compose up # Run Envoy and Keycloak in another terminal.
Then access the echoserver server at https://echoserver.127.0.0.1.nip.io/apps/ and Keycloak admin console at https://keycloak.127.0.0.1.nip.io/. Envoy will validate JWT for endpoints matching with https://echoserver.127.0.0.1.nip.io/protected.
⚠️ NOTE ⚠️
You will get an error for first login, because the certificate is self-signed. To fix this, visit Keycloak admin console once and accept the certificate.
If running on Linux with firewall like UFW, traffic from docker bridge network to host network may be blocked. For UFW use
sudo ufw allow from 172.0.0.0/8to allow traffic.
The admin console credentials are admin:admin, and the user credentials in echoserver realm are joe:joe and jane:jane.
Keycloak has been configured with the following clients:
- echoserver-public
- echoserver-public-dpop
The latter one is configured to require DPoP.
Protobuf Code Generation
To generate protobuf code, ensure you have protoc and Go protobuf plugins installed.
Then run:
make generate-proto
Vscode
To develop test cases for echoserver, use the e2e build tag in your VSCode settings:
mkdir -p .vscode
cat > .vscode/settings.json <<EOL
{
"go.buildTags": "e2e"
}
EOL
This will ensure that the e2e code will be included in build by the VSCode Go extension.