UNPKG

tribe-cli

Version:

TRIBE multi-agent development system - Zero to productive with one command

448 lines (437 loc) 10.5 kB
--- # TRIBE Complete Deployment - Bundled with NPM Package # This file is automatically deployed by 'npx @0zen/tribe-cli' --- apiVersion: v1 kind: Namespace metadata: name: tribe-system --- # ServiceAccount for Bridge apiVersion: v1 kind: ServiceAccount metadata: name: bridge namespace: tribe-system --- # Role for Bridge apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: bridge-role namespace: tribe-system rules: - apiGroups: [""] resources: ["pods", "services", "pods/exec", "pods/log", "configmaps", "secrets", "namespaces"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] --- # RoleBinding for Bridge apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: bridge-rolebinding namespace: tribe-system subjects: - kind: ServiceAccount name: bridge namespace: tribe-system roleRef: kind: Role name: bridge-role apiGroup: rbac.authorization.k8s.io --- # PostgreSQL apiVersion: apps/v1 kind: Deployment metadata: name: postgres namespace: tribe-system spec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:15 env: - name: POSTGRES_DB value: gitea - name: POSTGRES_USER value: gitea - name: POSTGRES_PASSWORD value: gitea ports: - containerPort: 5432 readinessProbe: exec: command: - pg_isready - -U - gitea initialDelaySeconds: 5 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: postgres namespace: tribe-system spec: selector: app: postgres ports: - port: 5432 --- # Gitea apiVersion: apps/v1 kind: Deployment metadata: name: gitea namespace: tribe-system spec: replicas: 1 selector: matchLabels: app: gitea template: metadata: labels: app: gitea spec: initContainers: - name: wait-for-db image: busybox:1.35 command: ['sh', '-c', 'until nc -z postgres 5432; do echo waiting for db; sleep 2; done'] - name: init-gitea image: gitea/gitea:1.20.5 command: ['/bin/bash', '-c'] args: - | # Create app.ini mkdir -p /data/gitea/conf cat > /data/gitea/conf/app.ini << 'EOF' APP_NAME = Gitea RUN_MODE = prod [database] DB_TYPE = postgres HOST = postgres:5432 NAME = gitea USER = gitea PASSWD = gitea [server] DOMAIN = gitea ROOT_URL = http://gitea:3000/ HTTP_PORT = 3000 [service] DISABLE_REGISTRATION = true [security] INSTALL_LOCK = true SECRET_KEY = changeme EOF # Run migrations gitea migrate # Create admin user gitea admin user create --admin --username gitea_admin --password admin123 --email admin@example.com || true env: - name: GITEA_WORK_DIR value: /data - name: GITEA_CUSTOM value: /data/gitea volumeMounts: - name: gitea-data mountPath: /data containers: - name: gitea image: gitea/gitea:1.20.5 ports: - containerPort: 3000 env: - name: GITEA_WORK_DIR value: /data - name: GITEA_CUSTOM value: /data/gitea volumeMounts: - name: gitea-data mountPath: /data readinessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 30 periodSeconds: 10 volumes: - name: gitea-data emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: gitea namespace: tribe-system spec: selector: app: gitea ports: - port: 3000 --- # TaskMaster apiVersion: apps/v1 kind: Deployment metadata: name: taskmaster namespace: tribe-system spec: replicas: 1 selector: matchLabels: app: taskmaster template: metadata: labels: app: taskmaster spec: initContainers: - name: wait-for-db image: busybox:1.35 command: ['sh', '-c', 'until nc -z postgres 5432; do echo waiting for db; sleep 2; done'] containers: - name: taskmaster image: taskmaster:latest imagePullPolicy: IfNotPresent ports: - containerPort: 5000 env: - name: FLASK_ENV value: development - name: DATABASE_URL value: postgresql://gitea:gitea@postgres:5432/gitea - name: GITEA_URL value: http://gitea:3000 - name: GITEA_TOKEN value: will-be-set-by-init-job readinessProbe: httpGet: path: / port: 5000 initialDelaySeconds: 10 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: taskmaster namespace: tribe-system spec: selector: app: taskmaster ports: - port: 5000 --- # Bridge apiVersion: apps/v1 kind: Deployment metadata: name: bridge namespace: tribe-system spec: replicas: 1 selector: matchLabels: app: bridge template: metadata: labels: app: bridge spec: serviceAccountName: bridge initContainers: - name: wait-for-services image: busybox:1.35 command: ['sh', '-c'] args: - | echo "Waiting for services..." until nc -z taskmaster 5000; do echo waiting for taskmaster; sleep 2; done until nc -z gitea 3000; do echo waiting for gitea; sleep 2; done echo "All services ready!" containers: - name: bridge image: bridge:latest imagePullPolicy: IfNotPresent ports: - containerPort: 8080 - containerPort: 3456 env: - name: TASKMASTER_URL value: http://taskmaster:5000 - name: GITEA_URL value: http://gitea:3000 - name: GITEA_ADMIN_USER value: gitea_admin - name: GITEA_ADMIN_PASSWORD value: admin123 - name: NAMESPACE value: tribe-system readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 10 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: bridge namespace: tribe-system spec: selector: app: bridge ports: - name: http port: 8080 - name: websocket port: 3456 --- # Claude Worker Deployment (starts with 0 replicas) apiVersion: apps/v1 kind: Deployment metadata: name: claude-worker-deployment namespace: tribe-system spec: replicas: 0 selector: matchLabels: app: claude-worker template: metadata: labels: app: claude-worker spec: containers: - name: claude-agent image: claude-agent:latest imagePullPolicy: IfNotPresent env: - name: ROLE value: worker - name: TASKMASTER_URL value: http://taskmaster:5000 - name: GITEA_URL value: http://gitea:3000 - name: NAMESPACE value: tribe-system - name: ANTHROPIC_API_KEY valueFrom: secretKeyRef: name: claude-api-key key: api-key optional: true volumeMounts: - name: workspace mountPath: /workspace - name: config mountPath: /app/minimal-config readinessProbe: exec: command: - /bin/sh - -c - test -f /tmp/worker-ready initialDelaySeconds: 30 periodSeconds: 10 volumes: - name: workspace emptyDir: {} - name: config configMap: name: claude-config optional: true --- # NodePort service for easy access apiVersion: v1 kind: Service metadata: name: bridge-nodeport namespace: tribe-system spec: type: NodePort selector: app: bridge ports: - name: http port: 8080 nodePort: 30080 - name: websocket port: 3456 nodePort: 30456 --- # ConfigMap for Claude agent configuration apiVersion: v1 kind: ConfigMap metadata: name: claude-config namespace: tribe-system data: config.yaml: | mcp_servers: filesystem: command: npx args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"] git: command: npx args: ["-y", "@modelcontextprotocol/server-git"] env: PATH: /usr/local/bin:/usr/bin:/bin --- # Initialization Job apiVersion: batch/v1 kind: Job metadata: name: tribe-init namespace: tribe-system spec: template: spec: restartPolicy: OnFailure containers: - name: init image: curlimages/curl:8.4.0 command: ['/bin/sh', '-c'] args: - | echo "Waiting for Gitea to be ready..." until curl -s http://gitea:3000 > /dev/null; do echo "Waiting for Gitea..." sleep 5 done echo "Creating Gitea access token..." TOKEN=$(curl -s -X POST http://gitea:3000/api/v1/users/gitea_admin/tokens \ -u gitea_admin:admin123 \ -H "Content-Type: application/json" \ -d '{"name":"taskmaster-'$(date +%s)'","scopes":["write:repository","write:user","write:issue","write:organization","read:repository"]}' \ | grep -o '"sha1":"[^"]*' | cut -d'"' -f4) if [ -z "$TOKEN" ]; then echo "Failed to create token!" exit 1 fi echo "Token created successfully" # Update TaskMaster with the token echo "Updating TaskMaster configuration..." curl -X POST http://taskmaster:5000/api/config \ -H "Content-Type: application/json" \ -d "{\"gitea_token\":\"$TOKEN\"}" echo "Initialization complete!"