Building, testing, and workflow
Build and validate
Section titled “Build and validate”make buildmake checkmake build compiles all three binaries. make check verifies formatting, vet, golangci-lint, unit tests, integration tests, safe end-to-end tests, the race detector, and executable builds.
Focused targets include:
make format-checkmake vetmake lintmake test-unitmake test-integrationmake test-e2emake test-raceCapability-gated QoS tests use isolated network namespaces when the required Linux facilities are available. They skip rather than mutate ordinary host network configuration when the environment cannot provide safe isolation.
Go checks target cmd/, internal/, and tests/, including newly added package files. They do not traverse website dependencies or ignored development experiments.
For a checksum-verified local 64 MiB transfer benchmark with real SQLite and durable finalization:
go test ./tests/integration -run '^$' -bench BenchmarkDownloadCheckpointThroughput -benchtime=1x -count=5 -benchmemCompare repeated runs on the same temporary filesystem and under similar machine load. A tmpfs result is not a persistent-disk benchmark, and loopback throughput is not a WAN prediction.
Repository layout
Section titled “Repository layout”| Path | Purpose |
|---|---|
cmd/ |
Entry points for argo, argod, and argo-qosd |
internal/ |
Private application packages and subsystem implementations |
tests/unit/ |
Focused component and repository-contract tests |
tests/integration/ |
Cross-component behavior tests |
tests/e2e/ |
Binary, lifecycle, and isolated system tests |
packaging/systemd/ |
User daemon and privileged helper units |
assets/branding/ |
Canonical public visual assets |
website/ |
Static institutional site and public documentation |
Issue-driven workflow
Section titled “Issue-driven workflow”Releases are GitHub milestones. Every implementation starts from an issue assigned to a milestone and a branch named issue/<number>-<slug> created from dev. The issue PR targets dev; a completed milestone is promoted from dev to main, tagged, and released.
Commit messages use type(scope): summary. Production Go files contain no comments. Every implementation issue adds or updates tests under the repository-level /tests hierarchy.
The specs/ directory contains local development material and is ignored. It is not part of the public website or release artifacts.