Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 5 additions & 1 deletion changelog/src/changelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@ def add(working_dir: Optional[str] = typer.Option(default=default_path)):
issue_number = None

ChangelogHandler(working_dir).add_entry(
domain_type, changelog_type, message, issue_number=issue_number
domain_type,
changelog_type,
message,
issue_number=issue_number,
issue_origin="github", # All new changelogs originate from GitHub
)


Expand Down
14 changes: 11 additions & 3 deletions changelog/src/changelog_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from typing import Dict, List, Optional, Union

GITLAB_URL = os.environ.get("GITLAB_URL", "https://gitlab.com/baserow/baserow")
GITHUB_URL = os.environ.get("GITHUB_URL", "https://github.com/baserow/baserow")


class ChangelogEntry(abc.ABC):
Expand All @@ -17,6 +18,7 @@ def generate_entry_dict(
self,
domain_type_name: str,
message: str,
issue_origin: str,
issue_number: Optional[int] = None,
bullet_points: List[str] = None,
) -> Dict[str, any]:
Expand All @@ -26,18 +28,24 @@ def generate_entry_dict(
return {
"type": self.type,
"message": message,
"domain": domain_type_name,
"issue_origin": issue_origin,
"issue_number": issue_number,
"domain": domain_type_name,
"bullet_points": bullet_points,
"created_at": datetime.now(tz=timezone.utc).strftime("%Y-%m-%d"),
}

@staticmethod
def get_markdown_string(message: str, issue_number: Union[int, None] = None) -> str:
def get_markdown_string(
message: str,
issue_number: Union[int, None] = None,
issue_origin: Optional[str] = "gitlab",
) -> str:
string = f"* {message}"

if issue_number is not None:
string += f" [#{issue_number}]({GITLAB_URL}/-/issues/{issue_number})"
url_prefix = GITLAB_URL if issue_origin == "gitlab" else GITHUB_URL
string += f" [#{issue_number}]({url_prefix}/-/issues/{issue_number})"

return string

Expand Down
6 changes: 6 additions & 0 deletions changelog/src/domains.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,16 @@ class AutomationDomain(BaserowDomain):
heading = "Automation"


class IntegrationDomain(BaserowDomain):
type = "integration"
heading = "Integration"


domain_types: Dict[str, type[BaserowDomain]] = {
CoreDomain.type: CoreDomain,
DashboardDomain.type: DashboardDomain,
DatabaseDomain.type: DatabaseDomain,
BuilderDomain.type: BuilderDomain,
AutomationDomain.type: AutomationDomain,
IntegrationDomain.type: IntegrationDomain,
}
19 changes: 15 additions & 4 deletions changelog/src/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def add_entry(
changelog_entry_type_name: str,
message: str,
issue_number: Optional[int] = None,
issue_origin: Optional[str] = "github",
release: str = UNRELEASED_FOLDER_NAME,
bullet_points: List[str] = None,
) -> str:
Expand All @@ -57,7 +58,11 @@ def add_entry(

with open(full_path, "w+") as entry_file:
entry = changelog_entry_type().generate_entry_dict(
domain_type_name, message, issue_number, bullet_points=bullet_points
domain_type_name,
message,
issue_origin,
issue_number,
bullet_points=bullet_points,
)
json.dump(entry, entry_file, indent=4)

Expand Down Expand Up @@ -161,8 +166,13 @@ def generate_changelog_markdown_file(self):
)
entry_message = f"{domain_prefix}{entry['message']}"

# Note: if no `issue_origin` is found, we default to "gitlab"
# for compatibility with older entries. All new entries will
# point to "github" as their origin.
entry_markdown_string = entry_type.get_markdown_string(
entry_message, entry["issue_number"]
entry_message,
entry["issue_number"],
entry.get("issue_origin", "gitlab"),
)

changelog_file.write(
Expand Down Expand Up @@ -193,7 +203,8 @@ def move_entries_to_release_folder(
# Delete all .gitignore files in the subfolders of release folder because
# there is not reason to have empty folders there.
for gitignore_file in glob.glob(
f"{release_path}/**/.gitkeep", recursive=True):
f"{release_path}/**/.gitkeep", recursive=True
):
os.remove(gitignore_file)

# Delete all empty subfolders in the release folder because we don't need
Expand All @@ -213,7 +224,7 @@ def move_entries_to_release_folder(
except FileExistsError:
print(f'Release with name "{release_name}" already exists.')
except OSError as e:
print(f'OS error occurred: {e}')
print(f"OS error occurred: {e}")
return None

@staticmethod
Expand Down
16 changes: 8 additions & 8 deletions changelog/tests/changelog/test_changelog_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,29 @@ def test_add_entry(fs):

def test_get_changelog_entries(fs):
handler = ChangelogHandler()
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "1")
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "2")
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "msg1")
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "msg2")

changelog_entries = handler.get_changelog_entries()

assert BugChangelogEntry.type in changelog_entries
assert [
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "1"),
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "2"),
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "msg1", "github"),
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "msg2", "github"),
] in changelog_entries.values()


def test_get_changelog_entries_order(fs):
handler = ChangelogHandler()
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "2")
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "1")
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "msg2")
handler.add_entry(DatabaseDomain.type, BugChangelogEntry.type, "msg1")

changelog_entries = handler.get_changelog_entries()

assert BugChangelogEntry.type in changelog_entries
assert [
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "1"),
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "2"),
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "msg1", "github"),
BugChangelogEntry().generate_entry_dict(DatabaseDomain.type, "msg2", "github"),
] in changelog_entries.values()


Expand Down
21 changes: 12 additions & 9 deletions deploy/helm/baserow/Chart.lock
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
dependencies:
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.35
version: 1.0.36
- name: baserow
repository: file://charts/baserow-common
version: 1.0.36
- name: redis
repository: https://charts.bitnami.com/bitnami
version: 19.5.5
Expand All @@ -32,5 +35,5 @@ dependencies:
- name: caddy-ingress-controller
repository: https://caddyserver.github.io/ingress
version: 1.1.0
digest: sha256:d0bd922613ee89c3472f6c3bae1c8195b470af2590d2d83307cbd15fb36a5dca
generated: "2025-10-08T14:18:40.864014+02:00"
digest: sha256:482eebfe24d9ce5182fe40b83b0251a14316f1f64e0199e6ae87ce724a7d29ed
generated: "2025-11-04T11:22:44.737069+01:00"
22 changes: 14 additions & 8 deletions deploy/helm/baserow/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: baserow
description: The open platform to create scalable databases and applications—without coding.
type: application
version: 1.0.35
version: 1.0.36
appVersion: "1.35.3"
home: https://github.com/baserow/baserow/blob/develop/deploy/helm/baserow?ref_type=heads
icon: https://baserow.io/img/favicon_192.png
Expand All @@ -13,40 +13,46 @@ sources:
dependencies:
- name: baserow
alias: baserow-backend-asgi
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"

- name: baserow
alias: baserow-backend-wsgi
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"

- name: baserow
alias: baserow-frontend
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"

- name: baserow
alias: baserow-celery-beat-worker
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"

- name: baserow
alias: baserow-celery-export-worker
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"

- name: baserow
alias: baserow-celery-worker
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"

- name: baserow
alias: baserow-celery-flower
version: "1.0.35"
version: "1.0.36"
repository: "file://charts/baserow-common"
condition: baserow-celery-flower.enabled

- name: baserow
alias: baserow-embeddings
version: "1.0.36"
repository: "file://charts/baserow-common"
condition: baserow-embeddings.enabled

- name: redis
version: 19.5.x
repository: https://charts.bitnami.com/bitnami
Expand Down
53 changes: 53 additions & 0 deletions deploy/helm/baserow/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,36 @@ baserow-backend-wsgi:
onDemandAsk: "http://my-baserow-baserow-backend-wsgi/api/builder/domains/ask-public-domain-exists/"
```

## AI and Embeddings Configuration

Baserow supports multiple AI providers for generative AI features and the AI assistant. The embeddings service powers semantic search for the AI assistant's documentation lookup feature. For more documentation check the [Baserow AI documentation](/docs/installation/ai-assistant.md).

### Enable AI Assistant

To enable the AI assistant, you need to configure the LLM model and provide the necessary API keys for the chosen provider.

```yaml
global:
baserow:
assistantLLMModel: "groq/openai/gpt-oss-120b"

backendSecrets:
GROQ_API_KEY: "your-groq-api-key"
```

More information about the available providers can be found here: https://baserow.io/docs/installation%2Fai-assistant

### Enable Embeddings Service

The AI assistant uses the embeddings service and requires the LLM model to be configured. You need to enable this next to the global ai configuration.

#### Basic Configuration

```yaml
baserow-embeddings:
enabled: true
```

## Different Cloud Providers

On different cloud providers, you may need to configure the Object storage, ingress and Load Balancer differently. Below are some examples of how to configure them.
Expand Down Expand Up @@ -425,6 +455,29 @@ caddy:
| `baserow-celery-flower.args` | Arguments passed to the Celery Flower monitoring tool. | `["celery-flower"]` |
| `baserow-celery-flower.replicaCount` | Number of replicas for the Celery Flower monitoring tool. | `1` |

### Baserow Embeddings Configuration

| Name | Description | Value |
| --------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------- |
| `baserow-embeddings.enabled` | Set to true to enable the Baserow Embeddings service. | `false` |
| `baserow-embeddings.assistantLLMModel` | The LLM model to use for the Embeddings service. | `groq/openai/gpt-oss-120b` |
| `baserow-embeddings.image.repository` | Docker image repository for the Embeddings service. | `embeddings` |
| `baserow-embeddings.resources` | Resource requests and limits for the Embeddings service. | |
| `baserow-embeddings.autoscaling.enabled` | Enable autoscaling for the Embeddings service. | `false` |
| `baserow-embeddings.autoscaling.minReplicas` | Minimum number of replicas for autoscaling. | `1` |
| `baserow-embeddings.autoscaling.maxReplicas` | Maximum number of replicas for autoscaling. | `3` |
| `baserow-embeddings.autoscaling.targetCPUUtilizationPercentage` | Target CPU utilization percentage for autoscaling. | `80` |
| `baserow-embeddings.service.port` | Service port for the Embeddings service. | `80` |
| `baserow-embeddings.service.targetPort` | Target port for the Embeddings service. | `80` |
| `baserow-embeddings.readinessProbe.initialDelaySeconds` | Initial delay for readiness probe. | `10` |
| `baserow-embeddings.readinessProbe.periodSeconds` | Period for readiness probe. | `10` |
| `baserow-embeddings.readinessProbe.timeoutSeconds` | Timeout for readiness probe. | `5` |
| `baserow-embeddings.livenessProbe.initialDelaySeconds` | Initial delay for liveness probe. | `10` |
| `baserow-embeddings.livenessProbe.periodSeconds` | Period for liveness probe. | `10` |
| `baserow-embeddings.livenessProbe.timeoutSeconds` | Timeout for liveness probe. | `5` |
| `baserow-embeddings.pdb.create` | Enable/disable a Pod Disruption Budget creation. | `false` |
| `baserow-embeddings.pdb.minAvailable` | Minimum number/percentage of pods that should remain scheduled. | `75%` |

### Ingress Configuration

| Name | Description | Value |
Expand Down
4 changes: 2 additions & 2 deletions deploy/helm/baserow/charts/baserow-common/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: v2
name: baserow
description: A Helm chart for Kubernetes
description: Internal common chart for baserow components

# A chart can be either an 'application' or a 'library' chart.
#
Expand All @@ -15,7 +15,7 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.0.35
version: 1.0.36

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Common labels
{{- define "baserow.labels" -}}
helm.sh/chart: {{ include "baserow.chart" . }}
{{ include "baserow.selectorLabels" . }}
{{ include "baserow.additionalLabels" . }}
{{- include "baserow.additionalLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
Expand All @@ -68,7 +68,7 @@ Selector labels
{{- define "baserow.selectorLabels" -}}
app.kubernetes.io/name: {{ include "baserow.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{ include "baserow.additionalSelectorLabels" . }}
{{- include "baserow.additionalSelectorLabels" . }}
{{- end }}

{{/*
Expand Down
6 changes: 6 additions & 0 deletions deploy/helm/baserow/templates/backend-configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ data:
AWS_S3_CUSTOM_DOMAIN: {{ .Values.global.baserow.objectsDomain }}/{{ (index .Values.minio.provisioning.buckets 0).name }}
AWS_S3_REGION_NAME: "us-east-1"
{{- end }}
{{- if .Values.global.baserow.assistantLLMModel -}}
BASEROW_ENTERPRISE_ASSISTANT_LLM_MODEL: "{{ .Values.baserow.assistantLLMModel }}"
{{- end }}
{{- if (index .Values "baserow-embeddings").enabled }}
BASEROW_EMBEDDINGS_API_URL: http://{{ include "baserow.fullname" (index .Subcharts "baserow-embeddings") }}
{{- end }}
{{- range $key, $val := .Values.backendConfigMap }}
{{ $key }}: {{ $val | quote }}
{{- end }}
Loading
Loading