Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
ca1b560
fix: separate SSL certificates (#101)
wgalanciak May 7, 2025
b64df46
fix: Set environment variables via .env file. (#99)
nmorenor May 8, 2025
2c6b287
fix: add env_file to codetogether-intel (#105)
wgalanciak May 10, 2025
2605843
fix: missing CT_HQ_BASE_URL env var (#107)
wgalanciak May 12, 2025
fb116ee
feat: nginx auto config (#109)
wgalanciak May 12, 2025
4d79a6d
fix: add step for sso provider (#110)
wgalanciak May 12, 2025
063a4eb
fix: add client_max_body_size to intel (#112)
wgalanciak May 12, 2025
d665be1
fix: tweak name of dhparam.pem env var (#113)
wgalanciak May 12, 2025
56d5eee
fix: missing env file on collab (#114)
nmorenor May 12, 2025
f21332a
fix: handle nil ai.openai.api_key to prevent template er… (#116)
danc094codetogether May 12, 2025
11960dd
fix: cleanup for sso tenants (#117)
wgalanciak May 12, 2025
9cd2f48
feat(intel): add option to disable AI integration entirely (#120)
danc094codetogether May 16, 2025
c7bee30
Change gen ai image name on values file (#122)
nmorenor Jun 10, 2025
75c414f
fix: bump up version number (#123)
nmorenor Jun 10, 2025
aacad57
docs: remove outdated metrics section from README (#130)
danc094codetogether Jun 16, 2025
23ddc3e
fix: add note to env-template file (#127)
nmorenor Jun 17, 2025
447a8a7
fix: update LLM image URL to hub.edge (#132)
danc094codetogether Jun 18, 2025
61a8250
docs: add deprecation notice to old Live chart (#131)
danc094codetogether Jun 18, 2025
d4665b0
126 automatically configure ollama integration when llm is enabled (#…
danc094codetogether Jun 18, 2025
9e1cae0
Gen AI Changes (#124)
nmorenor Jun 18, 2025
4fab2ad
Fix collab helm chart to allow usage of locator. (#134)
nmorenor Jun 18, 2025
8033f54
fix: invalid values in AI values section (#137)
wgalanciak Jun 30, 2025
5547e74
fix: support automatic configuration of the LLM integration if AI is …
wgalanciak Jun 30, 2025
6e96ea7
Fixes after Testing (#139)
danc094codetogether Jun 30, 2025
b55b89c
Changes to use localhost always to avoid dns issues (#142)
nmorenor Jun 30, 2025
ea40024
Merge branch 'main' into dev
nmorenor Jun 30, 2025
c481aed
feat: support for optional keycloak deployment (#145)
wgalanciak Jul 10, 2025
40dffd5
144 keycloak (#146)
nmorenor Jul 10, 2025
502eb16
144 keycloak (#147)
nmorenor Jul 10, 2025
f3790b8
144 keycloak (#149)
nmorenor Jul 10, 2025
a044e60
fixes on properties file
nmorenor Jul 10, 2025
98cd5b5
Prepare examples for deployment with keycloak.
nmorenor Jul 10, 2025
0191fcd
move files
nmorenor Jul 10, 2025
65d2a48
feat(charts, compose): add CT_TRUST_ALL_CERTS support (#158)
danc094codetogether Jul 21, 2025
5f5741c
feat(chart): guard `ai-secrets` template behind `ai.enabled` (#161)
danc094codetogether Aug 11, 2025
264c8e4
fix: improve keycloak compose health check (#162)
nmorenor Aug 12, 2025
ecf00a4
fix(helm/intel): scope AI resources per-release to avoid cross-releas…
danc094codetogether Aug 27, 2025
b7f92f8
chore(keycloak): switch to KC_BOOTSTRAP_* admin vars and update compo…
danc094codetogether Sep 5, 2025
2256e9d
feat(helm): add RO rootfs support for Intel and Collab (#169)
danc094codetogether Sep 18, 2025
54402d5
feat(helm-collab): Support optional existing secret for Intel connect…
danc094codetogether Sep 18, 2025
fd6aec4
Merge branch 'main' into dev
danc094codetogether Sep 18, 2025
d382f96
collab, intel: align read-only handling with live legacy chart (#175)
danc094codetogether Sep 24, 2025
5bfed1d
Bump version from 1.2.5 to 1.2.6
danc094codetogether Sep 24, 2025
7a46a70
Bump version to 1.2.3 in Chart.yaml
danc094codetogether Sep 24, 2025
3c5c184
Merge branch 'main' into dev
danc094codetogether Sep 24, 2025
8ca5b5d
Fix indentation in deployment.yaml
danc094codetogether Sep 24, 2025
71c7bdf
Remove initContainers for readOnlyMode
danc094codetogether Sep 24, 2025
6d3ed2a
Bump version from 1.2.6 to 1.2.7
danc094codetogether Sep 25, 2025
75aa28f
Bump version from 1.2.3 to 1.2.4
danc094codetogether Sep 25, 2025
dc6854c
177 collab intel rofs on open shift avoid run as user 0 support fs gr…
danc094codetogether Oct 1, 2025
0bfa15d
Allow to set the CT_CUSTOM_CLIENTS_ORIGIN env variable.
nmorenor Oct 1, 2025
f914f00
fix env variable name
nmorenor Oct 2, 2025
f66443d
Allow to add custom ide location url (#184)
nmorenor Oct 2, 2025
f22274c
Merge branch 'main' into dev
danc094codetogether Oct 2, 2025
29e56fb
Remove volumeMounts for readOnlyRootFilesystem
danc094codetogether Oct 2, 2025
d489e34
Update codetogether-tmp volume medium configuration
danc094codetogether Oct 2, 2025
235a2dd
Simplify emptyDir volume definition in deployment.yaml
danc094codetogether Oct 2, 2025
0c577f7
Update version and appVersion in Chart.yaml
danc094codetogether Oct 2, 2025
a9aa401
refactor(helm): decouple customClientsUrl from AI config (#187)
danc094codetogether Oct 15, 2025
b38154c
Bump version and appVersion in Chart.yaml
danc094codetogether Oct 15, 2025
eb0923f
Bump version and appVersion in Chart.yaml
danc094codetogether Oct 15, 2025
6864944
Merge branch 'main' into dev
danc094codetogether Oct 15, 2025
d7781b9
fix: enable read-only FS support (#189)
danc094codetogether Nov 18, 2025
aa788ea
Bump version and appVersion in Chart.yaml
danc094codetogether Nov 18, 2025
f7c5c32
Bump version to 1.2.7 and appVersion to 2025.4.2
danc094codetogether Nov 18, 2025
264abe2
Merge branch 'main' into dev
danc094codetogether Nov 18, 2025
261565d
Remove run-nginx volume mount
danc094codetogether Nov 18, 2025
cb24f6f
Add run-volatile mount and volume to deployment.yaml
danc094codetogether Nov 27, 2025
4f8670b
Refactor deployment.yaml for memory-backed volumes
danc094codetogether Nov 27, 2025
8fbe8b3
feat: add warning log when deprecated AV settings are detected (#193)
danc094codetogether Nov 27, 2025
42d4167
192 add warning log when av related helm values are detected (#194)
danc094codetogether Nov 28, 2025
6416900
Bump version and appVersion in Chart.yaml
danc094codetogether Nov 28, 2025
bfc07e0
Bump version and appVersion in Chart.yaml
danc094codetogether Nov 28, 2025
6df6ba1
Merge branch 'main' into dev
danc094codetogether Nov 28, 2025
1df2081
fix(intel-chart): ensure Ingress v1 + pathType for modern Kubernetes …
danc094codetogether Jan 23, 2026
5c14696
feat(helm): add optional service annotations to collab chart Service …
danc094codetogether Feb 10, 2026
b9918b1
Bump version and appVersion in Chart.yaml
danc094codetogether Feb 10, 2026
2384e38
Merge branch 'main' into dev
danc094codetogether Feb 10, 2026
9a6874d
Bump version and appVersion in Chart.yaml
danc094codetogether Feb 10, 2026
bb4dbaa
feat(helm): add configurable initContainers (startup containers) to I…
danc094codetogether Feb 18, 2026
af2e7a0
feat: add configurable initContainers to collab helm chart (#204)
danc094codetogether Feb 23, 2026
ebeab76
Add dedicated Keycloak readiness gate to prevent Intel starting too e…
danc094codetogether Mar 5, 2026
a64d856
Support adding extra volume mounts via the values.yml file in Helm
TimWebb Mar 20, 2026
2e4fa51
Add extraContainers support for sidecar injection (#206)
danc094codetogether Mar 23, 2026
3f285f5
Merge branch 'main' into dev
danc094codetogether Mar 23, 2026
673c1e1
feat: make health probe path/port configurable (v1.3.5) (#208)
danc094codetogether Apr 9, 2026
358b209
Merge branch 'main' into dev
danc094codetogether Apr 9, 2026
1f6b30b
This is a test
danc094codetogether May 18, 2026
662b9bd
This is a test
danc094codetogether May 18, 2026
7c64b0f
Testing
danc094codetogether May 18, 2026
dc154d4
Publish/codetogether ai helm chart (#212)
danc094codetogether Jun 30, 2026
b4a77e8
Remove local MCP config and test artifacts from dev.
danc094codetogether Jun 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/helm-template-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@ jobs:
run: |
helm template intel ./charts/intel --values ./charts/intel/values.yaml

- name: Validate AI Chart
run: |
helm lint ./charts/ai
helm template test ./charts/ai \
--set-file ctaiPropertiesFile=./charts/ai/ctai-configuration.properties.template \
--set service.fqdn=https://example.codetogether.io \
--set imageCredentials.username=test \
--set imageCredentials.password=test

- name: Validate Live Chart
run: |
helm template live ./charts/live --values ./charts/live/values.yaml
22 changes: 22 additions & 0 deletions charts/ai/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Patterns to ignore when building packages.
.DS_Store
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
*.swp
*.bak
*.tmp
*.orig
*~
.project
.idea/
*.tmproj
.vscode/
SPEC.md
values-aitrax.yaml
values-cluster.yaml
values-local.yaml
21 changes: 21 additions & 0 deletions charts/ai/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: v2
name: codetogether-ai
description: CodeTogether AI on-premises Kubernetes deployment

type: application
version: 0.1.0
appVersion: "0.1.1204"

icon: https://www.codetogether.com/wp-content/uploads/2020/02/codetogether-circle-128.png
home: https://www.codetogether.com

maintainers:
- email: info@codetogether.com
name: CodeTogether Inc.

keywords:
- codetogether
- ctai
- ai
- aitrax
- on-premises
294 changes: 294 additions & 0 deletions charts/ai/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
# Helm Chart for CodeTogether AI

## Summary

This chart deploys CodeTogether AI on a Kubernetes cluster using Helm. Runtime
configuration is supplied as `ctai-configuration.properties`, and the protected
storage master key is stored in a separate Kubernetes Secret.

## Prerequisites

- Helm v3.5+
- Kubernetes v1.19+
- PostgreSQL reachable from the cluster. This chart does not install Postgres.
- A DNS-routable HTTPS host for CodeTogether AI, configured as `service_fqdn`.
- A TLS Secret for Ingress when `ingress.enabled=true`.
- CodeTogether-provided credentials for `hub.edge.codetogether.com`.

## PostgreSQL Prerequisites

This chart does not install Postgres. Provide an external database reachable
from the cluster and configure it in `ctai-configuration.properties`.

Before the first pod starts, run the database grants as a Postgres admin. A
dedicated application user is recommended:

```sql
GRANT ALL PRIVILEGES ON DATABASE <db> TO <app_user>;
GRANT CREATE ON DATABASE <db> TO <app_user>;
ALTER DATABASE <db> OWNER TO <app_user>;
ALTER ROLE <app_user> BYPASSRLS;
```

`BYPASSRLS` matches the production application role shape. CodeTogether uses
row-level security on platform tables, including `oauth2_cache`, where SSO
stores OAuth state. Without it, SSO redirects can fail because OAuth state
cannot be inserted or read.

Managed Postgres superusers, such as DigitalOcean's `doadmin`, bypass RLS but
are not recommended for production application connections. If your provider
requires SSL, append `?sslmode=require` to the JDBC URL, for example:

```properties
database_url=jdbc:postgresql://postgres.example.internal:5432/codetogether?sslmode=require
```

## Install

### 1. Prepare the configuration file

Copy `ctai-configuration.properties.template` to
`ctai-configuration.properties`, then replace the example values with the values
for your environment.

```bash
cp ctai-configuration.properties.template ctai-configuration.properties
```

Set `service_fqdn` to the public HTTPS URL for the deployment, for example:

```properties
service_fqdn=https://ai.example.com
```

Set the external Postgres connection properties:

```properties
database_url=jdbc:postgresql://postgres.example.internal:5432/codetogether
database_username=codetogether
database_password=replace-with-postgres-password
```

Generate the random properties-file secrets and paste the output into
`ctai-configuration.properties`:

```bash
./generate-properties-secrets.sh
```

The configuration file contains deployment secrets. Store it securely and do
not commit customer-specific values.

### 2. Configure SSO

Register this redirect URI with your identity provider:

```text
https://ai.example.com/api/v1/auth/sso/provider/callback
```

Use the same host as `service_fqdn`. For Google OAuth or Google OIDC, add that
URI as an Authorized redirect URI in the Google Cloud Console, then set the
provider values in `ctai-configuration.properties`, for example:

```properties
sso_provider1_type=google
sso_provider1=google
sso_provider1_client_id=replace-with-google-client-id
sso_provider1_client_secret=replace-with-google-client-secret
sso_provider1_client_issuer_url=https://accounts.google.com
```

Before testing SSO, complete the [PostgreSQL prerequisites](#postgresql-prerequisites).

### 3. Create the TLS Secret

Create the TLS Secret in the namespace where CodeTogether AI will run. The
default Secret name is `codetogether-ai-tls`.

```bash
kubectl create namespace codetogether-ai
kubectl create secret tls codetogether-ai-tls \
--namespace codetogether-ai \
--key /path/to/tls.key \
--cert /path/to/tls.crt
```

### 4. Create the protected storage master-key Secret

CodeTogether AI uses a 32-byte AES master key to encrypt sensitive values stored
in Postgres. Generate this key once per deployment environment and database.
Changing the key after encrypted data exists prevents that data from being
decrypted.

```bash
./generate-master-key.sh --k8s-secret-yaml --secret-name ctai-master-key \
> ctai-master-key-secret.yaml

kubectl apply -f ctai-master-key-secret.yaml -n codetogether-ai
```

Save the generated base64 key in your password manager and keep it with your
Postgres backup procedure.

### 5. Install the chart

```bash
helm repo add codetogether https://helm.codetogether.io
helm repo update

helm install codetogether-ai codetogether/codetogether-ai \
--namespace codetogether-ai --create-namespace \
--set-file ctaiPropertiesFile=./ctai-configuration.properties \
--set imageCredentials.username=replace-with-hub-edge-username \
--set imageCredentials.password=replace-with-hub-edge-password \
--set masterKey.source=secret \
--set masterKey.existingSecret=ctai-master-key
```

Ingress host and TLS are derived from `service_fqdn` in
`ctai-configuration.properties`. If you also set `service.fqdn` in Helm values,
it must exactly match `service_fqdn`.

By default, the chart does not set `ingress.className`, matching the
CodeTogether Intel chart. Clusters without a default IngressClass should set one
explicitly:

```bash
--set ingress.className=nginx
```

If you set `ingress.className=codetogether-nginx`, the chart also creates a
matching `IngressClass`.

## Configuration

The following table lists the primary configurable parameters and defaults.

| Parameter | Description | Default |
| --------- | ----------- | ------- |
| `nameOverride` | Overrides the chart name | `""` |
| `fullnameOverride` | Overrides the full release name | `""` |
| `image.repository` | Container image repository | `hub.edge.codetogether.com/releases/codetogether-ai` |
| `image.pullPolicy` | Image pull policy | `Always` |
| `image.tag` | Container image tag | `latest` |
| `image.digest` | Optional image digest; overrides the tag when set | `""` |
| `imageCredentials.enabled` | Create a pull Secret from registry credentials | `true` |
| `imageCredentials.registry` | Private registry host | `hub.edge.codetogether.com` |
| `imageCredentials.username` | Registry username | `my-customer-username` |
| `imageCredentials.password` | Registry password | `my-customer-password` |
| `service.fqdn` | Public HTTPS URL; optional with `--set-file`, required for pre-created properties Secrets | `""` |
| `service.type` | Kubernetes Service type | `ClusterIP` |
| `service.port` | Service port for nginx / portal | `1080` |
| `service.annotations` | Kubernetes Service annotations | `{}` |
| `ctaiPropertiesFile` | Properties file contents, normally set with `--set-file` | `""` |
| `ctaipropertiessecret.enabled` | Mount a pre-created properties Secret instead of creating one from `ctaiPropertiesFile` | `false` |
| `ctaipropertiessecret.ref` | Name of the pre-created properties Secret | `""` |
| `masterKey.source` | Master key source: `secret`, `auto`, or `external` | `secret` |
| `masterKey.existingSecret` | Pre-created master-key Secret name when `source=secret` | `ctai-master-key` |
| `masterKey.existingSecretKey` | Key in the master-key Secret | `CTAI_PROTECTED_STORAGE_MASTER_KEY_B64` |
| `masterKey.existingSecretVersionKey` | Optional version key in the master-key Secret | `CTAI_PROTECTED_STORAGE_MASTER_KEY_VERSION` |
| `properties.mountPath` | Pod mount path for the properties file | `/opt/ctai/server/config` |
| `properties.fileName` | Properties filename inside the Secret | `ctai-configuration.properties` |
| `ingress.enabled` | Create an Ingress resource | `true` |
| `ingress.annotations` | Ingress annotations | `nginx.ingress.kubernetes.io/proxy-body-size: "16m"` |
| `ingress.tls.secretName` | TLS Secret for Ingress | `codetogether-ai-tls` |
| `serviceAccount.create` | Create a ServiceAccount | `true` |
| `serviceAccount.name` | ServiceAccount name | `codetogether-ai` |
| `replicaCount` | Deployment replica count | `1` |
| `readinessProbe.path` | Readiness endpoint on port 1080 | `/healthz` |
| `livenessProbe.path` | Liveness endpoint on port 8080 | `/actuator/health` |
| `startupProbe.enabled` | Enable startup probe | `true` |

`image.tag` controls which container image the Deployment pulls at install or
upgrade time. `appVersion` in `Chart.yaml` is chart metadata only; it does not
pin the running image unless you set `image.tag` or `image.digest`. Most
installations can use the default `latest` tag and receive hub.edge updates on
`helm upgrade` after the registry tag moves.

## Pre-Created Properties Secret

For GitOps workflows, create and manage the properties Secret outside Helm:

```bash
kubectl create secret generic ctai-properties \
--namespace codetogether-ai \
--from-file=ctai-configuration.properties=./ctai-configuration.properties
```

Then install or upgrade with:

```yaml
ctaipropertiessecret:
enabled: true
ref: ctai-properties

service:
fqdn: https://ai.example.com
```

When Helm cannot read the properties file through `--set-file`, `service.fqdn`
is required for Ingress and install notes. It must match `service_fqdn` inside
the Secret.

## Validation and Troubleshooting

Render the chart locally before installing:

```bash
helm template codetogether-ai codetogether/codetogether-ai \
--set-file ctaiPropertiesFile=./ctai-configuration.properties \
--set service.fqdn=https://ai.example.com \
--set imageCredentials.username=test \
--set imageCredentials.password=test
```

`service.fqdn` must match `service_fqdn` in the properties file when both are set.

At runtime, CodeTogether AI validates the mounted configuration before the
service starts. If validation fails, the pod exits and logs a block beginning
with `Configuration errors:`.

```bash
kubectl logs -n codetogether-ai deploy/codetogether-ai
kubectl logs -n codetogether-ai deploy/codetogether-ai --previous
```

Common causes include unfilled example values, Postgres connectivity problems,
missing or changed master-key Secret, an HTTP `service_fqdn`, missing TLS
Secret, or SSO provider settings that do not match the registered redirect URI.
If login fails after returning from Google or another identity provider with
`authorization_request_not_found`, check that the database user has `BYPASSRLS`
and that the registered OAuth redirect URI exactly matches
`{service_fqdn}/api/v1/auth/sso/provider/callback`.

## Upgrade

```bash
helm repo update
helm upgrade codetogether-ai codetogether/codetogether-ai \
--namespace codetogether-ai \
--set-file ctaiPropertiesFile=./ctai-configuration.properties \
--set imageCredentials.username=replace-with-hub-edge-username \
--set imageCredentials.password=replace-with-hub-edge-password
```

Using `latest` is fine for most installs. Pin a known GA build only when change
control requires a fixed container version:

```bash
helm upgrade codetogether-ai codetogether/codetogether-ai \
--namespace codetogether-ai \
--set-file ctaiPropertiesFile=./ctai-configuration.properties \
--set imageCredentials.username=replace-with-hub-edge-username \
--set imageCredentials.password=replace-with-hub-edge-password \
--set image.tag=0.1.1204
```

The Deployment rolls when the chart-managed properties Secret changes.

## Uninstall

```bash
helm uninstall codetogether-ai -n codetogether-ai
```
Loading
Loading