Files
probo/contrib/claude/make.md
Ludovic Vielle 570395c4ac Add opt-in shell lint and format targets
Introduce make lint-shell / fmt-shell with shellcheck and
shfmt (-i 2 -ci -bn), normalize first-party scripts, and
document the new targets. Keep them out of make lint / fmt.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-28 17:37:34 +02:00

7.4 KiB

GNUmakefile

The project uses a GNUmakefile at the root. Builds run with --jobs=$(nproc) by default.

Everyday targets

Target Purpose
make build Build bin/probod, bin/prb, and bin/probod-bootstrap (does not include frontend apps and Relay)
make build WITH_APPS=1 Build bin/probod, bin/prb, and bin/probod-bootstrap (includes frontend apps, codegen, and Relay)
make test Run tests with race detection and coverage
make test MODULE=./pkg/foo Run tests for a single module
make test-verbose Tests with verbose output
make test-short Short tests only
make test-bench Run benchmarks
make test-e2e Run console end-to-end tests (requires bin/probod)
make lint Run Go + JS linters: vet + go-fmt + go-fix + go-lint + lint-js
make lint-swift Opt-in: lint Swift enroll-ui (swift-fmt + swift-lint; needs Swift + SwiftLint; CI runs this on Linux)
make lint-shell Opt-in: lint SHELL_SCRIPTS (shfmt -d + shellcheck; CI runs this)
make fmt Format Go code
make fmt-swift Opt-in: format Swift enroll-ui (swift format + SwiftLint --fix; needs Swift)
make fmt-shell Opt-in: format SHELL_SCRIPTS with shfmt
make clean Remove all build artifacts, node_modules, generated files, and coverage
make help List targets with ## doc comments

Infrastructure

Target Purpose
make stack-up Start Docker Compose infra (Postgres, step-ca, Keycloak, etc.)
make stack-down Stop Docker Compose infra
make stack-ps List running containers
make psql Open a psql shell to the dev Postgres database

Codegen

make generate runs go code generation (GraphQL + MCP without Relay). make generate WITH_APPS=1 runs all code generation (GraphQL + MCP + Relay).

Individual codegen is driven by go generate:

  • go generate ./pkg/server/api/console/v1 — Console GraphQL (gqlgen)
  • go generate ./pkg/server/api/connect/v1 — Connect GraphQL (gqlgen)
  • go generate ./pkg/server/api/complianceportal/v1 — Compliance portal GraphQL (gqlgen)
  • go generate ./pkg/server/api/mcp/v1 — MCP (mcpgen)
  • go generate ./pkg/llm — LLM model registry from OpenRouter (make genmodels)

make relay merges each service's split .graphql schema files into a single schema.graphql (via contrib/merge-graphql-schema.sh) and runs relay-compiler. The merge is required: relay-compiler's schema must be a single file, and schemaExtensions would mark the fields as client-only (emitting text: null), so the split files cannot be fed to Relay directly.

Coverage

Target Purpose
make coverage-report Unit test HTML coverage report (coverage.html)
make test-e2e-coverage E2E coverage report (coverage-e2e.html)
make coverage-combined Combined unit + e2e report (coverage-combined.html)

Docker

Target Purpose
make docker-build Build the Docker image (artifact.probo.inc/probo/probo)
make sbom Source SBOM (CycloneDX)
make sbom-docker Docker image SBOM
make scan Vulnerability scan (Grype) on source + Docker
make scan-license License compliance scan (Trivy)

Sandbox (Lima)

Target Purpose
make sandbox-create Create a Lima sandbox VM for this worktree
make sandbox-start Start the VM
make sandbox-stop Stop (hibernate) the VM
make sandbox-delete Delete the VM
make sandbox-ssh Open a shell in the VM
make sandbox-status Show VM status and IP

Overridable variables

Variable Default Purpose
WITH_APPS (unset) Set to 1 to generate/build frontend apps
CGO_ENABLED 0 Enable/disable CGO
GOOS (host) Cross-compile target OS
TEST_FLAGS -race -cover -coverprofile=coverage.out Extra flags passed to go test
DOCKER_BUILD_FLAGS (empty) Extra flags for docker build
SWIFTLINTCMD swiftlint SwiftLint binary
SWIFTCMD swift Swift toolchain binary (swift format)
SWIFT_ENROLL_UI cmd/probo-agent/installer/macos/enroll-ui Path to the Swift SPM package
SHELLCHECKCMD shellcheck ShellCheck binary
SHFMTCMD shfmt shfmt binary
SHFMTFLAGS -i 2 -ci -bn Flags passed to shfmt

Shell scripts

make lint-shell / make fmt-shell only touch the static SHELL_SCRIPTS list in the root GNUmakefile (not a recursive find). When you add a new first-party *.sh file, append it to that list so CI formats and lint it. Do not add vendored or git-submodule scripts (for example under pkg/validator/data/disposable-email-domains).