Development Setup
- Go 1.26+
- Docker Engine 28.0+
- Linux host with cgroupv2 and
nsdelegatemount option - firejail, which sandboxes
make test
git clone https://github.com/GSI-HPC/sind.git
cd sind
make build
The binary is built at ./sind-<os>-<arch>, e.g. ./sind-linux-amd64.
./sind-linux-amd64 version
./sind-linux-amd64 create cluster
All common tasks are available via make:
| Target | Description |
|---|---|
make build |
Build the sind binary |
make install |
Install sind to GOPATH/bin |
make test |
Run unit tests with race detector, sandboxed with firejail |
make test-integration |
Run integration tests (requires Docker) |
make coverage |
Generate HTML coverage report |
make check-coverage |
Check the coverage thresholds in .testcoverage.yml (requires go-test-coverage) |
make lint |
Run golangci-lint |
make lint-docs |
Lint documentation markdown files |
make image |
Build the node images (one per Slurm release line) for the host platform via docker buildx bake |
make clean |
Remove build artifacts and coverage files |
make help |
Show all available targets |
The build version defaults to git describe --tags --always --dirty and can be overridden:
make build VERSION=v1.0.0
A binary built without a version reports dev, except one installed with go install github.com/GSI-HPC/sind/cmd/sind@<version>, which reports the module version the Go toolchain recorded.
sind uses a minimal set of dependencies:
| Dependency | Purpose |
|---|---|
github.com/spf13/cobra |
CLI framework |
sigs.k8s.io/yaml |
YAML configuration parsing |
github.com/charmbracelet/log |
Colorized log output (slog handler) |
github.com/mattn/go-isatty |
TTY detection for interactive commands |
github.com/njayp/ophis |
MCP server framework |
github.com/modelcontextprotocol/go-sdk |
MCP request and result types for the ophis tool middleware |
github.com/spf13/afero |
Filesystem abstraction for testability |
golang.org/x/sync |
Errgroup for concurrent operations |
golang.org/x/sys |
Advisory file locking (flock) for realm locks |
github.com/stretchr/testify |
Test assertions (test only) |
Unit tests (no Docker required). firejail breaks DNS inside the sandbox, so download the modules first:
go mod download
make test
Integration tests (requires Docker):
make test-integration
See Testing for details on the test infrastructure.