RavenDB-26535 Kubernetes Operator: Release Process#30
Closed
poissoncorp wants to merge 8 commits into
Closed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR brings up the operator's CD. Clicking "Prepare Release" in the Actions tab + merging the auto-generated PR is enough to ship a multi-arch image, GitHub Release, and OLM bundle. The flow is complex and error-prone (mostly because of the OLM stuff - every new field needs tags, etc.), so there are plenty of opportunities for manual mistakes - that's why I've decided to go for a standardized process supplied by CD automation.
Three-phase release pipeline:
pre-release-reportskill - executed by user AI agent, makes sure CSV and samples for OLDM are right, outputs pre-release reportprepare-release.yml- bumps versions, regenerates OLM bundle, updates Helm, opens PRrelease.yml- builds, tests, and publishes Docker images, and drafts a release tag with autogenerated release notesOLM bundle is generated now:
+operator-sdk:csv:customresourcedefinitions: markers across api/v1/*.godrive the CSV'sspecDescriptorsandstatusDescriptors. Only new fields require manual marker work - handled by skill.config/manifests/bases/...csv.yaml- operator-sdk preserves it across regeneration.seds:containerImageannotation injection (operator-sdk doesn't emit it; OperatorHub uses it for catalog display) andnodes[0].field→nodes[].field(OLM convention for "applies to all array elements").bundle-relocatemake target moves operator-sdk's flat output into the repo's nested per-version layout.CI gates and drift detection:
lint-workflows.yml-actionlinton every PR touching.github/workflows/- nice to haverelease-dryrun.yml- biweekly runs prepare + release withdry_run=true. Opens a ci-broken issue on failure so we know if the pipeline rotted before a real release needs it - another nice to have assuring my pipeline is healthy, so im able to fix it before the actual release :)make verify-samples- verifiesconfig/samples/*againstapi/v1types as the first step of prepare-release. Catches sample bugs when CRD fields are renamed. Lives intest/samples/in its own package, so it runs withoutenvtest.Bundle prerequisites that were broken on main:
config/samples/kustomization.yamlreferenced a non-existent file (leftover from the v1 migration). Fixed.bundle-buildhad a broken docker context.So, the release process is:
prepare-releasejob.bundle/ravendb-operator/<version>/→ fork'soperators/ravendb-operator/<version>/. Copybundle/ravendb-operator/ci.yamlif changed.