Hello World gRPC Java client for Patina Network
The UI is a single frontend/index.html (Tailwind from a CDN, no build step), packaged into the jar at build time and served by the backend.
- JDK 26 or newer (brew.sh)
- Maven (brew.sh)
- just (brew.sh)
- Tailscale, connected to the Patina VPN (brew.sh)
- Docker, only for
just docker-build(brew.sh)
The Patina VPN is required to download the hello-world-grpc-service client library and to reach the staging gRPC service.
Note
You must be connected to the VPN to connect locally. You can find the instructions to connect at https://docs.patinanetwork.org/infra/how-to-connect-to-vpn/
just run # run the backend + UI on :8080 against the staging gRPC service
just test # unit tests and coverage report
just lint # spotless, checkstyle, and compile
just fmt # apply formatting
just docker-build| Variable | Default | Description |
|---|---|---|
HELLO_WORLD_SERVICE_GRPC_HOST |
hello-world-grpc-service:50051 |
host:port of the hello-world gRPC service |
HELLO_WORLD_SERVICE_GRPC_TLS |
false |
Connect to the gRPC service over TLS |
HELLO_WORLD_SERVICE_GRPC_TIMEOUT_MS |
3000 |
Deadline for each gRPC call, in milliseconds |
HTTP_HOST |
0.0.0.0 |
Address the HTTP server binds to |
HTTP_PORT |
8080 |
Port the HTTP server listens on |
VERSION |
N/A |
Version string returned by GET /version |
HELLO_WORLD_CLIENT_URLS |
none | Comma-separated URLs returned by GET /urls and listed in the UI |
ENVIRONMENT |
none | production or staging switches logs to JSON (ECS); anything else logs human-readable |
SPRING_PROFILES_ACTIVE |
none | Set to local to use application-local.yaml |
just run uses the local Spring profile (src/main/resources/application-local.yaml), which points at staging over TLS.
On main, CI creates an unprefixed semantic-version tag after both image builds succeed, using GitHub App credentials. Tags start at 1.0.0 and increment the patch version; source package versions are unchanged.
The tag triggers CD. Because the tagging step creates a new commit, CD promotes images built from its parent commit to the release tag and latest, then deploys production using the release tag. CI deploys only staging; production deployment runs only in CD.