Skip to main content
This page describes the developer workflow for working in the Arcentra repository. All commands assume you are at the root of the arcentra checkout.

Toolchain

  • Go 1.25 or later (matches go.mod).
  • Buf — Protobuf and gRPC code generation. make buf-install installs it on demand.
  • Wire — compile-time dependency injection. make wire-install installs it on demand.
  • golangci-lint v2 — installed automatically into bin/ by make lint.
  • staticcheck (optional) — make staticcheck installs and runs it.
  • addlicense (optional) — make addlicense adds Apache 2.0 headers to Go files.
  • Docker (optional) — required for make docker-build and make docker-buildx.

Make targets

make help prints the full target list. The targets you reach for most often are: The repository carries two binaries by default: arcentra (control plane) and arcentra-agent. Any directory inside cmd/ can be built with make build TARGET=<dirname>.

Code generation

Two generators are wired into the build:
  • Buf generates Go message and gRPC service code under api/<service>/v1.
  • Wire generates dependency-injection wiring (wire_gen.go) under cmd/arcentra/ and cmd/arcentra-agent/.
Run make codegen after editing any .proto file or any wire.go file.

Testing

This runs the full Go test suite with the race detector enabled. For a single package, run go test -race ./internal/path/... directly.

Configuration during development

The default configuration files under conf.d/ are tailored for local development:
  • conf.d/config.toml — control plane.
  • conf.d/agent.toml — agent.
  • conf.d/plugins.toml — plugins and builtins.
make run starts the control plane against these defaults; you can also run go run ./cmd/arcentra -conf <path> and go run ./cmd/arcentra-agent -conf <path> directly. See Configuration for a reference of every section.

Versioning and releases

Arcentra uses a four-part YY.Major.Minor.Patch version scheme:
  • YY — last two digits of the year (25 for 2025, 26 for 2026).
  • Major — incremented for architecture changes or breaking APIs.
  • Minor — incremented for new, backward-compatible features.
  • Patch — incremented for bug fixes and small adjustments.
Examples:

Choosing the version at build time

The Makefile resolves the version in this order:
  1. The VERSION environment variable.
  2. A VERSION file at the repository root.
  3. An exact-match git tag (with the leading v stripped).
  4. Fallback to <current-2-digit-year>.0.0.0.

Tagging a release

Tags follow the vYY.Major.Minor.Patch convention.

Reading the version from Go

Contributing

Read CONTRIBUTING.md for the full process. In short:
  1. Fork and branch from main.
  2. Run make codegen, make lint, and make test locally before opening a PR.
  3. Add or update documentation in this site for any user-visible change.
  4. Reference the related issue and follow the project’s commit and PR conventions.
Security issues should be reported privately as described in SECURITY.md.
Last modified on April 26, 2026