-
Release 2026.10.05-1
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 52sBuild and Deploy Staging / build (push) Successful in 49sTests / test (push) Successful in 2m6sBuild and Deploy Production / deploy (push) Successful in 32sBuild and Deploy Staging / deploy-appuio (push) Successful in 6sreleased this
2026-10-05 14:24:22 +00:00 | 108 commits to main since this releaseRelease 2026.10.05-1
- bump version 2026.10.05-0 -> 2026.10.05-1
- remove unused hack files
- modernize ci pipeline for latest forgejo features
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Release 2026.10.05-0
StableSome checks failedBuild and Deploy Staging / build (push) Successful in 49sTests / test (push) Successful in 2m1sBuild and Deploy Production / build (push) Failing after 13sBuild and Deploy Production / deploy (push) Has been skippedBuild and Deploy Staging / deploy-appuio (push) Successful in 6sreleased this
2026-10-05 14:05:18 +00:00 | 111 commits to main since this releaseRelease 2026.10.05-0
- bump version 2026.09.28-0 -> 2026.10.05-0
- Merge pull request 'feat(alerts): link alerts to docs.servala.com runbooks' (#717) from feat/alert-runbook-links into main
- feat(alerts): link alerts to docs.servala.com runbooks
- Merge pull request 'fix(deps): update dependency django-allauth to >=65.19.7' (#709) from renovate/django-allauth-65.x into main
- Merge pull request 'chore(deps): update dependency djlint to >=1.46.4' (#710) from renovate/djlint-1.x into main
- Merge pull request 'chore(deps): update dependency flake8-bugbear to >=26.9.30' (#711) from renovate/flake8-bugbear-26.x into main
- Merge pull request 'fix(deps): update dependency cryptography to >=50.0.2' (#714) from renovate/cryptography-50.x into main
- Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.3.6' (#708) from renovate/https-github.com-renovatebot-github-action-46.x into main
- chore(deps): update https://github.com/renovatebot/github-action action to v46.3.7
- fix(deps): update dependency django-allauth to >=65.19.7
- fix(deps): update dependency cryptography to >=50.0.2
- chore(deps): update dependency flake8-bugbear to >=26.9.30
- chore(deps): update dependency djlint to >=1.46.4
- Merge pull request 'chore(deps): update dependency djlint to >=1.46.3' (#706) from renovate/djlint-1.x into main
- Merge pull request 'chore(deps): update dependency isort to >=9.0.2' (#707) from renovate/isort-9.x into main
- Merge pull request 'Refresh CRD schema without restart' (#705) from feat/crd-schema-refresh into main
- chore(deps): update dependency isort to >=9.0.2
- chore(deps): update dependency djlint to >=1.46.3
- feat(crd): refresh CRD schema without restart
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Release 2026.09.28-0
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 55sBuild and Deploy Staging / build (push) Successful in 56sTests / test (push) Successful in 1m58sBuild and Deploy Production / deploy (push) Successful in 35sBuild and Deploy Staging / deploy-appuio (push) Successful in 8sreleased this
2026-09-28 13:42:32 +00:00 | 130 commits to main since this releaseRelease 2026.09.28-0
Highlights
Alerts on the service instance page (#690)
- A new "Alerts" card on the instance detail page lists every alert rule that watches the instance. It shows the alert name, severity, summary, and how long a condition must last before the alert fires.
- Firing alerts appear at the top with a banner, and the card opens automatically.
- Organization admins can mute a firing alert for 1 hour, 4 hours, 24 hours, or 7 days, with an optional reason. They can also unmute it again.
- Alerts that Servala support muted show as "Muted by support". Customers cannot unmute them.
- Every mute and unmute is recorded in the audit log.
Invoice detail page (#697)
- Each invoice now has its own page inside the portal. It shows the header, all invoice lines, taxes, and totals.
- You can download the invoice PDF directly through the portal. You no longer need to go to the Odoo portal.
- The invoice list has a new dashboard header and groups invoices into sections. It links to the new detail page.
- Invoice lines link to the service instance they bill for.
- The tax label now matches the label printed on the Odoo invoice.
- The "Pay" button still opens the Odoo portal for open invoices.
Stricter input validation (#693)
- The portal now rejects service configuration values that could inject extra configuration lines into the running service.
- Existing configuration values keep working. The check only applies to values that you add or change.
Other changes
- Service forms support a new "email" field type. It fills in the user's e-mail address by default.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Release 2026.09.22-0
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 58sBuild and Deploy Staging / build (push) Successful in 54sTests / test (push) Successful in 1m49sBuild and Deploy Production / deploy (push) Successful in 42sBuild and Deploy Staging / deploy-appuio (push) Successful in 7sreleased this
2026-09-22 08:41:35 +00:00 | 179 commits to main since this releaseRelease 2026.09.22-0
features
- Show the Alertmanager state of a control plane in the staff views (#684)
- Show the worker capacity of a control plane in the staff views (#687)
- Link into Grafana from the control plane views (#688)
- Publish the portal instance URL as a claim annotation, so alerts can link back into the portal (#666)
dependencies
- Update dependency psycopg to >=3.3.6 (#681)
- Update dependency djlint to >=1.46.2 (#682)
- Lock file maintenance (#683)
- Update https://github.com/renovatebot/github-action action to v46.3.3 (#685)
- Update https://github.com/astral-sh/setup-uv action to v10.2.0 (#686)
upgrade notes
- One new database migration:
core.0070_controlplane_cluster_id. Runmigrateon deploy. - New optional setting
SERVALA_GRAFANA_URL(defaulthttp://grafana.servala.internal/). It builds the Grafana deep links. The links only work once aControlPlanehas itscluster_idset by staff. - New optional setting
SERVALA_PORTAL_BASE_URL(default empty). Without it the portal does not write the instance URL annotation on claims.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Release 2026.09.18-0
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 56sBuild and Deploy Staging / build (push) Successful in 57sTests / test (push) Successful in 1m40sBuild and Deploy Production / deploy (push) Successful in 32sBuild and Deploy Staging / deploy-appuio (push) Successful in 8sreleased this
2026-09-18 15:18:45 +00:00 | 202 commits to main since this releaseRelease 2026.09.18-0
features
- Self-service restore of a backup into a new instance, configurable per service definition and gated behind the organization admin role (#678)
- Staff can view and set the Odoo trial window on an organization, including a fix button for a drifted window (#665)
- Plausible funnel goals and storage-free attribution, with UTM names matched case-insensitively against Odoo (#673)
- Pending-approval tickets now carry the billing data that was submitted (#680)
UI/UX
- Archived organizations are flagged on the staff detail page (#665)
- The tenant-view link moved above the card on the staff instance detail page (#665)
bug
- Storage stays billed while an instance is paused, so unpausing restores the pre-pause volume count (#660)
- Odoo is written only after Postgres has committed, which prevents orphaned Odoo records when a request fails (#521)
- Odoo trouble no longer fails a request or flags legacy rows (#521)
- Line breaks now survive the trip to the Odoo helpdesk
internal
- Odoo is mocked throughout the test suite and real calls are forbidden (#665)
- Trial-end POST tests no longer expire with the calendar (#674)
- Renovate rebases dependency PRs when they fall behind main (#675)
- New hack/check-odoo-permissions.py script to verify Odoo access rights
dependencies
- Update dependency django-allauth to >=65.19.4 (#679)
- Update dependency urllib3 to >=2.8.0 (#677)
- Lock file maintenance (#672)
- Update dependency pyjwt to >=2.14.0 (#670)
- Update dependency sentry-sdk to >=2.69.2 (#676)
- Update dependency django-allauth to >=65.19.3 (#668)
- Update dependency coverage to >=7.16.1 (#671)
- Update https://github.com/renovatebot/github-action action to v46.3.1 (#669)
- Update https://github.com/astral-sh/setup-uv action to v10.1.0 (#667)
- Update dependency djlint to >=1.46.1 (#661)
- Update dependency sentry-sdk to >=2.69.1 (#662)
- Update dependency psycopg2-binary to >=2.9.13 (#663)
- Update dependency flake8-bugbear to v26 (#664)
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Release 2026.09.07-1
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 55sBuild and Deploy Staging / build (push) Successful in 52sBuild and Deploy Production / deploy (push) Successful in 28sTests / test (push) Successful in 1m25sBuild and Deploy Staging / deploy-appuio (push) Successful in 7sreleased this
2026-09-07 06:13:34 +00:00 | 278 commits to main since this releaseRelease 2026.09.07-1
- bump version 2026.09.07-0 -> 2026.09.07-1
- fix: skip audit stamps for organizations that no longer exist
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Release 2026.09.07-0
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 52sBuild and Deploy Staging / build (push) Successful in 50sTests / test (push) Successful in 1m22sBuild and Deploy Production / deploy (push) Successful in 31sBuild and Deploy Staging / deploy-appuio (push) Successful in 7sreleased this
2026-09-07 06:01:13 +00:00 | 280 commits to main since this releaseRelease 2026.09.07-0
- bump version 2026.08.21-0 -> 2026.09.07-0
- Merge pull request 'fix(deps): update dependency django-allauth to >=65.19.2' (#656) from renovate/django-allauth-65.x into main
- fix(deps): update dependency django-allauth to >=65.19.2
- Merge pull request 'fix(deps): update dependency django to v6.1.1' (#655) from renovate/django-6.x into main
- Merge pull request 'fix(deps): update dependency psycopg to >=3.3.5' (#657) from renovate/psycopg-3.x into main
- Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.2.6' (#658) from renovate/https-github.com-renovatebot-github-action-46.x into main
- Merge pull request 'chore(deps): update dependency djlint to >=1.45.2' (#659) from renovate/djlint-1.x into main
- chore(deps): update https://github.com/renovatebot/github-action action to v46.2.6
- Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.2.5' (#654) from renovate/https-github.com-renovatebot-github-action-46.x into main
- chore(deps): update dependency djlint to >=1.45.2
- fix(deps): update dependency django to v6.1.1
- chore(deps): update https://github.com/renovatebot/github-action action to v46.2.5
- beta banner is gone for good
- Merge pull request 'chore(deps): lock file maintenance' (#644) from renovate/lock-file-maintenance into main
- Merge pull request 'fix(deps): update dependency sentry-sdk to >=2.68.1' (#645) from renovate/sentry-sdk-2.x into main
- Merge pull request 'fix(deps): update dependency cryptography to >=50.0.1' (#647) from renovate/cryptography-50.x into main
- Merge pull request 'chore(deps): update dependency isort to v9' (#648) from renovate/isort-9.x into main
- Merge pull request 'chore(deps): update dependency coverage to >=7.16.0' (#650) from renovate/coverage-7.x into main
- Merge pull request 'Audit Log Frontend per Organization' (#651) from audit-log-frontend into main
- fix: make the audit log swallows and its ordering hold up
- feat: note on the audit log that names are resolved at read time
- feat: record CR spec changes in the audit log
- docs: plan for recording CR spec changes in the audit log
- fix: name the service on every instance event
- feat: name the service and link the instance in audit log sentences
- fix: audit log actor attribution and active category tab
- feat: audit pause, limit profile and validity period changes
- fix: address audit log review findings
- feat: organization audit log page
- feat: stamp audit log entries onto organizations
- docs: organization audit log design and implementation plan
- fix: validate storage and replica bounds in create form and price preview
- configure allowed s3 endpoints for backup reveal
- Merge pull request 'Backup Content Access and Download' (#649) from backup-access into main
- feat: direct backup bucket access with credential reveal
- docs: backup download implementation plan
- docs: backup content access and download design
- fix(deps): update dependency psycopg to >=3.3.5
- chore(deps): update dependency coverage to >=7.16.0
- chore(deps): update dependency isort to v9
- fix(deps): update dependency cryptography to >=50.0.1
- fix(deps): update dependency sentry-sdk to >=2.68.1
- Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.2.3' (#643) from renovate/https-github.com-renovatebot-github-action-46.x into main
- chore(deps): update https://github.com/renovatebot/github-action action to v46.2.4
- chore(deps): lock file maintenance
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Release 2026.08.21-0
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 56sBuild and Deploy Staging / build (push) Successful in 57sTests / test (push) Successful in 1m21sBuild and Deploy Production / deploy (push) Successful in 33sBuild and Deploy Staging / deploy-appuio (push) Successful in 8sreleased this
2026-08-21 07:26:53 +00:00 | 325 commits to main since this releaseRelease 2026.08.21-0
- bump version 2026.08.20-1 -> 2026.08.21-0
- Merge pull request 'fix: treat preserve-unknown-fields as a free-form map' (#637) from fix/preserve-unknown-fields-paths into main
- fix: treat preserve-unknown-fields as a free-form map
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Release 2026.08.20-1
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 1m2sBuild and Deploy Staging / build (push) Successful in 1m6sTests / test (push) Successful in 1m23sBuild and Deploy Production / deploy (push) Successful in 3m0sBuild and Deploy Staging / deploy-appuio (push) Successful in 8sreleased this
2026-08-20 14:18:27 +00:00 | 328 commits to main since this releaseRelease 2026.08.20-1
- bump version 2026.08.20-0 -> 2026.08.20-1
- fix: treat a blank backup field path as no path
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Release 2026.08.20-0
StableAll checks were successfulBuild and Deploy Production / build (push) Successful in 1m7sBuild and Deploy Staging / build (push) Successful in 1m4sTests / test (push) Successful in 1m21sBuild and Deploy Production / deploy (push) Successful in 3m13sBuild and Deploy Staging / deploy-appuio (push) Successful in 8sreleased this
2026-08-20 13:57:21 +00:00 | 330 commits to main since this releaseRelease 2026.08.20-0
- bump version 2026.07.15-0 -> 2026.08.20-0
- Merge pull request 'Backup Listing' (#631) from feat/backup-visibility into main
- fix: make the row-2 columns actually share a height
- style: give backup information a clearer presentation
- docs: add a Codey backup_config example, drop a false empty state
- fix: tidy the backup list presentation
- fix: align dotted-path reads with the schema-aware resolver
- docs: add backup visibility design and implementation plan
- test: cover remaining backup branches
- feat: show backup information on the instance detail page
- feat: assemble backup data for the instance detail view
- feat: read the configured backup policy from an instance spec
- feat: read backup objects from Kubernetes
- feat: expose backup_config in the ServiceDefinition admin
- feat: add ServiceDefinition.backup_config
- feat: add humanize_cron for backup schedule display
- refactor: move get_nested into core.utils.data
- Merge pull request 'fix: resolve CRD property names that contain dots' (#636) from fix/dotted-crd-property-keys into main
- fix: harden CRD dotted path resolution
- fix: resolve CRD property names that contain dots
- Merge pull request 'chore(deps): update https://github.com/astral-sh/setup-uv action to v10' (#633) from renovate/https-github.com-astral-sh-setup-uv-10.x into main
- Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.2.2' (#632) from renovate/https-github.com-renovatebot-github-action-46.x into main
- chore(deps): update https://github.com/astral-sh/setup-uv action to v10
- chore(deps): update https://github.com/renovatebot/github-action action to v46.2.2
- fix duplicate Open button on instance detail page
- fix all djlint findings and align formatter tooling
- upgrade dependencies and improve some tests
- Merge pull request 'chore(deps): update dependency coverage to >=7.15.4' (#620) from renovate/coverage-7.x into main
- Merge pull request 'fix(deps): update dependency sentry-sdk to >=2.68.0' (#625) from renovate/sentry-sdk-2.x into main
- Merge pull request 'fix(deps): update dependency django-scopes to >=2.1.0' (#629) from renovate/django-scopes-2.x into main
- fix(deps): update dependency sentry-sdk to >=2.68.0
- chore(deps): update dependency coverage to >=7.15.4
- Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.1.20' (#627) from renovate/https-github.com-renovatebot-github-action-46.x into main
- chore(deps): update https://github.com/renovatebot/github-action action to v46.1.21
- fix(deps): update dependency django-scopes to >=2.1.0
- Merge pull request 'chore(deps): update https://data.forgejo.org/actions/setup-node action to v7' (#626) from renovate/https-data.forgejo.org-actions-setup-node-7.x into main
- support instances parameter in provisioning deep links
- chore(deps): update https://data.forgejo.org/actions/setup-node action to v7
- support majorversion field for catalog api
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download