From 259b9de86a835ed60b5618d5d929f4e171e98325 Mon Sep 17 00:00:00 2001 From: jedarden Date: Thu, 26 Mar 2026 00:57:48 -0400 Subject: [PATCH] Add Kubernetes manifests for ArgoCD GitOps deployment Create deploy/k8s/ directory with complete K8s manifests for the ai-code-battle namespace on apexalgo-iad cluster: - Namespace and ArgoCD Application (auto-sync, prune, self-heal) - Match worker Deployment (2 replicas, metrics on :9090) - Index builder Deployment (Recreate strategy) - 6 strategy bot Deployments (random, gatherer, rusher, guardian, swarm, hunter) - ClusterIP Services for all bots (cluster DNS resolution) - SealedSecret templates (API key, R2 creds, bot secrets, Cloudflare token) - All containers from forgejo.ardenone.com/ai-code-battle/ registry - Health/readiness probes and resource limits on all deployments Co-Authored-By: Claude Opus 4.6 (1M context) --- PROGRESS.md | 29 +++++++ deploy/k8s/argocd-application.yaml | 23 ++++++ deploy/k8s/deployments/acb-index-builder.yaml | 48 +++++++++++ .../deployments/acb-strategy-gatherer.yaml | 55 +++++++++++++ .../deployments/acb-strategy-guardian.yaml | 55 +++++++++++++ .../k8s/deployments/acb-strategy-hunter.yaml | 55 +++++++++++++ .../k8s/deployments/acb-strategy-random.yaml | 55 +++++++++++++ .../k8s/deployments/acb-strategy-rusher.yaml | 55 +++++++++++++ .../k8s/deployments/acb-strategy-swarm.yaml | 55 +++++++++++++ deploy/k8s/deployments/acb-worker.yaml | 81 +++++++++++++++++++ deploy/k8s/namespace.yaml | 6 ++ deploy/k8s/sealed-secrets/api-key.yaml | 18 +++++ deploy/k8s/sealed-secrets/bot-secrets.yaml | 20 +++++ .../sealed-secrets/cloudflare-api-token.yaml | 16 ++++ deploy/k8s/sealed-secrets/r2-credentials.yaml | 20 +++++ .../k8s/services/acb-strategy-gatherer.yaml | 18 +++++ .../k8s/services/acb-strategy-guardian.yaml | 18 +++++ deploy/k8s/services/acb-strategy-hunter.yaml | 18 +++++ deploy/k8s/services/acb-strategy-random.yaml | 18 +++++ deploy/k8s/services/acb-strategy-rusher.yaml | 18 +++++ deploy/k8s/services/acb-strategy-swarm.yaml | 18 +++++ web/pages.json | 2 +- 22 files changed, 700 insertions(+), 1 deletion(-) create mode 100644 deploy/k8s/argocd-application.yaml create mode 100644 deploy/k8s/deployments/acb-index-builder.yaml create mode 100644 deploy/k8s/deployments/acb-strategy-gatherer.yaml create mode 100644 deploy/k8s/deployments/acb-strategy-guardian.yaml create mode 100644 deploy/k8s/deployments/acb-strategy-hunter.yaml create mode 100644 deploy/k8s/deployments/acb-strategy-random.yaml create mode 100644 deploy/k8s/deployments/acb-strategy-rusher.yaml create mode 100644 deploy/k8s/deployments/acb-strategy-swarm.yaml create mode 100644 deploy/k8s/deployments/acb-worker.yaml create mode 100644 deploy/k8s/namespace.yaml create mode 100644 deploy/k8s/sealed-secrets/api-key.yaml create mode 100644 deploy/k8s/sealed-secrets/bot-secrets.yaml create mode 100644 deploy/k8s/sealed-secrets/cloudflare-api-token.yaml create mode 100644 deploy/k8s/sealed-secrets/r2-credentials.yaml create mode 100644 deploy/k8s/services/acb-strategy-gatherer.yaml create mode 100644 deploy/k8s/services/acb-strategy-guardian.yaml create mode 100644 deploy/k8s/services/acb-strategy-hunter.yaml create mode 100644 deploy/k8s/services/acb-strategy-random.yaml create mode 100644 deploy/k8s/services/acb-strategy-rusher.yaml create mode 100644 deploy/k8s/services/acb-strategy-swarm.yaml diff --git a/PROGRESS.md b/PROGRESS.md index 5afb835..17ac1c9 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -7,6 +7,18 @@ **Last Updated: 2026-03-26** ### Recent Changes (2026-03-26) +- Added Kubernetes manifests for GitOps deployment via ArgoCD (`deploy/k8s/`) + - Namespace, ArgoCD Application with auto-sync and self-heal + - Deployments: match worker (2 replicas), index builder, 6 strategy bots + - ClusterIP Services for all 6 bots (cluster DNS: `acb-strategy-*.ai-code-battle.svc:8080`) + - SealedSecret templates: API key, R2 credentials, bot HMAC secrets, Cloudflare API token + - All manifests validated (20 files, valid YAML with correct apiVersion/kind) + - Container images from `forgejo.ardenone.com/ai-code-battle/` registry + - Health/readiness probes on all deployments + - Resource requests/limits on all containers +- All tests pass (engine + worker) + +### Previous Changes (2026-03-26) - Added Prometheus-compatible metrics endpoint to match worker (`cmd/acb-worker/metrics.go`) - Counters: matches_total, match_errors_total, jobs_claimed/failed, replays_uploaded, poll_cycles, heartbeats - Histograms: match_duration_seconds, replay_upload_duration_seconds, replay_size_bytes @@ -67,6 +79,16 @@ - TypeScript tests for worker-api and indexer - Web build verification - Go binary builds +- [x] Kubernetes manifests for ArgoCD GitOps (`deploy/k8s/`) + - `namespace.yaml` - Dedicated `ai-code-battle` namespace + - `argocd-application.yaml` - Auto-sync with prune and self-heal + - `deployments/acb-worker.yaml` - Match worker (2 replicas, metrics on :9090) + - `deployments/acb-index-builder.yaml` - Index builder (1 replica, Recreate strategy) + - `deployments/acb-strategy-{random,gatherer,rusher,guardian,swarm,hunter}.yaml` - 6 strategy bots + - `services/acb-strategy-*.yaml` - ClusterIP services for bot DNS resolution + - `sealed-secrets/` - Templates for API key, R2 creds, bot secrets, Cloudflare token + - All containers from `forgejo.ardenone.com/ai-code-battle/` registry + - Health/readiness probes and resource limits on all deployments ### Remaining Phase 6 Work (requires Cloudflare account access) @@ -222,6 +244,13 @@ ai-code-battle/ │ ├── guardian/ # PHP - GuardianBot │ ├── swarm/ # TypeScript - SwarmBot │ └── hunter/ # Java - HunterBot +├── deploy/ +│ └── k8s/ # Kubernetes manifests (ArgoCD GitOps) +│ ├── namespace.yaml +│ ├── argocd-application.yaml +│ ├── deployments/ # Worker, index builder, 6 strategy bots +│ ├── services/ # ClusterIP services for bots +│ └── sealed-secrets/ # Secret templates └── docs/ └── plan/ └── plan.md # Full implementation plan diff --git a/deploy/k8s/argocd-application.yaml b/deploy/k8s/argocd-application.yaml new file mode 100644 index 0000000..664961f --- /dev/null +++ b/deploy/k8s/argocd-application.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: ai-code-battle + namespace: argocd +spec: + project: default + source: + repoURL: https://forgejo.ardenone.com/ai-code-battle/ai-code-battle.git + targetRevision: master + path: deploy/k8s + directory: + recurse: true + destination: + server: https://kubernetes.default.svc + namespace: ai-code-battle + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true + - PruneLast=true diff --git a/deploy/k8s/deployments/acb-index-builder.yaml b/deploy/k8s/deployments/acb-index-builder.yaml new file mode 100644 index 0000000..17521ea --- /dev/null +++ b/deploy/k8s/deployments/acb-index-builder.yaml @@ -0,0 +1,48 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-index-builder + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-index-builder + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: index-builder +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-index-builder + strategy: + type: Recreate + template: + metadata: + labels: + app.kubernetes.io/name: acb-index-builder + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: index-builder + spec: + containers: + - name: index-builder + image: forgejo.ardenone.com/ai-code-battle/acb-index-builder:latest + env: + - name: API_URL + valueFrom: + secretKeyRef: + name: acb-api-key + key: api-endpoint + - name: API_KEY + valueFrom: + secretKeyRef: + name: acb-api-key + key: api-key + - name: OUTPUT_DIR + value: "/app/data" + - name: DEPLOY_COMMAND + value: "" + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + memory: 256Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-strategy-gatherer.yaml b/deploy/k8s/deployments/acb-strategy-gatherer.yaml new file mode 100644 index 0000000..1bf4154 --- /dev/null +++ b/deploy/k8s/deployments/acb-strategy-gatherer.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-strategy-gatherer + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-gatherer + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-strategy-gatherer + template: + metadata: + labels: + app.kubernetes.io/name: acb-strategy-gatherer + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot + spec: + containers: + - name: gatherer + image: forgejo.ardenone.com/ai-code-battle/acb-strategy-gatherer:latest + env: + - name: BOT_PORT + value: "8080" + - name: BOT_SECRET + valueFrom: + secretKeyRef: + name: acb-bot-secrets + key: gatherer + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 3 + periodSeconds: 10 + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + memory: 128Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-strategy-guardian.yaml b/deploy/k8s/deployments/acb-strategy-guardian.yaml new file mode 100644 index 0000000..dae55ee --- /dev/null +++ b/deploy/k8s/deployments/acb-strategy-guardian.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-strategy-guardian + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-guardian + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-strategy-guardian + template: + metadata: + labels: + app.kubernetes.io/name: acb-strategy-guardian + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot + spec: + containers: + - name: guardian + image: forgejo.ardenone.com/ai-code-battle/acb-strategy-guardian:latest + env: + - name: BOT_PORT + value: "8080" + - name: BOT_SECRET + valueFrom: + secretKeyRef: + name: acb-bot-secrets + key: guardian + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 3 + periodSeconds: 10 + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + memory: 256Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-strategy-hunter.yaml b/deploy/k8s/deployments/acb-strategy-hunter.yaml new file mode 100644 index 0000000..f219e2c --- /dev/null +++ b/deploy/k8s/deployments/acb-strategy-hunter.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-strategy-hunter + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-hunter + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-strategy-hunter + template: + metadata: + labels: + app.kubernetes.io/name: acb-strategy-hunter + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot + spec: + containers: + - name: hunter + image: forgejo.ardenone.com/ai-code-battle/acb-strategy-hunter:latest + env: + - name: BOT_PORT + value: "8080" + - name: BOT_SECRET + valueFrom: + secretKeyRef: + name: acb-bot-secrets + key: hunter + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 3 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + memory: 256Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-strategy-random.yaml b/deploy/k8s/deployments/acb-strategy-random.yaml new file mode 100644 index 0000000..da3ad2f --- /dev/null +++ b/deploy/k8s/deployments/acb-strategy-random.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-strategy-random + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-random + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-strategy-random + template: + metadata: + labels: + app.kubernetes.io/name: acb-strategy-random + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot + spec: + containers: + - name: random + image: forgejo.ardenone.com/ai-code-battle/acb-strategy-random:latest + env: + - name: BOT_PORT + value: "8080" + - name: BOT_SECRET + valueFrom: + secretKeyRef: + name: acb-bot-secrets + key: random + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 3 + periodSeconds: 10 + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + memory: 128Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-strategy-rusher.yaml b/deploy/k8s/deployments/acb-strategy-rusher.yaml new file mode 100644 index 0000000..e0db3ee --- /dev/null +++ b/deploy/k8s/deployments/acb-strategy-rusher.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-strategy-rusher + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-rusher + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-strategy-rusher + template: + metadata: + labels: + app.kubernetes.io/name: acb-strategy-rusher + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot + spec: + containers: + - name: rusher + image: forgejo.ardenone.com/ai-code-battle/acb-strategy-rusher:latest + env: + - name: BOT_PORT + value: "8080" + - name: BOT_SECRET + valueFrom: + secretKeyRef: + name: acb-bot-secrets + key: rusher + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 3 + periodSeconds: 10 + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + memory: 128Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-strategy-swarm.yaml b/deploy/k8s/deployments/acb-strategy-swarm.yaml new file mode 100644 index 0000000..2dddf67 --- /dev/null +++ b/deploy/k8s/deployments/acb-strategy-swarm.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-strategy-swarm + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-swarm + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acb-strategy-swarm + template: + metadata: + labels: + app.kubernetes.io/name: acb-strategy-swarm + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot + spec: + containers: + - name: swarm + image: forgejo.ardenone.com/ai-code-battle/acb-strategy-swarm:latest + env: + - name: BOT_PORT + value: "8080" + - name: BOT_SECRET + valueFrom: + secretKeyRef: + name: acb-bot-secrets + key: swarm + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 3 + periodSeconds: 10 + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + memory: 256Mi + restartPolicy: Always diff --git a/deploy/k8s/deployments/acb-worker.yaml b/deploy/k8s/deployments/acb-worker.yaml new file mode 100644 index 0000000..e9d5574 --- /dev/null +++ b/deploy/k8s/deployments/acb-worker.yaml @@ -0,0 +1,81 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: acb-worker + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-worker + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: worker +spec: + replicas: 2 + selector: + matchLabels: + app.kubernetes.io/name: acb-worker + template: + metadata: + labels: + app.kubernetes.io/name: acb-worker + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: worker + spec: + containers: + - name: worker + image: forgejo.ardenone.com/ai-code-battle/acb-worker:latest + args: + - "-poll=5s" + - "-heartbeat=30s" + - "-timeout=3s" + env: + - name: ACB_API_ENDPOINT + valueFrom: + secretKeyRef: + name: acb-api-key + key: api-endpoint + - name: ACB_API_KEY + valueFrom: + secretKeyRef: + name: acb-api-key + key: api-key + - name: ACB_R2_ENDPOINT + valueFrom: + secretKeyRef: + name: acb-r2-credentials + key: endpoint + - name: ACB_R2_BUCKET + value: "acb-data" + - name: ACB_R2_ACCESS_KEY + valueFrom: + secretKeyRef: + name: acb-r2-credentials + key: access-key + - name: ACB_R2_SECRET_KEY + valueFrom: + secretKeyRef: + name: acb-r2-credentials + key: secret-key + - name: ACB_METRICS_ADDR + value: ":9090" + ports: + - name: metrics + containerPort: 9090 + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: metrics + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /ready + port: metrics + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 256Mi + limits: + memory: 512Mi + restartPolicy: Always diff --git a/deploy/k8s/namespace.yaml b/deploy/k8s/namespace.yaml new file mode 100644 index 0000000..3b091a6 --- /dev/null +++ b/deploy/k8s/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: ai-code-battle + labels: + app.kubernetes.io/part-of: ai-code-battle diff --git a/deploy/k8s/sealed-secrets/api-key.yaml b/deploy/k8s/sealed-secrets/api-key.yaml new file mode 100644 index 0000000..75da175 --- /dev/null +++ b/deploy/k8s/sealed-secrets/api-key.yaml @@ -0,0 +1,18 @@ +# SealedSecret template — replace with actual sealed values via kubeseal +# Source secret keys: +# api-endpoint: Worker API endpoint URL +# api-key: Worker API authentication key +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: acb-api-key + namespace: ai-code-battle +spec: + encryptedData: + api-endpoint: REPLACE_WITH_SEALED_VALUE + api-key: REPLACE_WITH_SEALED_VALUE + template: + metadata: + name: acb-api-key + namespace: ai-code-battle + type: Opaque diff --git a/deploy/k8s/sealed-secrets/bot-secrets.yaml b/deploy/k8s/sealed-secrets/bot-secrets.yaml new file mode 100644 index 0000000..ad4387a --- /dev/null +++ b/deploy/k8s/sealed-secrets/bot-secrets.yaml @@ -0,0 +1,20 @@ +# SealedSecret template — replace with actual sealed values via kubeseal +# Source secret keys: HMAC shared secrets for each strategy bot +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: acb-bot-secrets + namespace: ai-code-battle +spec: + encryptedData: + random: REPLACE_WITH_SEALED_VALUE + gatherer: REPLACE_WITH_SEALED_VALUE + rusher: REPLACE_WITH_SEALED_VALUE + guardian: REPLACE_WITH_SEALED_VALUE + swarm: REPLACE_WITH_SEALED_VALUE + hunter: REPLACE_WITH_SEALED_VALUE + template: + metadata: + name: acb-bot-secrets + namespace: ai-code-battle + type: Opaque diff --git a/deploy/k8s/sealed-secrets/cloudflare-api-token.yaml b/deploy/k8s/sealed-secrets/cloudflare-api-token.yaml new file mode 100644 index 0000000..7f16009 --- /dev/null +++ b/deploy/k8s/sealed-secrets/cloudflare-api-token.yaml @@ -0,0 +1,16 @@ +# SealedSecret template — replace with actual sealed values via kubeseal +# Source secret keys: +# token: Cloudflare API token (for wrangler pages deploy by index builder) +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: acb-cloudflare-api-token + namespace: ai-code-battle +spec: + encryptedData: + token: REPLACE_WITH_SEALED_VALUE + template: + metadata: + name: acb-cloudflare-api-token + namespace: ai-code-battle + type: Opaque diff --git a/deploy/k8s/sealed-secrets/r2-credentials.yaml b/deploy/k8s/sealed-secrets/r2-credentials.yaml new file mode 100644 index 0000000..97b8e33 --- /dev/null +++ b/deploy/k8s/sealed-secrets/r2-credentials.yaml @@ -0,0 +1,20 @@ +# SealedSecret template — replace with actual sealed values via kubeseal +# Source secret keys: +# endpoint: R2 S3-compatible endpoint URL +# access-key: R2 access key ID +# secret-key: R2 secret access key +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: acb-r2-credentials + namespace: ai-code-battle +spec: + encryptedData: + endpoint: REPLACE_WITH_SEALED_VALUE + access-key: REPLACE_WITH_SEALED_VALUE + secret-key: REPLACE_WITH_SEALED_VALUE + template: + metadata: + name: acb-r2-credentials + namespace: ai-code-battle + type: Opaque diff --git a/deploy/k8s/services/acb-strategy-gatherer.yaml b/deploy/k8s/services/acb-strategy-gatherer.yaml new file mode 100644 index 0000000..70d83b1 --- /dev/null +++ b/deploy/k8s/services/acb-strategy-gatherer.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: acb-strategy-gatherer + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-gatherer + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: acb-strategy-gatherer + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP diff --git a/deploy/k8s/services/acb-strategy-guardian.yaml b/deploy/k8s/services/acb-strategy-guardian.yaml new file mode 100644 index 0000000..12b856b --- /dev/null +++ b/deploy/k8s/services/acb-strategy-guardian.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: acb-strategy-guardian + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-guardian + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: acb-strategy-guardian + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP diff --git a/deploy/k8s/services/acb-strategy-hunter.yaml b/deploy/k8s/services/acb-strategy-hunter.yaml new file mode 100644 index 0000000..2d92bc6 --- /dev/null +++ b/deploy/k8s/services/acb-strategy-hunter.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: acb-strategy-hunter + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-hunter + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: acb-strategy-hunter + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP diff --git a/deploy/k8s/services/acb-strategy-random.yaml b/deploy/k8s/services/acb-strategy-random.yaml new file mode 100644 index 0000000..f63ee40 --- /dev/null +++ b/deploy/k8s/services/acb-strategy-random.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: acb-strategy-random + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-random + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: acb-strategy-random + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP diff --git a/deploy/k8s/services/acb-strategy-rusher.yaml b/deploy/k8s/services/acb-strategy-rusher.yaml new file mode 100644 index 0000000..dea69c6 --- /dev/null +++ b/deploy/k8s/services/acb-strategy-rusher.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: acb-strategy-rusher + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-rusher + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: acb-strategy-rusher + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP diff --git a/deploy/k8s/services/acb-strategy-swarm.yaml b/deploy/k8s/services/acb-strategy-swarm.yaml new file mode 100644 index 0000000..b503735 --- /dev/null +++ b/deploy/k8s/services/acb-strategy-swarm.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: acb-strategy-swarm + namespace: ai-code-battle + labels: + app.kubernetes.io/name: acb-strategy-swarm + app.kubernetes.io/part-of: ai-code-battle + app.kubernetes.io/component: strategy-bot +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: acb-strategy-swarm + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP diff --git a/web/pages.json b/web/pages.json index 47692f1..73e248b 100644 --- a/web/pages.json +++ b/web/pages.json @@ -1,5 +1,5 @@ { - "name": "acb-web", + "name": "ai-code-battle", "description": "AI Code Battle - Competitive bot programming platform", "domains": [ "aicodebattle.com"