Skip to main content
sind
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Development Setup

Prerequisites

  • Go 1.26+
  • Docker Engine 28.0+
  • Linux host with cgroupv2 and nsdelegate mount option
  • firejail, which sandboxes make test

Clone and build

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.

Run

./sind-linux-amd64 version
./sind-linux-amd64 create cluster

Make targets

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.

Dependencies

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)

Run tests

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.