[foostash]docsdev
github ↗

Development

Build, test, and cut releases.

bash
make build         # bin/foostash with version ldflags
make test          # go test ./... -v
make vet           # go vet ./...
make run-server    # go run ./cmd/foostash-server
make sdk-test      # go test ./... inside sdk/go

Repo layout

text
cmd/
  foostash/          unified CLI + `foostash serve`
  foostash-server/   server-only entrypoint
cli/                 Cobra commands
internal/
  crypto/            AES-GCM engine, master key, password-derived keys
  sshauth/           SSH signing / verification
  store/             local encrypted secret files
  secrets/           local service for set/get/versioning
  envs/              local environment manager
  diff/              env comparison
  runner/            process launcher with env injection
  targets/           docker, k8s, gh-actions renderers
  mcpserver/         local MCP server for coding agents
  tui/               terminal UI (projects, secrets, vault, users, audit)
  billing/           plan limits and enforcement
  config/            YAML config load/save
  apiclient/         HTTP client with SSH-signed requests
  repo/              pgx repositories
  service/           server-side domain logic
  server/            Chi router, middleware, handlers
  migrations/        embedded SQL, applied at startup
sdk/go/              read-only Go SDK

Release process

Releases are cut with GoReleaser via a GitHub Actions workflow on tag push. It builds cross-platform binaries, publishes the GitHub release, and updates the Homebrew tap formula.

bash
git tag v0.3.0
git push origin v0.3.0

# SDK is tagged independently
git tag sdk/go/v0.1.0
git push origin sdk/go/v0.1.0