Skip to content

Development

Run these commands from the rpt_protobuf checkout.

Use Python 3.13+ and uv:

uv sync --locked
make check test build

Python bindings and type stubs are committed in src/rpt_protobuf/. After changing a supported schema, regenerate them with the pinned compiler:

./build_proto.sh
git diff -- src/rpt_protobuf

Review the schema and generated-code changes together. Running the generator again should produce no further diff. CI checks generation reproducibility and runs the Python 3.13 and 3.14 tests. Consuming services do not need a protobuf compiler.

The Python package requires protobuf; gRPC users also install the grpc extra. For example, application code imports dns_update from rpt_protobuf.dns_update_pb2 and accesses entry.node.id, entry.node.ipaddress, entry.node.port, entry.node.ttl, and entry.node.server.

The credential RPC takes a numeric node ID and returns its shared password. A server implementation must return NOT_FOUND for an absent node and UNAVAILABLE for a backend outage. Service tokens use authorization: Bearer … metadata. Generated 32-character ASCII base64url passwords fit the AllStarLink client's 79-character limit and avoid its configuration delimiters.

Services follow the shared library's main branch for source builds. CI resolves that branch once per workflow run so test and image jobs use the same revision. Editable sibling checkouts support coordinated local development. Update lockfiles when dependency metadata changes. Keep application code, configuration, and authentication implementations in their service projects.