Skip to content

chore: configure v3 beta prereleases and document migration-guide policy - #1199

Merged
grdsdev merged 4 commits into
mainfrom
chore/v3-beta-prerelease-config
Aug 12, 2026
Merged

grdsdev merged 4 commits into
mainfrom
chore/v3-beta-prerelease-config

Conversation

@grdsdev

@grdsdev grdsdev commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

What

  1. Adds "prerelease": true, "prerelease-type": "beta" to release-please-config.json on main.
  2. Adds an AGENTS.md policy that every breaking change needs a migration guide under docs/migrations/.

Why

v2.55.0 (#1163) was the last v2 release. main now starts taking v3 breaking changes incrementally (small PRs, not a big-bang merge of release/v3).

Prerelease config: without it, the first !:/BREAKING CHANGE: commit merged to main would make release-please's next PR jump straight from 2.55.0 to a stable 3.0.0 tag. With it, that commit instead produces 3.0.0-beta.1, then 3.0.0-beta.2, etc. — mirroring the config already proven on release/v3 (see the now-closed #1042, chore(release/v3): release 3.0.0-beta.1). Flip prerelease back to false when v3 is ready to go stable.

Migration guide policy: landing v3 breaking changes piecemeal makes it easy for a change to merge without documented migration steps. Documented in AGENTS.md as a review-time expectation; there's no CI guard for it (dropped — enforced via review instead).

Context

main now takes v3 breaking changes incrementally. Without this, the
first `!:`/BREAKING CHANGE commit would make release-please jump
straight to a stable 3.0.0 tag instead of an alpha/beta line.
Mirrors the same config already used on release/v3 (see #1042).
@grdsdev
grdsdev requested a review from a team as a code owner August 12, 2026 14:46
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4279d35b-4b7a-43f5-83f1-34e0c5ab5e42

📥 Commits

Reviewing files that changed from the base of the PR and between 8a6e43e and 762b813.

📒 Files selected for processing (1)
  • AGENTS.md
💤 Files with no reviewable changes (1)
  • AGENTS.md

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Enabled beta prereleases for the root package.
  • Documentation

    • Added guidelines for documenting breaking changes, including migration guides and conventional change markers.

Walkthrough

The release configuration enables beta prereleases for the root package and uses beta as the prerelease identifier. Repository guidance now requires migration documentation for breaking changes, including conventional breaking-change markers and guides under docs/migrations/. The pull request does not modify package APIs or add release content.

Assessment against linked issues

Objective Addressed Explanation
Configure the first v3.0.0-beta.1 prerelease [#1042]
Provide the required v2-to-v3 migration documentation [#1042] The changes do not add or verify MIGRATION_V3.md; its existence cannot be established from the provided changes.

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.

@grdsdev grdsdev mentioned this pull request Aug 12, 2026

@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 `@release-please-config.json`:
- Around line 5-6: Update the release configuration containing "prerelease" and
"prerelease-type" to add "versioning": "prerelease", ensuring breaking releases
generate beta-suffixed versions such as 3.0.0-beta.1.
🪄 Autofix

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 Plus

Run ID: 5f577727-2252-4615-9e38-a13dadfa4392

📥 Commits

Reviewing files that changed from the base of the PR and between a71f55a and f0d52ab.

📒 Files selected for processing (1)
  • release-please-config.json

Comment on lines +5 to +6
"prerelease": true,
"prerelease-type": "beta",

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 | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

jq -e '
  .packages["."] as $pkg
  | (($pkg.versioning // .versioning // "default") == "prerelease")
  and ($pkg.prerelease == true)
  and ($pkg["prerelease-type"] == "beta")
' release-please-config.json >/dev/null

Repository: supabase/supabase-swift

Length of output: 161


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- release-please-config.json ---'
cat -n release-please-config.json

printf '%s\n' '--- related release-please files and references ---'
git ls-files | rg '(^|/)(release-please|\.release-please|package\.json|README|CHANGELOG)' || true
rg -n --hidden --glob '!**/.git/**' 'versioning|prerelease-type|prerelease|release-please' . || true

Repository: supabase/supabase-swift

Length of output: 2544


🌐 Web query:

Release Please customizing.md prerelease versioning prerelease-type versioning prerelease

💡 Result:

In Release Please, prerelease functionality is managed through a combination of a versioning strategy and configuration settings in your manifest or action configuration [1][2][3]. To implement prerelease versioning, you must use the prerelease versioning strategy [1][4]. This strategy works in conjunction with the prerelease boolean configuration setting [1][2]. When prerelease is set to true, Release Please will create prerelease versions (e.g., 1.0.0-alpha.1) [2][5]. If this setting is false (the default), a prerelease version will not be created, even if the versioning strategy is selected [1][2]. You can further customize the prerelease behavior using the prerelease-type configuration option [2][5]. This option allows you to define the prerelease identifier (e.g., "beta" or "alpha") [2][5]. When prerelease-type is set, the versioning strategy will incorporate this value into the prerelease part of the version string (e.g., bumping 1.2.1 to 1.3.0-beta) [1][4]. These configurations can be applied at the root level or per-package level in your release-please-config.json or manifest configuration [3]. When using the CLI, these can also be passed as flags: --prerelease and --prerelease-type [6][7]. Summary of key settings: - Versioning Strategy: Set to prerelease to enable this logic [1][4]. - prerelease (boolean): Must be true for any prerelease versions to be generated [2][5]. - prerelease-type (string): Defines the prefix for the prerelease portion of the version (e.g., "beta") [2][5].

Citations:


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- manifest ---'
cat -n .release-please-manifest.json

printf '%s\n' '--- release instructions around versioning ---'
sed -n '1,110p' RELEASE.md

Repository: supabase/supabase-swift

Length of output: 2431


Set "versioning": "prerelease" before merge.

"prerelease": true marks the release as a prerelease but does not select prerelease version generation. Without "versioning": "prerelease", a breaking change can produce 3.0.0 instead of 3.0.0-beta.1.

🤖 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 `@release-please-config.json` around lines 5 - 6, Update the release
configuration containing "prerelease" and "prerelease-type" to add "versioning":
"prerelease", ensuring breaking releases generate beta-suffixed versions such as
3.0.0-beta.1.

@coveralls

coveralls commented Aug 12, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 31615915420

Coverage increased (+0.6%) to 84.582%

Details

  • Coverage increased (+0.6%) from the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • 7 coverage regressions across 1 file.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

7 previously-covered lines in 1 file lost coverage.

File Lines Losing Coverage Coverage
Sources/RealtimeV2/ConnectionManager.swift 7 88.94%

Coverage Stats

Coverage Status
Relevant Lines: 10462
Covered Lines: 8849
Line Coverage: 84.58%
Coverage Strength: 39.89 hits per line

💛 - Coveralls

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Capability matrix drift detected

The following capabilities are marked implemented in swift but have no registered symbols to verify:

  • auth.passkey.register_passkey (no symbols list — cannot confirm implementation exists)
  • auth.passkey.sign_in_with_passkey (no symbols list — cannot confirm implementation exists)
  • client.authentication_integration.third_party_auth (no symbols list — cannot confirm implementation exists)
  • client.authentication_integration.cross_client_token_sync (no symbols list — cannot confirm implementation exists)
  • client.authentication_integration.oauth_flow_type (no symbols list — cannot confirm implementation exists)
  • client.authentication_integration.session_url_detection (no symbols list — cannot confirm implementation exists)
  • client.session_management.custom_storage (no symbols list — cannot confirm implementation exists)
  • client.session_management.persist_session (no symbols list — cannot confirm implementation exists)
  • client.request_configuration.global_headers (no symbols list — cannot confirm implementation exists)
  • client.observability.trace_propagation (no symbols list — cannot confirm implementation exists)
  • database.query.select (no symbols list — cannot confirm implementation exists)
  • database.query.schema_selection (no symbols list — cannot confirm implementation exists)
  • database.query.rpc (no symbols list — cannot confirm implementation exists)
  • database.mutate.insert (no symbols list — cannot confirm implementation exists)
  • database.mutate.update (no symbols list — cannot confirm implementation exists)
  • database.mutate.upsert (no symbols list — cannot confirm implementation exists)
  • database.mutate.delete (no symbols list — cannot confirm implementation exists)
  • database.mutate.select_after_mutation (no symbols list — cannot confirm implementation exists)
  • database.using_filters.eq (no symbols list — cannot confirm implementation exists)
  • database.using_filters.neq (no symbols list — cannot confirm implementation exists)
  • database.using_filters.gt (no symbols list — cannot confirm implementation exists)
  • database.using_filters.gte (no symbols list — cannot confirm implementation exists)
  • database.using_filters.lt (no symbols list — cannot confirm implementation exists)
  • database.using_filters.lte (no symbols list — cannot confirm implementation exists)
  • database.using_filters.like (no symbols list — cannot confirm implementation exists)
  • database.using_filters.ilike (no symbols list — cannot confirm implementation exists)
  • database.using_filters.is (no symbols list — cannot confirm implementation exists)
  • database.using_filters.in (no symbols list — cannot confirm implementation exists)
  • database.using_filters.contains (no symbols list — cannot confirm implementation exists)
  • database.using_filters.contained_by (no symbols list — cannot confirm implementation exists)
  • database.using_filters.range_gt (no symbols list — cannot confirm implementation exists)
  • database.using_filters.range_gte (no symbols list — cannot confirm implementation exists)
  • database.using_filters.range_lt (no symbols list — cannot confirm implementation exists)
  • database.using_filters.range_lte (no symbols list — cannot confirm implementation exists)
  • database.using_filters.range_adjacent (no symbols list — cannot confirm implementation exists)
  • database.using_filters.overlaps (no symbols list — cannot confirm implementation exists)
  • database.using_filters.text_search (no symbols list — cannot confirm implementation exists)
  • database.using_filters.match (no symbols list — cannot confirm implementation exists)
  • database.using_filters.not (no symbols list — cannot confirm implementation exists)
  • database.using_filters.or (no symbols list — cannot confirm implementation exists)
  • database.using_filters.raw (no symbols list — cannot confirm implementation exists)
  • database.using_filters.regex (no symbols list — cannot confirm implementation exists)
  • database.using_filters.regex_icase (no symbols list — cannot confirm implementation exists)
  • database.using_filters.is_distinct (no symbols list — cannot confirm implementation exists)
  • database.using_filters.like_all (no symbols list — cannot confirm implementation exists)
  • database.using_filters.like_any (no symbols list — cannot confirm implementation exists)
  • database.using_filters.ilike_all (no symbols list — cannot confirm implementation exists)
  • database.using_filters.ilike_any (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.order (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.limit (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.range (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.single_row (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.strip_nulls (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.format_csv (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.format_geojson (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.max_affected_rows (no symbols list — cannot confirm implementation exists)
  • database.using_modifiers.request_cancellation (no symbols list — cannot confirm implementation exists)
  • database.configuration.auto_retry (no symbols list — cannot confirm implementation exists)
  • functions.invocation.invoke (no symbols list — cannot confirm implementation exists)
  • functions.invocation.set_auth_token (no symbols list — cannot confirm implementation exists)
  • functions.invocation.method_override (no symbols list — cannot confirm implementation exists)
  • functions.invocation.streaming_response (no symbols list — cannot confirm implementation exists)
  • functions.invocation.request_cancellation (no symbols list — cannot confirm implementation exists)
  • realtime.client.connect (no symbols list — cannot confirm implementation exists)
  • realtime.client.disconnect (no symbols list — cannot confirm implementation exists)
  • realtime.client.get_channels (no symbols list — cannot confirm implementation exists)
  • realtime.client.remove_channel (no symbols list — cannot confirm implementation exists)
  • realtime.client.remove_all_channels (no symbols list — cannot confirm implementation exists)
  • realtime.client.connection_state (no symbols list — cannot confirm implementation exists)
  • realtime.client.listen_heartbeats (no symbols list — cannot confirm implementation exists)
  • realtime.client.set_auth_token (no symbols list — cannot confirm implementation exists)
  • realtime.client.channel (no symbols list — cannot confirm implementation exists)
  • realtime.channel.subscribe (no symbols list — cannot confirm implementation exists)
  • realtime.channel.unsubscribe (no symbols list — cannot confirm implementation exists)
  • realtime.channel.broadcast (no symbols list — cannot confirm implementation exists)
  • realtime.channel.broadcast_http (no symbols list — cannot confirm implementation exists)
  • realtime.subscriptions.postgres_changes (no symbols list — cannot confirm implementation exists)
  • realtime.subscriptions.subscribe_presence (no symbols list — cannot confirm implementation exists)
  • realtime.subscriptions.private_channel (no symbols list — cannot confirm implementation exists)
  • realtime.subscriptions.broadcast_self (no symbols list — cannot confirm implementation exists)
  • realtime.subscriptions.broadcast_ack (no symbols list — cannot confirm implementation exists)
  • realtime.subscriptions.broadcast_replay (no symbols list — cannot confirm implementation exists)
  • realtime.presence.track (no symbols list — cannot confirm implementation exists)
  • realtime.presence.untrack (no symbols list — cannot confirm implementation exists)
  • realtime.presence.presence_key (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.custom_websocket_transport (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.reconnect_backoff (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.heartbeat_interval (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.access_token_callback (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.deferred_disconnect (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.custom_logger (no symbols list — cannot confirm implementation exists)
  • realtime.configuration.binary_protocol (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.get_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.list_file_buckets (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.update_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.delete_file_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.empty_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.access_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.upload (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.download (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.move (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.copy (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.remove (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.create_signed_url (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.create_signed_urls (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.create_signed_upload_url (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.upload_with_signed_url (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.update_file (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.file_exists (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.file_info (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.copy_cross_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.move_cross_bucket (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.upload_with_metadata (no symbols list — cannot confirm implementation exists)
  • storage.file_buckets.url_cache_nonce (no symbols list — cannot confirm implementation exists)

These may have been renamed, removed, or never registered. Please update the capability matrix.
See: https://github.com/supabase/sdk/blob/main/docs/capability-matrix.md

Adds the policy to AGENTS.md and a CI job that enforces it: any PR
whose title or commits carry a breaking-change marker ('!' or
BREAKING CHANGE:) must touch a file under docs/migrations/.

@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 @.github/workflows/migration-guide-check.yml:
- Around line 59-61: Update the CHANGED_FILES calculation in the migration-guide
check to include only added or modified files from the git diff, excluding
deleted paths, before applying the existing docs/migrations/*.md pattern match.
Preserve the current validation behavior for migration guides that are added or
updated.
🪄 Autofix

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 Plus

Run ID: fb658e49-9791-401a-b034-366c05f21271

📥 Commits

Reviewing files that changed from the base of the PR and between f0d52ab and 8a6e43e.

📒 Files selected for processing (2)
  • .github/workflows/migration-guide-check.yml
  • AGENTS.md

Comment thread .github/workflows/migration-guide-check.yml Outdated
@grdsdev grdsdev changed the title chore: configure release-please for beta prerelease on main chore: configure v3 beta prereleases and require migration guides for breaking changes Aug 12, 2026
grdsdev and others added 2 commits August 12, 2026 13:04
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Keep the migration-guide policy in AGENTS.md as guidance, but remove
the automated check — enforce via review instead.
@grdsdev grdsdev changed the title chore: configure v3 beta prereleases and require migration guides for breaking changes chore: configure v3 beta prereleases and document migration-guide policy Aug 12, 2026
@grdsdev
grdsdev merged commit f6687c5 into main Aug 12, 2026
54 of 56 checks passed
@grdsdev
grdsdev deleted the chore/v3-beta-prerelease-config branch August 12, 2026 16:57
grdsdev added a commit that referenced this pull request Aug 13, 2026
release-please's default versioning strategy ignores `prerelease`
and `prerelease-type` entirely -- those fields are only read by the
`prerelease` versioning strategy, which only activates when
"versioning": "prerelease" is set. Without it, a major bump produces
a plain X.0.0 tag instead of X.0.0-beta.N. PR #1201 is live proof: it
computed 3.0.0, not 3.0.0-beta.1, despite the fields added in #1199.

That 3.0.0 proposal is itself spurious: an earlier commit described
the conventional-commits breaking-change footer in prose, and the
literal text was picked up by release-please's own scan even though
nothing breaking shipped. main is force-push protected, so history
can't be rewritten to remove it; folding it into an ordinary patch
release is the supported way to clear it.

Release-As: 2.55.1
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.

3 participants