Skip to content

docs: add CONTRIBUTING + RELEASING; draft release on tag push - #745

Merged
moonming merged 2 commits into
mainfrom
docs/contributing-releasing
Jul 9, 2026
Merged

docs: add CONTRIBUTING + RELEASING; draft release on tag push#745
moonming merged 2 commits into
mainfrom
docs/contributing-releasing

Conversation

@moonming

@moonming moonming commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

What

Two of the launch-prep items: a contributor entry point, and "tag → release notes" fixed into the release process.

  • CONTRIBUTING.md — dev setup, the CI gates (fmt / clippy / unit + coverage / e2e / schema + OpenAPI drift), conventional-commit + squash-merge PR style, and the Apache-2.0 inbound=outbound terms. Linked from the README Community section.
  • RELEASING.md — writes down the release order (data plane is tagged and published first; downstream packaging pins the exact image version) and the release-notes house style used by the existing v0.1.0–v0.3.1 releases: highlights first, breaking changes in their own section, public references only, no external-product comparisons, install snippet + compare link.
  • .github/workflows/release-draft.yml — on a vX.Y.Z tag push, creates a draft GitHub Release with auto-generated notes as the skeleton a maintainer polishes before publishing. Drafts don't notify watchers; the workflow is a no-op when a release for the tag already exists.

Test plan

  • gh release view guard verified against existing tags (v0.1.0–v0.3.1 already have releases → workflow no-ops)
  • Next real release tag: confirm the draft appears with generated notes

Docs + CI-workflow only — no runtime surface.

Summary by CodeRabbit

  • New Features

    • Automated draft releases are now created from version tags, helping ensure release notes are prepared consistently.
  • Documentation

    • Added and expanded contributor, release, and project onboarding guidance.
    • The README now links directly to the contribution guide.

- CONTRIBUTING.md: dev setup, CI gates (fmt/clippy/coverage/e2e/generated-
  artifact drift), conventional-commit and squash-merge PR style, Apache-2.0
  inbound=outbound.
- RELEASING.md: the release order (DP tag -> images -> polished notes ->
  publish -> downstream packaging pins the version) and the release-notes
  house style.
- release-draft.yml: on a vX.Y.Z tag push, create a draft GitHub Release
  with auto-generated notes for a maintainer to polish; no-op when a
  release already exists.
- README: link CONTRIBUTING.md from the Community section.
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@moonming, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 53 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

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

How do review limits work?

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

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, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 56d84edd-18d5-4d5f-af54-19b09bbe734e

📥 Commits

Reviewing files that changed from the base of the PR and between eee79a3 and 654a8db.

📒 Files selected for processing (3)
  • .github/workflows/release-draft.yml
  • CONTRIBUTING.md
  • RELEASING.md
📝 Walkthrough

Walkthrough

Adds a new GitHub Actions workflow that creates draft GitHub releases on version tag pushes, introduces CONTRIBUTING.md documenting contribution setup, CI checks, and commit conventions, adds RELEASING.md describing the release process, and links CONTRIBUTING.md from README.md.

Changes

Contribution and Release Process Documentation

Layer / File(s) Summary
Draft release workflow
.github/workflows/release-draft.yml
New workflow triggers on v*.*.* tag pushes, checks for an existing release via GitHub CLI, and creates a draft release with autogenerated notes if none exists, using concurrency control per tag.
Contribution guide
CONTRIBUTING.md, README.md
Adds full contribution documentation covering issue/discussion entry points, dev setup, CI requirements, PR/commit conventions, and licensing; links the guide from README's Community section.
Release process documentation
RELEASING.md
Documents the release workflow: tagging, triggered CI publishing/signing steps, release note polishing guidelines, publishing as latest, and downstream packaging sequencing constraints.

Estimated code review effort: 1 (Trivial) | ~5 minutes

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: new CONTRIBUTING/RELEASING docs and a draft release workflow on tag push.
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.
E2e Test Quality Review ✅ Passed Docs/workflow-only PR; no E2E tests or runtime code changed, so the E2E checklist is not applicable.
Security Check ✅ Passed Only docs and a release-draft workflow changed; no secret handling, auth logic, DB writes, TLS config, or sensitive logging found.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/contributing-releasing

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

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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 `@CONTRIBUTING.md`:
- Around line 51-53: The example code fence in CONTRIBUTING.md is unlabeled and
triggers markdownlint MD040; update the fenced block around the commit message
example to include a language hint such as text so the documentation passes
linting. Use the existing example snippet with the <type>(<scope>): <imperative
summary> placeholder and keep the rest of the formatting unchanged.

In `@RELEASING.md`:
- Around line 39-45: Update the release notes template in RELEASING.md so the
Full changelog compare link uses the actual previous release tag instead of the
hardcoded vX.Y.(Z-1) pattern. Adjust the changelog reference near the install
snippet to use a generic previous-tag placeholder or the real prior tag, and
keep the docker pull example 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1f6a3da3-8693-422c-a04f-fae2ab3c3bec

📥 Commits

Reviewing files that changed from the base of the PR and between da26357 and eee79a3.

📒 Files selected for processing (4)
  • .github/workflows/release-draft.yml
  • CONTRIBUTING.md
  • README.md
  • RELEASING.md

Comment thread CONTRIBUTING.md
Comment on lines +51 to +53
```
<type>(<scope>): <imperative summary>
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Label the example code fence.

The unlabeled fenced block trips markdownlint (MD040). Add a language hint such as text so the docs pass the configured lint rule.

♻️ Proposed fix
-```
+```text
 <type>(<scope>): <imperative summary>
-```
+```
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
<type>(<scope>): <imperative summary>
```
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 51-51: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 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 `@CONTRIBUTING.md` around lines 51 - 53, The example code fence in
CONTRIBUTING.md is unlabeled and triggers markdownlint MD040; update the fenced
block around the commit message example to include a language hint such as text
so the documentation passes linting. Use the existing example snippet with the
<type>(<scope>): <imperative summary> placeholder and keep the rest of the
formatting unchanged.

Source: Linters/SAST tools

Comment thread RELEASING.md Outdated
@moonming

moonming commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator Author

Independent audit (cold-context agent) completed on eee79a3: 0 HIGH / 1 MEDIUM / 4 LOW — verdict FIX FIRST, addressed in 654a8db:

  • M-1 fixed — CONTRIBUTING no longer claims an OpenAPI drift gate: schemas/ is the committed-artifact drift check (cargo run -p aisix-core --bin dump-schema); the Admin API OpenAPI doc is generated at build time (not committed) and only has structural checks.
  • L-1 fixed — RELEASING now says the binary self-reports X.Y.Z via --version/Server header, and X.Y.Z+sha-<short> only in the managed-mode heartbeat (matches docker-image.yml's own verify step).
  • L-2 fixed — pre-release tags (v0.4.0-rc.1) now get --prerelease on the draft.
  • L-4 fixed — compare-link template reworded to "previous release tag" (patch-decrement was wrong for minor bumps).
  • L-3 no change — the existing-release guard is fail-safe on transient API errors (red job, never a duplicate draft); re-run recovers.

Audit also verified: draft-guard finds draft releases (gh FetchRelease scans drafts), tag-name shell-injection safe via quoted env, contents: write sufficient and minimal, no conflict with docker-image.yml on the same tag, no private-repo/internal-issue leakage.

@moonming
moonming merged commit 4ddd6ad into main Jul 9, 2026
11 checks passed
@moonming
moonming deleted the docs/contributing-releasing branch July 9, 2026 08:03
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.

1 participant