Skip to content

build(release): bump version to v0.9.0#409

Open
jason-lynch wants to merge 11 commits into
mainfrom
release/v0.9.0
Open

build(release): bump version to v0.9.0#409
jason-lynch wants to merge 11 commits into
mainfrom
release/v0.9.0

Conversation

@jason-lynch

Copy link
Copy Markdown
Member

Summary

This is the release PR for v0.9.0.

@codacy-production

codacy-production Bot commented Jun 16, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 1 medium

Results:
1 new issue

Category Results
Complexity 1 medium

View in Codacy

🟢 Metrics 0 complexity · 5 duplication

Metric Results
Complexity 0
Duplication 5

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@jason-lynch, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 37 minutes and 3 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a2efa9d8-89c7-4719-9c2c-6eef2d6583b7

📥 Commits

Reviewing files that changed from the base of the PR and between 659a6ac and 5174d9c.

📒 Files selected for processing (1)
  • server/internal/api/apiv1/post_init_handlers.go
📝 Walkthrough

Walkthrough

Bumps the API version from v0.8.1 to v0.9.0, creates the v0.9.0 release notes file, consolidates graduated unreleased changelog entries into CHANGELOG.md and docs/changelog.md, updates all version references across documentation, adds systemd service lifecycle management scripts for package upgrades and uninstallation, enhances MCP Knowledge Base validation, improves Postgres version query logic, and refactors Docker Swarm service orchestration to abstract config hashing and add pre-redeploy instance state refresh.

Changes

v0.9.0 Release Artifacts

Layer / File(s) Summary
Version bump and release notes consolidation
api/version.txt, changes/v0.9.0.md
api/version.txt bumped to v0.9.0. New changes/v0.9.0.md release notes file consolidates Added/Changed/Fixed entries covering Postgres minor update syncing, Debian systemd support, RPM/deb service lifecycle scriptlets, GID override configuration, Spock 5.0.9 compatibility, pg_hba_conf/pg_ident_conf database spec fields, MCP Knowledge Base search, replica version monitoring, and bug fixes.
Changelog entries and unreleased cleanup
CHANGELOG.md, docs/changelog.md
v0.9.0 section added to root and documentation changelogs with matching Added/Changed/Fixed bullet points. Unreleased YAML fragments graduated and removed from the unreleased directory.
Documentation version reference updates
docs/api/openapi.md, docs/api/reference.md, docs/installation/installation.md, docs/installation/mtls.md, docs/installation/systemd.md, docs/installation/upgrading.md, docs/development/e2e-tests.md
All v0.8.1 references updated to v0.9.0: container image tags in Docker Swarm/mTLS stack examples, systemd RPM/deb package version strings and installation command paths, OpenAPI offline spec URLs, Redoc source URL, Stack Definition Generator data-version, and Lima fixture test image tag.

Service Orchestration and Monitoring Enhancements

Layer / File(s) Summary
Config hash abstraction and MCP environment setup
server/internal/orchestrator/swarm/service_spec.go
Introduces generic serviceConfigHash helper replacing RAG-specific hash implementation. Embeds hash in PGEDGE_CONFIG_VERSION environment variable for MCP and RAG services to signal Docker Swarm TaskTemplate restarts when config or API keys change. Adds detailed documentation of Swarm restart triggers and SIGHUP reload behavior for bind-mounted MCP configuration.
Pre-redeploy service instance state refresh
server/internal/orchestrator/swarm/service_instance.go
ServiceInstanceResource.Update now performs best-effort database state refresh before redeploy, setting service instance UpdatedAt to running state. Logs warning if refresh fails but continues with redeploy to avoid blocking deployment.
Config hash and environment variable tests
server/internal/orchestrator/swarm/service_spec_test.go
Updated MCP container spec test to assert presence of PGEDGE_CONFIG_VERSION environment variable. RAG config-hash tests refactored to use serviceConfigHash instead of ragConfigHash. Added TestServiceContainerSpec_MCPHasConfigVersionEnv test verifying MCP config version hash computation and validating that changes to kb_database_host_path alter the hash value.
RPM/Deb service lifecycle management scripts
.goreleaser.yaml, packaging/deb/preremove.sh, packaging/rpm/preremove.sh
GoReleaser packaging configuration updated to define pre-remove scripts for both RPM and Deb packages under overrides. New packaging/deb/preremove.sh and packaging/rpm/preremove.sh scripts conditionally stop and disable pgedge-control-plane.service during package uninstallation, with error suppression to tolerate already-stopped services.
MCP Knowledge Base file path validation
server/internal/orchestrator/swarm/mcp_config_resource.go, server/internal/orchestrator/swarm/mcp_config_resource_test.go
Extends MCPConfigResource.checkKBFileExists to reject kb_host_path values that point to directories (not just missing paths), adding IsDir check with specific error message. Added test case TestMCPConfigResource_Create_KBPathIsDirectory to validate that directory paths fail appropriately during initial deployment.
Postgres version query normalization
server/internal/postgres/info.go
Refactors GetPostgresVersion() to compute a normalized X.Y version string from server_version_num numeric value using SQL arithmetic instead of relying on SHOW server_version, which includes Debian-specific build metadata. Improves consistency and portability of version reporting across different Postgres installations.

Resource Migration for Scheduled Jobs

Layer / File(s) Summary
Scheduler resource schemas for migration versions
server/internal/resource/migrations/schemas/v1_1_0/scheduler.go, server/internal/resource/migrations/schemas/v1_2_0/scheduler.go
Adds scheduler.job resource type definitions for both v1_1_0 and v1_2_0 migration schemas, including resource type constants, identifier constructors, and ScheduledJobResource structs with JSON mappings for job metadata and optional dependencies.
Migration logic and type transformation helpers
server/internal/resource/migrations/1_2_0.go
Implements scheduled job migration in Version_1_2_0.Run by calling migrateScheduledJob, updates updateDependencies to use generic transformType helper for consistent resource type remapping, introduces migrateScheduledJob method to unmarshal old attributes, transform dependency types, rebuild resources with new schema, and adds transformType/transformTypeString helpers for v1_1_0 to v1_2_0 type mapping.
Scheduled job migration tests and golden fixtures
server/internal/resource/migrations/1_2_0_test.go, server/internal/resource/migrations/golden_test/TestVersion_1_2_0/with_scheduled_backups.json
Adds "with scheduled backups" test case to TestVersion_1_2_0 with a v1_1_0_scheduledJob helper constructing a backup scheduler resource with cron/workflow/args wired to pgBackRest stanza dependencies. Creates comprehensive golden test fixture JSON defining the complete v1.2.0 resource state after migration including all dependent resources (etcd creds, Patroni cluster/member, pgBackRest config/stanza, Postgres certs, database instance/node, filesystem directory, scheduler job, swarm network, and Patroni config).

Poem

🐇 Hop hop, a new version takes flight!
v0.9.0 shines ever so bright —
Changelogs bundled and docs freshly spun,
Service scripts added for package-time fun,
Migrations migrating with scheduled jobs right! 🚀

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is incomplete. It provides only a minimal summary but lacks the required sections (Changes, Testing, Checklist, Notes for Reviewers) specified in the template. Expand the description to include Changes (bulleted list of modifications), Testing (test commands/steps), and complete the Checklist items to match the template structure.
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main purpose of the PR: bumping the version to v0.9.0 for the release.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v0.9.0

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/installation/systemd.md (1)

128-158: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Version mismatch between RPM and Deb installation sections.

The RPM package section (line 133) specifies VERSION="v0.9.0", but the Deb package section (line 151) still specifies VERSION="v0.8.0". For a consistent v0.9.0 release, both installation paths must target the same version.

🔧 Proposed fix for the Deb section
 # Set the version to install
-VERSION="v0.8.0"
+VERSION="v0.9.0"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/installation/systemd.md` around lines 128 - 158, The Deb Package
installation section has an outdated version variable that does not match the
RPM section. In the Deb Package section, change the VERSION variable from v0.8.0
to v0.9.0 to ensure both RPM and Deb installation paths are consistent and
target the same release version. This single-line change in the VERSION
assignment will automatically apply the correct version to all subsequent curl
and install commands in that section.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs/installation/systemd.md`:
- Around line 128-158: The Deb Package installation section has an outdated
version variable that does not match the RPM section. In the Deb Package
section, change the VERSION variable from v0.8.0 to v0.9.0 to ensure both RPM
and Deb installation paths are consistent and target the same release version.
This single-line change in the VERSION assignment will automatically apply the
correct version to all subsequent curl and install commands in that section.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7ebcf69f-f497-412f-95e1-7ddfd5152727

📥 Commits

Reviewing files that changed from the base of the PR and between 847bb00 and 00022bf.

⛔ Files ignored due to path filters (5)
  • api/apiv1/gen/control_plane/service.go is excluded by !**/gen/**
  • api/apiv1/gen/http/openapi.json is excluded by !**/gen/**
  • api/apiv1/gen/http/openapi.yaml is excluded by !**/gen/**
  • api/apiv1/gen/http/openapi3.json is excluded by !**/gen/**
  • api/apiv1/gen/http/openapi3.yaml is excluded by !**/gen/**
📒 Files selected for processing (23)
  • CHANGELOG.md
  • api/version.txt
  • changes/unreleased/Added-20260504-150235.yaml
  • changes/unreleased/Added-20260511-090000.yaml
  • changes/unreleased/Added-20260511-090010.yaml
  • changes/unreleased/Added-20260511-090020.yaml
  • changes/unreleased/Added-20260511-100000.yaml
  • changes/unreleased/Added-20260610-000000.yaml
  • changes/unreleased/Added-20260611-090000.yaml
  • changes/unreleased/Added-20260611-090010.yaml
  • changes/unreleased/Changed-20260504-152348.yaml
  • changes/unreleased/Fixed-20260611-090000.yaml
  • changes/unreleased/Fixed-20260611-090010.yaml
  • changes/unreleased/Fixed-20260616-150152.yaml
  • changes/v0.9.0.md
  • docs/api/openapi.md
  • docs/api/reference.md
  • docs/changelog.md
  • docs/development/e2e-tests.md
  • docs/installation/installation.md
  • docs/installation/mtls.md
  • docs/installation/systemd.md
  • docs/installation/upgrading.md
💤 Files with no reviewable changes (12)
  • changes/unreleased/Added-20260511-090010.yaml
  • changes/unreleased/Fixed-20260616-150152.yaml
  • changes/unreleased/Added-20260511-090020.yaml
  • changes/unreleased/Added-20260511-090000.yaml
  • changes/unreleased/Added-20260504-150235.yaml
  • changes/unreleased/Added-20260610-000000.yaml
  • changes/unreleased/Fixed-20260611-090010.yaml
  • changes/unreleased/Added-20260611-090000.yaml
  • changes/unreleased/Added-20260611-090010.yaml
  • changes/unreleased/Fixed-20260611-090000.yaml
  • changes/unreleased/Added-20260511-100000.yaml
  • changes/unreleased/Changed-20260504-152348.yaml

jason-lynch and others added 10 commits June 16, 2026 16:34
This version got out of sync because of the merge order between the
Debian support PR and the v0.8.1 patch release and, as a result, it
didn't get updated automatically by the release target. This one-time
manual change will get it back in sync.
On Debian, `server_version` contains build information, like:
`18.4 (Debian 18.4-1.trixie)`. This breaks our process that reconciles
the database spec with the observed Postgres version.

This commit fixes that issue by changing our `GetPostgresVersion` query
to use the integer representation of the server version, e.g. `180004`,
to compute the string representation. This is more reliable and behaves
consistently across host OSes.
We use `-y` in all the other `apt` and `dnf` commands so that they're
easy to copy and paste or translate into a script.
Putting the Control Plane deb file in /tmp makes it accessible to the
_apt user, so apt can avoid using the root user.
* fix: restart MCP container on KB config change

KB config changes (path, provider, model, key) had no effect after an
update: config.yaml is bind-mounted so SIGHUP-only reload kept the old
KB path, causing "file not found" / SQLite errors. Embed a
PGEDGE_CONFIG_VERSION hash in the MCP container env (like RAG) so a
config change forces a restart and re-initializes the KB.

Also refresh the service instance's UpdatedAt before an update redeploy
so the monitor doesn't briefly mark it failed during the restart.
The preremove scriptlets also get called during package upgrade. Our
preremove scriptlets stop and disable the control plane service, so we
only want them to run during a removal.

This commit resolves the issue by adding a condition that's only true
during removal. This condition is different for each package type, so
I've split this script into separate files like we do for the
postinstall script.
Adds a migration for scheduled job dependencies to use the new common
pgBackRest stanza resource type instead of the the old swarm one.
Adds validation to the backup database node endpoint to return a 400
error when the given node does not have a backup configuration.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants