Skip to content

docs: document the project release lifecycle#760

Open
VajiraPrabuddhaka wants to merge 1 commit into
openchoreo:mainfrom
VajiraPrabuddhaka:project-release-docs
Open

docs: document the project release lifecycle#760
VajiraPrabuddhaka wants to merge 1 commit into
openchoreo:mainfrom
VajiraPrabuddhaka:project-release-docs

Conversation

@VajiraPrabuddhaka

@VajiraPrabuddhaka VajiraPrabuddhaka commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Purpose

Documents the project release lifecycle introduced in openchoreo/openchoreo#3564 (ProjectType, ClusterProjectType, ProjectRelease, ProjectReleaseBinding, and the extended Project with spec.type / spec.parameters) so platform engineers and developers can onboard end-to-end.

Follows the multi-surface treatment used for the resource abstractions docs (#644): concepts amended in place, one guide per audience, and per-CRD API reference pages.

Approach

  • Platform engineer guide (platform-engineer-guide/project-types.md): authoring (Cluster)ProjectTypes, the cell-namespace mandate (${metadata.namespace}, NamespaceMissing), parameters / environmentConfigs schemas, CEL validations, the template CEL surface, and includeWhen / forEach
  • Developer guide (developer-guide/deploying-applications/project-releases.md): setting Project.spec.type and parameters, how releases are auto-cut as <project>-<hash>, client-created bindings with one-time pin seeding, promotion via occ project deploy --to / Backstage / kubectl / GitOps, rollback, and binding conditions
  • API reference: new pages for ProjectType, ClusterProjectType, ProjectReleaseBinding (platform) and ProjectRelease (runtime, with Immutability and Lifecycle sections mirroring ResourceRelease)
  • Concepts: project-level release chain and binding sections in platform-abstractions / developer-abstractions / resource-relationships, and the explicit cell-namespace ownership model in runtime-model
  • Updates: Project API reference and the Creating a Project guide now cover the required, immutable spec.type, spec.parameters, status.latestRelease, and occ project scaffold
  • Registered the five new pages in sidebars.ts

The docs describe the shipped v1 behavior only: ProjectRelease snapshots the type and parameters (no component/resource release pinning), and ProjectReleaseBinding owns the cell namespace and applies the project-type resources (no fan-out).

Related Issues

Resolves openchoreo/openchoreo#3808
Part of epic openchoreo/openchoreo#3564

Checklist

  • Updated sidebars.ts if adding a new documentation page
  • Run npm run start to preview the changes locally
  • Run npm run build to ensure the build passes without errors
  • Verified all links are working (no broken links)
  • This PR contains AI generated content

Remarks

While verifying the deletion flow against the controller code: the project cleanup finalizer removes the project's Components, Resources, and ProjectReleaseBindings, but does not GC ProjectReleases (the Resource finalizer does GC its ResourceReleases). The Lifecycle section is worded to match the shipped behavior; if the asymmetry is unintentional it may deserve an upstream issue.

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The documentation introduces the ProjectType, ProjectRelease, and ProjectReleaseBinding lifecycle, adds authoring and developer deployment guides, expands Project and API references, and links the new pages into the Docusaurus sidebars.

Changes

Project release documentation

Layer / File(s) Summary
Conceptual project release model
docs/concepts/*
Concept pages define ProjectType relationships, immutable releases, environment bindings, namespace ownership, deployment gating, and deletion cascades.
ProjectType authoring guidance
docs/platform-engineer-guide/project-types.md
The platform guide documents schemas, namespace requirements, CEL validation, templating context, conditional resources, iteration, and Project consumption.
Developer release and promotion workflow
docs/developer-guide/deploying-applications/project-releases.md, docs/developer-guide/projects-and-components/creating-a-project.md, sidebars.ts
Developer guidance covers Project configuration, release creation, environment bindings, promotion, rollback, environment configuration, readiness, and deployment sequencing.
Project release API references
docs/reference/api/application/project.md, docs/reference/api/platform/*, docs/reference/api/runtime/projectrelease.md, sidebars.ts
API references define the new resource shapes, examples, immutability rules, conditions, lifecycle behavior, and related resources.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related issues

  • Issue 3564 — The documentation covers the ProjectType → ProjectRelease → ProjectReleaseBinding lifecycle described by the epic.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The docs additions cover the requested concepts, platform guide, developer guide, and promotion model for #3808.
Out of Scope Changes check ✅ Passed The changes are documentation and sidebar updates directly aligned with the stated project release lifecycle scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title is concise and accurately summarizes the main documentation change.
Description check ✅ Passed The description follows the required template and includes purpose, related issues, and a completed checklist.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

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

⚠️ Outside diff range comments (1)
docs/reference/api/runtime/projectrelease.md (1)

1-118: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Format both API reference pages before merging.

The deployment pipeline reports Prettier formatting failures in these newly added files. Run Prettier on both files and rerun the formatting check.

  • docs/reference/api/runtime/projectrelease.md#L1-L118: apply the repository’s Prettier formatting.
  • docs/reference/api/platform/projectreleasebinding.md#L1-L154: apply the repository’s Prettier formatting.
🤖 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/reference/api/runtime/projectrelease.md` around lines 1 - 118, Apply the
repository’s Prettier formatting to docs/reference/api/runtime/projectrelease.md
(lines 1-118) and docs/reference/api/platform/projectreleasebinding.md (lines
1-154), then rerun the formatting check to verify both API reference pages pass.

Source: Pipeline failures

🧹 Nitpick comments (1)
docs/developer-guide/deploying-applications/project-releases.md (1)

144-144: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consistency of the cell namespace placeholder format.

In project-types.md (lines 18, 196), the cell namespace format is documented as dp-{ns}-{project}-{env}-{hash}. Here, it is written as dp-{namespace}-{project}-{environment}-{hash}. Consider using a consistent format across the documentation pages to prevent confusion.

📝 Proposed fix
-The binding owns the project's data-plane namespace for its environment (named `dp-{namespace}-{project}-{environment}-{hash}` and surfaced on `status.namespace`). It creates the namespace, applies the resources rendered from the project type, and reports readiness through conditions:
+The binding owns the project's data-plane namespace for its environment (named `dp-{ns}-{project}-{env}-{hash}` and surfaced on `status.namespace`). It creates the namespace, applies the resources rendered from the project type, and reports readiness through conditions:
🤖 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/developer-guide/deploying-applications/project-releases.md` at line 144,
Update the cell namespace placeholder in the deploying applications
documentation to use the same abbreviated format as project-types.md:
dp-{ns}-{project}-{env}-{hash}. Keep the surrounding description and
status.namespace reference unchanged.
🤖 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.

Inline comments:
In `@docs/concepts/platform-abstractions.md`:
- Around line 150-152: Update the ProjectReleaseBinding documentation to state
that environmentConfigs are validated against the inlined type schema from the
pinned ProjectRelease snapshot, not the live ProjectType schema, so validation
remains fixed for existing bindings.

In `@docs/platform-engineer-guide/project-types.md`:
- Around line 254-258: Normalize the Markdown table formatting in the syntax
table, including column spacing and alignment, to match the repository’s
Prettier output. Verify the change by running the repository’s Prettier check.
- Around line 161-163: Update the Parameters documentation to state that
Project.spec.parameters is required and immutable, removing the claim that
changing it creates a new release. Document the supported workflow for changing
parameters, including creating a new Project or using the established
replacement/versioning process, while keeping the EnvironmentConfigs guidance
unchanged.

In `@docs/reference/api/platform/projectreleasebinding.md`:
- Around line 38-39: Update the projectRelease field description in the API
reference to clarify that an unset binding remains pending only until a latest
release exists; once available, the Project controller automatically populates
spec.projectRelease with that release, while it remains pending when no release
exists.

---

Outside diff comments:
In `@docs/reference/api/runtime/projectrelease.md`:
- Around line 1-118: Apply the repository’s Prettier formatting to
docs/reference/api/runtime/projectrelease.md (lines 1-118) and
docs/reference/api/platform/projectreleasebinding.md (lines 1-154), then rerun
the formatting check to verify both API reference pages pass.

---

Nitpick comments:
In `@docs/developer-guide/deploying-applications/project-releases.md`:
- Line 144: Update the cell namespace placeholder in the deploying applications
documentation to use the same abbreviated format as project-types.md:
dp-{ns}-{project}-{env}-{hash}. Keep the surrounding description and
status.namespace reference unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5d72a7cd-f280-4c2c-bf2c-9bafc3b47aa0

📥 Commits

Reviewing files that changed from the base of the PR and between 52b9a67 and d8dd29e.

📒 Files selected for processing (13)
  • docs/concepts/developer-abstractions.md
  • docs/concepts/platform-abstractions.md
  • docs/concepts/resource-relationships.md
  • docs/concepts/runtime-model.md
  • docs/developer-guide/deploying-applications/project-releases.md
  • docs/developer-guide/projects-and-components/creating-a-project.md
  • docs/platform-engineer-guide/project-types.md
  • docs/reference/api/application/project.md
  • docs/reference/api/platform/clusterprojecttype.md
  • docs/reference/api/platform/projectreleasebinding.md
  • docs/reference/api/platform/projecttype.md
  • docs/reference/api/runtime/projectrelease.md
  • sidebars.ts

Comment on lines +150 to +152
Like the other bindings, a ProjectReleaseBinding carries per-environment configuration. Values supplied through its
`environmentConfigs` are validated against the schema declared on the project type, allowing the same release to run
with different quotas or policies in each environment while the snapshot itself remains unchanged.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Document validation against the pinned release snapshot.

ProjectReleaseBinding must validate environmentConfigs against the inlined type schema in its pinned ProjectRelease. Referring to the live ProjectType suggests later ProjectType edits can change validation for an existing binding.

🤖 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/concepts/platform-abstractions.md` around lines 150 - 152, Update the
ProjectReleaseBinding documentation to state that environmentConfigs are
validated against the inlined type schema from the pinned ProjectRelease
snapshot, not the live ProjectType schema, so validation remains fixed for
existing bindings.

Comment thread docs/platform-engineer-guide/project-types.md
Comment thread docs/reference/api/platform/projectreleasebinding.md
- Add the Authoring ProjectTypes platform engineer guide covering the
  namespace mandate, schemas, CEL validations, and the template surface
- Add the Project Releases developer guide covering how releases are
  cut, client-created bindings, promotion, rollback, and conditions
- Add API reference pages for ProjectType, ClusterProjectType,
  ProjectRelease, and ProjectReleaseBinding
- Extend the concepts pages with the project-level release chain and
  the cell-namespace ownership model
- Update the Project API reference and Creating a Project guide for the
  required, immutable spec.type and spec.parameters
- Register the new pages in the sidebar

Part of openchoreo/openchoreo#3808

Signed-off-by: VajiraPrabuddhaka <vajiraprabuddhaka@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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.

Inline comments:
In `@docs/platform-engineer-guide/project-types.md`:
- Around line 161-163: Align all listed documentation sites with the immutable
Project.spec.parameters contract: in
docs/platform-engineer-guide/project-types.md:161-163 and :228-228,
docs/developer-guide/deploying-applications/project-releases.md:53-57,
docs/concepts/platform-abstractions.md:304-306,
docs/concepts/resource-relationships.md:150-153, and
docs/reference/api/runtime/projectrelease.md:12 and :103-107, state that
ProjectType snapshot changes create ProjectReleases, remove claims that
parameter edits trigger releases, and document the supported
replacement/versioning workflow for changed parameters while preserving the
distinction that existing releases remain unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9f81d95c-6334-4b45-a8c6-9fca13a71f26

📥 Commits

Reviewing files that changed from the base of the PR and between d8dd29e and d20a7b4.

📒 Files selected for processing (13)
  • docs/concepts/developer-abstractions.md
  • docs/concepts/platform-abstractions.md
  • docs/concepts/resource-relationships.md
  • docs/concepts/runtime-model.md
  • docs/developer-guide/deploying-applications/project-releases.md
  • docs/developer-guide/projects-and-components/creating-a-project.md
  • docs/platform-engineer-guide/project-types.md
  • docs/reference/api/application/project.md
  • docs/reference/api/platform/clusterprojecttype.md
  • docs/reference/api/platform/projectreleasebinding.md
  • docs/reference/api/platform/projecttype.md
  • docs/reference/api/runtime/projectrelease.md
  • sidebars.ts
🚧 Files skipped from review as they are similar to previous changes (7)
  • docs/reference/api/platform/clusterprojecttype.md
  • docs/reference/api/platform/projecttype.md
  • docs/concepts/runtime-model.md
  • docs/developer-guide/projects-and-components/creating-a-project.md
  • docs/concepts/developer-abstractions.md
  • docs/reference/api/application/project.md
  • sidebars.ts

Comment on lines +161 to +163
**Parameters** capture values supplied by the project author on `Project.spec.parameters`. They are validated against the `parameters` schema and inlined into every ProjectRelease snapshot, so the same values apply wherever that release is deployed. Changing a parameter on the Project cuts a new release; existing releases are never modified.

**EnvironmentConfigs** capture per-environment values supplied on `ProjectReleaseBinding.spec.environmentConfigs`. They are validated against the schema on the pinned release by the binding controller, and validation failures surface through the binding's `status.conditions`. Because they live on the binding, the same release deployed to dev and production can use different quotas, labels, or feature flips while the snapshot itself is unchanged.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Align all release documentation with immutable project parameters.

The documentation consistently claims that editing Project.spec.parameters creates a new ProjectRelease, but that field is required to be immutable. State that ProjectType snapshot changes create releases, and document the supported replacement/versioning workflow for changed parameters.

  • docs/platform-engineer-guide/project-types.md#L161-L163: remove the parameter-change release trigger and explain the immutable parameter contract.
  • docs/platform-engineer-guide/project-types.md#L228-L228: remove the duplicate claim that parameter changes create releases.
  • docs/developer-guide/deploying-applications/project-releases.md#L53-L57: remove parameter edits from the automatic release triggers.
  • docs/concepts/platform-abstractions.md#L304-L306: describe only ProjectType changes as producing later snapshots.
  • docs/concepts/resource-relationships.md#L150-L153: update the ProjectRelease lifecycle description.
  • docs/reference/api/runtime/projectrelease.md#L12-L12: correct the controller behavior summary.
  • docs/reference/api/runtime/projectrelease.md#L103-L107: correct the immutability and lifecycle bullets.
📍 Affects 5 files
  • docs/platform-engineer-guide/project-types.md#L161-L163 (this comment)
  • docs/platform-engineer-guide/project-types.md#L228-L228
  • docs/developer-guide/deploying-applications/project-releases.md#L53-L57
  • docs/concepts/platform-abstractions.md#L304-L306
  • docs/concepts/resource-relationships.md#L150-L153
  • docs/reference/api/runtime/projectrelease.md#L12-L12
  • docs/reference/api/runtime/projectrelease.md#L103-L107
🤖 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/platform-engineer-guide/project-types.md` around lines 161 - 163, Align
all listed documentation sites with the immutable Project.spec.parameters
contract: in docs/platform-engineer-guide/project-types.md:161-163 and :228-228,
docs/developer-guide/deploying-applications/project-releases.md:53-57,
docs/concepts/platform-abstractions.md:304-306,
docs/concepts/resource-relationships.md:150-153, and
docs/reference/api/runtime/projectrelease.md:12 and :103-107, state that
ProjectType snapshot changes create ProjectReleases, remove claims that
parameter edits trigger releases, and document the supported
replacement/versioning workflow for changed parameters while preserving the
distinction that existing releases remain unchanged.

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.

Document project release lifecycle

1 participant