Kubernetes operator for managing Posit Team deployments.
api/: Kubernetes API/CRD definitions (core, product, keycloak, templates)cmd/: Main operator entry pointinternal/: Core operator logic and controllersconfig/: Kubernetes manifests and Kustomize configurationsdist/chart/: Helm chart for deploymentflightdeck/: Landing page dashboard component (separate Go module)client-go/: Generated Kubernetes client codedocs/: User and contributor documentation
just build # Build operator binary to ./bin/team-operator
just test # Run go tests
just run # Run operator locally from source
just deps # Install dependencies
just mgenerate # Regenerate manifests after API changes
just helm-lint # Lint Helm chart
just helm-template # Render Helm templates locally
just helm-install # Install operator via Helm
just helm-uninstall # Uninstall operator via Helmposit-team-system: Where the operator runsposit-team: Where Site CRs and products are deployed
helm install team-operator ./dist/chart \
--namespace posit-team-system \
--create-namespaceAlways use git worktrees instead of plain branches. This enables concurrent Claude sessions in the same repo.
This repo is expected to live at ptd-workspace/team-operator/. The ../../.worktrees/ relative path resolves to ptd-workspace/.worktrees/ in that layout.
# New branch
git worktree add ../../.worktrees/team-operator-<branch-name> -b <branch-name>
# Existing remote branch
git worktree add ../../.worktrees/team-operator-<branch-name> <branch-name>Always prefix worktree directories with team-operator- to avoid collisions with other repos.
No special setup needed. The Justfile and Makefile use relative paths, so they work in worktrees out of the box:
cd ../../.worktrees/team-operator-<branch-name>
just build # builds to ./bin/team-operator
just test # runs tests# From the main checkout
git worktree remove ../../.worktrees/team-operator-<branch-name>
# Prune stale worktree references
git worktree prune- NEVER use
git checkout -bfor new work — alwaysgit worktree add - NEVER put worktrees inside the repo directory — always use
../../.worktrees/team-operator-<name> - Branch names: kebab-case, no slashes, no usernames (slashes break worktree directory paths)
This repo uses roborev for AI-assisted code review. If you haven't already, install the commit hook:
roborev install-hookThis enables automatic review submissions after each commit.
- PR titles must follow conventional commit format (
feat:,fix:,docs:, etc.) - this is enforced by CI - The repo uses squash merge, so PR title becomes the commit message
- semantic-release uses commit prefixes for version bumps:
feat:= minor,fix:= patch,feat!:= major - Run
just testbefore committing - See CONTRIBUTING.md for detailed guidelines
MIT License - see LICENSE file