• 2026.07.15-0 89aa0ac046

    Release 2026.07.15-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 58s
    Build and Deploy Staging / build (push) Successful in 57s
    Tests / test (push) Successful in 1m15s
    Build and Deploy Production / deploy (push) Successful in 34s
    Build and Deploy Staging / deploy-appuio (push) Successful in 6s
    Stable

    tobru released this 2026-07-15 05:34:09 +00:00 | 6 commits to main since this release

    Release 2026.07.15-0

    • bump version 2026.07.07-0 -> 2026.07.15-0
    • Merge pull request 'chore(deps): update dependency coverage to >=7.15.1' (#609) from renovate/coverage-7.x into main
    • Merge pull request 'chore(deps): update https://github.com/renovatebot/github-action action to v46.1.19' (#616) from renovate/https-github.com-renovatebot-github-action-46.x into main
    • Merge pull request 'fix(deps): update dependency sentry-sdk to >=2.65.0' (#617) from renovate/sentry-sdk-2.x into main
    • fix(deps): update dependency sentry-sdk to >=2.65.0
    • chore(deps): update https://github.com/renovatebot/github-action action to v46.1.19
    • chore(deps): update dependency coverage to >=7.15.1
    • Merge pull request 'Consistent Date and Time Display' (#611) from design/consistent-datetime-display into main
    • feat(frontend): render all dates/times in the viewer's local time
    • docs: design and plan for consistent local-time display
    • Merge pull request 'Fix Pod Log Display and Add Colors' (#612) from fix/pod-logs-bytes-decode into main
    • fix autoescape
    • Merge pull request 'Update dependency djlint to >=1.40.6' (#614) from renovate/djlint-1.x into main
    • Merge pull request 'Update dependency kubernetes to >=36.0.3,<37' (#615) from renovate/kubernetes-36.x into main
    • Merge pull request 'Warning-gated Org Deletion' (#607) from design/warning-gated-deletion into main
    • Update dependency kubernetes to >=36.0.3,<37
    • Update dependency djlint to >=1.40.6
    • fix(core): close warning-gated deletion race and billing gaps
    • fix(email): link deletion confirmation to general support page, not the archived org's
    • fix(staff): resolve absolute support URLs in lifecycle email previews
    • style(staff): wrap long lines in lifecycle email preview modal
    • feat(staff): broaden lifecycle timeline to validity orgs with email preview modals
    • feat(dev): per-worktree dev server port and database helpers
    • refactor(core): extract reusable email builders into notifications module
    • Merge pull request 'Update dependency django-filter to v26' (#608) from renovate/django-filter-26.x into main
    • Merge pull request 'Update dependency djlint to >=1.40.5' (#610) from renovate/djlint-1.x into main
    • fix(staff): accurate scheduled-deletion date and reminder states in lifecycle
    • feat(staff): show trial & deletion lifecycle on organization detail
    • test(reminders): cover deletion_warning key stays unwritten on SMTP failure
    • test: align odoo trial-window assertions with effective_deletion_date
    • fix(core): require is_expired in is_ready_for_deletion gate (extension race belt)
    • feat(cleanup): log expired orgs stuck awaiting a deletion warning
    • feat(cleanup): record deletion_confirmation in reminders json
    • feat(cleanup): gate deletion on recorded warning + business-day buffer
    • fix(reminders): record deletion_warning key only after a successful send
    • feat(reminders): clear stale deletion warning when org is extended
    • feat(reminders): gating deletion warning at expiry with BCC and Odoo push
    • feat(logs): render ANSI color codes as HTML in the pod log viewer
    • fix(core): guard is_ready_for_deletion against missing effective_deletion_date
    • fix(logs): decode raw pod log bytes instead of str(bytes) wrapper
    • feat(core): odoo trial_end tracks effective_deletion_date
    • feat(core): add is_ready_for_deletion gate property
    • feat(core): add deletion_warning_sent_at and effective_deletion_date
    • feat(core): add _add_business_days helper
    • feat(settings): add SERVALA_DELETION_WARNING_BCC
    • docs: implementation plan for warning-gated deletion
    • fix(frontend): render instance ID as HTML in delete confirmation help text
    • Update dependency djlint to >=1.40.5
    • Update dependency django-filter to v26
    • Merge pull request 'Update dependency djlint to >=1.40.4' (#604) from renovate/djlint-1.x into main
    • Merge pull request 'Update dependency django to v6.0.7' (#603) from renovate/django-6.x into main
    • docs: design for warning-gated org deletion
    • Merge pull request 'Fix k8s API client timeout' (#606) from fix/k8s-api-client-timeout-injection into main
    • Merge pull request 'Update https://github.com/astral-sh/setup-uv action to v8.3.2' (#605) from renovate/https-github.com-astral-sh-setup-uv-8.x into main
    • fix(k8s): inject default timeout when SDK passes _request_timeout=None
    • allow to copy prod db
    • Update https://github.com/astral-sh/setup-uv action to v8.3.2
    • Update dependency djlint to >=1.40.4
    • Update dependency django to v6.0.7
    Downloads
  • 2026.07.07-0 f391c3d1fb

    Release 2026.07.07-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 1m0s
    Build and Deploy Staging / build (push) Successful in 1m0s
    Tests / test (push) Successful in 1m21s
    Build and Deploy Production / deploy (push) Successful in 2m59s
    Build and Deploy Staging / deploy-appuio (push) Successful in 7s
    Stable

    tobru released this 2026-07-07 13:30:14 +00:00 | 65 commits to main since this release

    Release 2026.07.07-0

    • gitignore local .envrc
    • bump version 2026.07.02-1 -> 2026.07.07-0
    • feat(staff): refine organization detail view
    • temp disable deploy job to talos
    • Merge pull request 'Add Talos deployment target alongside OpenShift' (#599) from feat/talos-deployment-target into main
    • feat(deploy): add Talos deployment target alongside OpenShift
    • Merge pull request 'Service Catalog Read-Only API for Documentation' (#602) from service-catalog-ep into main
    • document missing env vars
    • document new env vars
    • feat(api): add read-only service catalog endpoint
    • service catalog endpoint design
    • fix(errors): render error pages without DB-hitting context processors
    • add staff links to helpdesk message
    • fix(fqdn): submit custom domain verbatim instead of appending managed suffix
    • feat(emails): point notification emails to the support page
    • Merge pull request 'Automated Trial Cleanup with Grace Period' (#583) from trial-cleanup-grace-period into main
    • just fmt
    • fix(core): surface trial-cleanup teardown failures for retry
    • feat(deploy): run procrastinate worker as a sidecar in the portal pod
    • feat(core): run trial cleanup as a procrastinate periodic task
    • install required dep for procrastinate
    • feat(core): auto-clean expired trials with grace period
    • add non-tech summary
    • docs: refine trial cleanup with scale-down and human-friendly timing
    • docs: add trial cleanup grace period design and plan
    • Merge pull request 'Task Runner for Deferred or Periodic Tasks' (#597) from feature/task-runner into main
    • feat(core): configurable task crons, timestamped worker logs
    • fix(core): surface procrastinate logs on the console
    • fix(core): allow manual defer of periodic tasks
    • docs: document procrastinate background worker
    • feat(deploy): replace CronJobs with procrastinate worker
    • feat(core): add procrastinate task runner
    • feat(staff): add per-instance fix for K8s health findings
    • support git worktrees
    • Merge pull request 'Fixes from Automated Security Review' (#596) from security/review-fixes into main
    • fix(security): escape instance fields in support ticket HTML
    • fix(security): run best-effort schema validation on CRD spec data
    • fix(security): disable server-controlled hidden CRD form fields
    • fix(security): render JSON payloads via json_script instead of |safe
    • fix(security): bind invitation acceptance to the invited email
    • fix(security): constant-time comparison for OSB basic auth
    • fix(security): enable HSTS, SSL redirect and nosniff in prod
    • fix(security): set CSRF_COOKIE_SECURE alongside the session cookie
    • fix(security): scope invitation deletion to the request organization
    • fix(security): default SERVALA_ENVIRONMENT to production (fail-safe DEBUG)
    • fix(security): escape dynamic array widget hidden JSON value
    • fix(security): enforce delete permission on ServiceInstanceDeleteView
    • Merge pull request 'Update dependency djlint to >=1.40.3' (#591) from renovate/djlint-1.x into main
    • Merge pull request 'Resolve compute-plan size field names from CRD schema' (#593) from fix/compute-plan-size-field-names into main
    • Merge pull request 'Update https://github.com/renovatebot/github-action action to v46.1.18' (#594) from renovate/https-github.com-renovatebot-github-action-46.x into main
    • Merge pull request 'Update https://github.com/astral-sh/setup-uv action to v8.3.0' (#595) from renovate/https-github.com-astral-sh-setup-uv-8.x into main
    • Update https://github.com/astral-sh/setup-uv action to v8.3.0
    • Update https://github.com/renovatebot/github-action action to v46.1.18
    • Update dependency djlint to >=1.40.3
    • fix: resolve compute-plan size field names from CRD schema
    • Merge pull request 'Update dependency coverage to >=7.15.0' (#592) from renovate/coverage-7.x into main
    • Merge pull request 'Organization Approval' (#590) from feature/organization-approval into main
    • fix: make Odoo invoice-address lookup robust and cached
    • feat: friendlier approval emails and resolved existing billing address
    • feat: clearer Odoo search on approval card
    • feat: link existing Odoo records at approval for deduplication
    • docs: design for approval-time Odoo deduplication
    • feat: improve staff approval detail UI
    • feat: refine org approval UX (helpdesk html, picker, staff list)
    • Update dependency coverage to >=7.15.0
    • feat: require staff approval for new organizations
    • docs: add organization approval flow design and plan
    • don't display _HOSTS connection keys
    Downloads
  • 2026.07.02-1 cc273f582f

    Release 2026.07.02-1
    All checks were successful
    Build and Deploy Production / build (push) Successful in 56s
    Build and Deploy Staging / build (push) Successful in 1m1s
    Tests / test (push) Successful in 1m16s
    Build and Deploy Production / deploy (push) Successful in 21s
    Build and Deploy Staging / deploy (push) Successful in 8s
    Stable

    tobru released this 2026-07-02 08:51:58 +00:00 | 133 commits to main since this release

    Release 2026.07.02-1

    • bump version 2026.07.02-0 -> 2026.07.02-1
    • bump version 2026.06.30-0 -> 2026.07.02-0
    • Merge pull request 'Update dependency djlint to >=1.40.1' (#588) from renovate/djlint-1.x into main
    • Merge pull request 'Update dependency pillow to >=12.3.0' (#589) from renovate/pillow-12.x into main
    • Fix choice field validation for integer control plane enums
    • show filtered total in staff view
    • Update dependency pillow to >=12.3.0
    • Update dependency djlint to >=1.40.1
    • fix multiple container in pod log
    • Merge pull request 'Display location in dashboard of recent instances' (#587) from location-of-instance into main
    • display location in dashboard of recent instances
    • Bulk Finding Fix on Staff Views (#584)
    • Merge pull request 'Update dependency djlint to >=1.40.0' (#585) from renovate/djlint-1.x into main
    • Merge pull request 'Update dependency sentry-sdk to >=2.64.0' (#586) from renovate/sentry-sdk-2.x into main
    • Update dependency sentry-sdk to >=2.64.0
    • Update dependency djlint to >=1.40.0
    • reword the pricing disclaimer
    Downloads
  • 2026.06.30-0 b2ba535de6

    Release 2026.06.30-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 58s
    Build and Deploy Staging / build (push) Successful in 57s
    Tests / test (push) Successful in 1m12s
    Build and Deploy Production / deploy (push) Successful in 22s
    Build and Deploy Staging / deploy (push) Successful in 8s
    Stable

    tobru released this 2026-06-30 07:20:47 +00:00 | 150 commits to main since this release

    Release 2026.06.30-0

    • bump version 2026.06.23-0 -> 2026.06.30-0
    • Merge pull request 'Set Odoo payment term on the sale order' (#582) from odoo-payment-term-per-sale-order into main
    • Set Odoo payment term on the sale order
    • Merge pull request 'Allow overriding managed FQDN with a custom domain' (#581) from custom-fqdn-override into main
    • Allow overriding managed FQDN with a custom domain
    • Merge pull request 'Update dependency djlint to >=1.39.5' (#578) from renovate/djlint-1.x into main
    • Merge pull request 'Update https://github.com/renovatebot/github-action action to v46.1.17' (#579) from renovate/https-github.com-renovatebot-github-action-46.x into main
    • Merge pull request 'Add /support redirect to organization support form' (#580) from support-redirect into main
    • Add /support redirect to organization support form
    • Update https://github.com/renovatebot/github-action action to v46.1.17
    • Update dependency djlint to >=1.39.5
    • Merge pull request 'Scale price preview dynamically with replica count' (#575) from replica-dynamic-pricing into main
    • Render choice config on non-enum fields as a dropdown
    • Scale price preview dynamically with replica count
    • Merge pull request 'Surface an error when the CRD schema cannot be fetched' (#576) from surface-crd-schema-fetch-error into main
    • Surface an error when the CRD schema cannot be fetched
    • Merge pull request 'Handle Sale Order Pricelist in Origin and Organization' (#574) from odoo-pricelist-per-sale-order into main
    • Polish pricelist feature from review feedback
    • Manage Odoo pricelists per sale order
    • Merge pull request 'Link Odoo res.partner records from staff org billing entity' (#573) from billing-entity-links into main
    • Link Odoo res.partner records from staff org billing entity
    • Merge pull request 'Remove unused erp_reference field and clarify Odoo ID fields on BillingEntity' (#572) from remove-billingentity-erp-reference into main
    • Remove unused erp_reference field and clarify Odoo ID fields on BillingEntity
    • Merge pull request 'Update dependency djlint to >=1.39.4' (#571) from renovate/djlint-1.x into main
    • Merge pull request 'Manage Resource Request via Catalog API' (#570) from compute-requests-limits into main
    • Update dependency djlint to >=1.39.4
    • Lock catalog-managed admin fields read-only
    • Sync separate CPU/memory requests from catalog
    Downloads
  • 2026.06.23-0 55af7bbb09

    Release 2026.06.23-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 43s
    Build and Deploy Staging / build (push) Successful in 46s
    Tests / test (push) Successful in 57s
    Build and Deploy Production / deploy (push) Successful in 22s
    Build and Deploy Staging / deploy (push) Successful in 6s
    Stable

    tobru released this 2026-06-23 06:50:05 +00:00 | 178 commits to main since this release

    Release 2026.06.23-0

    • bump version 2026.06.09-0 -> 2026.06.23-0
    • constrain onboarding logo
    • Merge pull request 'Organization onboarding into origin with signed URL' (#525) from switch-onboarding into main
    • Merge pull request 'Update dependency coverage to >=7.14.3' (#568) from renovate/coverage-7.x into main
    • Merge pull request 'Add trial & decommission marker checks to staff Check Odoo' (#569) from odoo-check-trial-decommission-markers into main
    • Add trial & decommission marker checks to staff Check Odoo
    • enable pkce for keycloak authentication
    • Update dependency coverage to >=7.14.3
    • feat: signed onboarding for organization origins
    • broaden and unify organization name validation
    • organization origin onboarding design
    • Merge pull request 'Sync Trial and Decommissioning Markers to Odoo in Admin Command and Disambiguate organizations with shared names in selector' (#567) from odoo-sync-trial-decommission-markers into main
    • Disambiguate organizations with shared names in selector
    • Reconcile sale order trial & decommission markers in sync_odoo
    • Keep revealed connection credentials visible across HTMX polls
    • Merge pull request 'Sync organization trial period to Odoo sale order' (#566) from odoo-trial-period into main
    • Add per-organization trial validity override
    • Sync organization trial period to Odoo sale order
    • Merge pull request 'Set decommission_date on Odoo sale order when org is decommissioned' (#565) from org-decommissioning-odoo into main
    • Set decommission_date on Odoo sale order when org is decommissioned
    • Merge pull request 'Set external billing fields on Exoscale sale orders' (#558) from exoscale-so-config into main
    • Merge pull request 'Update dependency pytest to >=9.1.1' (#561) from renovate/pytest-9.x into main
    • Merge pull request 'Update dependency coverage to >=7.14.2' (#562) from renovate/coverage-7.x into main
    • Merge pull request 'Lock file maintenance' (#564) from renovate/lock-file-maintenance into main
    • Merge pull request 'Update https://data.forgejo.org/actions/checkout action to v7' (#560) from renovate/https-data.forgejo.org-actions-checkout-7.x into main
    • Merge pull request 'Update https://github.com/renovatebot/github-action action to v46.1.16' (#563) from renovate/https-github.com-renovatebot-github-action-46.x into main
    • Update https://github.com/renovatebot/github-action action to v46.1.16
    • Update dependency coverage to >=7.14.2
    • Update dependency pytest to >=9.1.1
    • Update https://data.forgejo.org/actions/checkout action to v7
    • Merge pull request 'Update dependency sentry-sdk to >=2.63.0' (#559) from renovate/sentry-sdk-2.x into main
    • Update dependency sentry-sdk to >=2.63.0
    • Set external billing fields on Exoscale sale orders
    • stop using playwright mcp
    • Small improvements to staff view (#557)
    • Merge pull request 'Remove the in-repo docs' (#550) from remove-docs into main
    • remove in-repo docs
    • Merge pull request 'Update dependency djlint to >=1.39.2' (#554) from renovate/djlint-1.x into main
    • Merge pull request 'Update dependency cryptography to v49' (#555) from renovate/cryptography-49.x into main
    • Merge pull request 'Update quay.io/appuio/oc Docker tag to v4.21' (#553) from renovate/quay.io-appuio-oc-4.x into main
    • Merge pull request 'Update dependency pytest to >=9.1.0' (#556) from renovate/pytest-9.x into main
    • Lock file maintenance
    • Update dependency pytest to >=9.1.0
    • Update dependency cryptography to v49
    • Update dependency djlint to >=1.39.2
    • Update quay.io/appuio/oc Docker tag to v4.21
    • Merge pull request 'Update https://github.com/renovatebot/github-action action to v46.1.15' (#552) from renovate/https-github.com-renovatebot-github-action-46.x into main
    • Update https://github.com/renovatebot/github-action action to v46.1.15
    Downloads
  • 2026.06.09-0 319e8feaf9

    Release 2026.06.09-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 45s
    Build and Deploy Staging / build (push) Successful in 44s
    Build and Deploy Antora Docs / build (push) Successful in 31s
    Tests / test (push) Successful in 58s
    Build and Deploy Production / deploy (push) Successful in 17s
    Build and Deploy Staging / deploy (push) Successful in 7s
    Build and Deploy Antora Docs / deploy (push) Successful in 5s
    Stable

    tobru released this 2026-06-09 15:35:58 +00:00 | 226 commits to main since this release

    Release 2026.06.09-0

    dependencies

    Downloads
  • 2026.06.01-0 5c61242466

    Release 2026.06.01-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 45s
    Build and Deploy Staging / build (push) Successful in 43s
    Build and Deploy Antora Docs / build (push) Successful in 1m6s
    Tests / test (push) Successful in 59s
    Build and Deploy Production / deploy (push) Successful in 18s
    Build and Deploy Staging / deploy (push) Successful in 7s
    Build and Deploy Antora Docs / deploy (push) Successful in 5s
    Stable

    tobru released this 2026-06-01 11:03:43 +00:00 | 239 commits to main since this release

    Release 2026.06.01-0

    bug

    • Fix discovery of Kubernetes CRD plural names (#540)

    dependencies

    • Update dependency django-allauth to >=65.18.0 (#541)
    • Lock file maintenance (#542)

    enhancement

    • Deep Links for Service Provisioning (#543)
    Downloads
  • 2026.05.29-1 857dee6cfc

    Release 2026.05.29-1
    All checks were successful
    Build and Deploy Production / build (push) Successful in 45s
    Build and Deploy Staging / build (push) Successful in 44s
    Build and Deploy Antora Docs / build (push) Successful in 1m24s
    Tests / test (push) Successful in 56s
    Build and Deploy Production / deploy (push) Successful in 24s
    Build and Deploy Staging / deploy (push) Successful in 6s
    Build and Deploy Antora Docs / deploy (push) Successful in 5s
    Stable

    tobru released this 2026-05-29 09:38:58 +00:00 | 253 commits to main since this release

    Release 2026.05.29-1

    No user visible changes

    Downloads
  • 2026.05.29-0 1d65b8a5c8

    Release 2026.05.29-0
    All checks were successful
    Build and Deploy Production / build (push) Successful in 42s
    Build and Deploy Production / build (release) Successful in 44s
    Build and Deploy Staging / build (push) Successful in 51s
    Build and Deploy Antora Docs / build (push) Successful in 1m20s
    Tests / test (push) Successful in 55s
    Build and Deploy Production / deploy (push) Successful in 28s
    Build and Deploy Production / deploy (release) Successful in 20s
    Build and Deploy Staging / deploy (push) Successful in 6s
    Build and Deploy Antora Docs / deploy (push) Successful in 4s
    Stable

    tobru released this 2026-05-29 07:58:22 +00:00 | 262 commits to main since this release

    Release 2026.05.29-0

    UI/UX

    • Make pricing in detail view toggleable (#537)

    dependencies

    • Update dependency kubernetes to v36 (#524)
    • Update dependency bumpver to >=2026.1132 (#527)
    • Update dependency django-filter to >=25.2 (#535)
    • Update dependency sentry-sdk to >=2.61.0 (#536)
    • Lock file maintenance (#529)
    • Update https://github.com/astral-sh/setup-uv action to v8 (#528)
    • Update dependency coverage to >=7.14.1 (#530)
    • Update dependency pyjwt to >=2.13.0 (#523)

    enhancement

    • Conditional Additional CSP Resources for Billing (#534)
    • Staff view for control planes (#532)
    • Staff admin page for organizations and instances (#526)
    Downloads
  • 2026.05.21-1 4652e93911

    Release 2026.05.21-1
    All checks were successful
    Build and Deploy Production / build (push) Successful in 43s
    Build and Deploy Production / build (release) Successful in 42s
    Build and Deploy Staging / build (push) Successful in 39s
    Build and Deploy Antora Docs / build (push) Successful in 28s
    Tests / test (push) Successful in 50s
    Build and Deploy Production / deploy (push) Successful in 19s
    Build and Deploy Production / deploy (release) Successful in 18s
    Build and Deploy Staging / deploy (push) Successful in 6s
    Build and Deploy Antora Docs / deploy (push) Successful in 4s
    Stable

    tobru released this 2026-05-21 14:31:48 +00:00 | 300 commits to main since this release

    Release 2026.05.21-1

    Uncategorized\n\n* No changes recorded

    Downloads