- Start by reading
DOCUMENTATION.mdfor a walkthrough of architecture, component ownership, and common triage paths before tackling changes. - Keep the document handy when planning fixes; it maps package responsibilities, runtime flow, and gotchas you should re-check during reviews.
- Root CLI entry point is
main.go; domain logic lives underpkg/(e.g.executors/,listener/,kubernetes/) with packages named for their subsystem. - Runtime assets such as sample configs reside in
config.example.yaml, release docs live indocs/, and Docker/Vagrant files support local environments; built binaries land inbuild/. - Tests and fixtures sit in
pkg/*/*_test.gofor unit coverage and Ruby E2E helpers intest/(seetest/e2eandtest/e2e_support).
make buildcompiles a Linux CLI atbuild/agent; usemake build.windowsfor a Windows artifact ormake docker.build.devfor a dev image.make testrunsgotestsumacross./...with a JUnit report; rungo test ./pkg/listener -run TestNameto iterate on a single package.make run JOB=<job-file>executes the agent locally;make servestarts the API shim with a static auth token for manual workflows.make lintexecutesrevivewithlint.toml; thecheck.*targets pull the security-toolbox for deeper audits when needed.
- Target Go 1.23; always format with
gofmt(orgo fmt ./...) before pushing and organize imports withgoimports. - Exported identifiers follow Go’s PascalCase, package-private helpers use camelCase, and test doubles mirror the production type names with
FakeorStubsuffixes. - Keep configuration structs in
pkg/configaligned withconfig.example.yaml; when introducing flags, add them topkg/servercommand wiring.
- Co-locate
*_test.gofiles with their packages and favor table-driven tests plustestifyassertions already in use. - Aim to cover new branches and failure paths, especially around
pkg/executorsandpkg/listenerwhich guard remote job execution. - For smoke verification against remote services, add or extend Ruby scripts in
test/e2eand run withmake e2e TEST=<script>; share new scripts in review.
- Follow the existing Conventional Commit style (
feat:,fix:,chore:) and reference the PR number or issue in parentheses, e.g.fix: harden retry backoff (#250). - Each PR should describe motivation, key changes, rollout considerations, and include
make test/make lintoutput; attach logs or screenshots when touching user-facing behavior. - Update
CHANGELOG.mdwhen shipping externally visible changes and call out any config or API migrations in the PR checklist.
- Use
config.example.yamlas a baseline; never commit real tokens or certificates—store overrides in local.yamlfiles ignored by git. - Rotate test certificates in
server.crt/server.keyif reused and prefer the supplied Docker targets (docker.build,empty.ubuntu.machine) for sandboxed validation.