From 85fccebb3b60e142a28007332f841e5b56b73eb3 Mon Sep 17 00:00:00 2001 From: AztecBot <49558828+AztecBot@users.noreply.github.com> Date: Wed, 20 May 2026 00:22:37 +0000 Subject: [PATCH] chore: remove release-please workflow and configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Conservative pass on `next` — keeps `.release-please-manifest.json` (still used as the version source by `bootstrap.sh`, workflows, `ci3/source_refname`, playground, telemetry, pxe, spartan scripts, release-image Docker, etc.) and removes only the release-please tooling and stale doc references. ### Removed - `.github/workflows/release-please.yml` — the googleapis/release-please-action workflow - `.github/release-please-master.json`, `-v2.json`, `-v3.json`, `-v4.json` — release-please configs - The `x-release-please-*` magic-comment blocks in both Docusaurus configs (these were release-please tool markers) ### Doc updates (no functional changes) - `README.md` Releases paragraph — points at tags + manifest instead of release-please - `bootstrap.sh` comment — drop "release-please creates it" aside - `docs/scripts/cli_reference_generation/CLI_DOCS_README.md` — drop dead `release-please.yml` reference - `spartan/testnet-runbook.md` — describe tag-driven release instead of "initiate a release-please workflow" - `.claude/skills/merge-train-infra` — describe `BEGIN/END_COMMIT_OVERRIDE` markers without claiming they're consumed by release-please - `yarn-project/BRANCHING.md` — fix one dead link to `release-please.yml`; the rest of BRANCHING.md (including v2's still-active release-please description and all `.release-please-manifest.json` references) is left alone ### Intentionally NOT touched (per "more conservative" scope) - `.release-please-manifest.json` — kept as the canonical version source - `create-release-branch.yml` — still bumps `.release-please-manifest.json` (manifest stays) - All workflows / bash / TS / JS that read the manifest — all unchanged - `docs/README.md` macro paragraph naming the manifest — still accurate - `.claude/skills/updating-changelog` — still tells you to read the manifest - `.claude/skills/noir-sync-update` — references the noir submodule's own manifest, out of scope - v2's release-please description in `BRANCHING.md` — `v2` still has release-please; only `next` changes - `v4-next` — companion PR #23402 closed; only `next` per request 13 files changed, 6 insertions(+), 436 deletions(-). ## Test plan - [ ] CI green (no consumer touched, no version-resolution path changed) - [ ] release-image build still stamps `.release-please-manifest.json` and `aztec --version` is correct --- .claude/skills/merge-train-infra/SKILL.md | 2 +- .github/release-please-master.json | 23 -- .github/release-please-v2.json | 26 -- .github/release-please-v3.json | 26 -- .github/release-please-v4.json | 27 -- .github/workflows/release-please.yml | 306 ------------------ README.md | 2 +- barretenberg/docs/docusaurus.config.ts | 11 - bootstrap.sh | 2 +- docs/docusaurus.config.js | 11 - .../CLI_DOCS_README.md | 2 +- spartan/testnet-runbook.md | 2 +- yarn-project/BRANCHING.md | 2 +- 13 files changed, 6 insertions(+), 436 deletions(-) delete mode 100644 .github/release-please-master.json delete mode 100644 .github/release-please-v2.json delete mode 100644 .github/release-please-v3.json delete mode 100644 .github/release-please-v4.json delete mode 100644 .github/workflows/release-please.yml diff --git a/.claude/skills/merge-train-infra/SKILL.md b/.claude/skills/merge-train-infra/SKILL.md index b12064d0e473..4694aaf69102 100644 --- a/.claude/skills/merge-train-infra/SKILL.md +++ b/.claude/skills/merge-train-infra/SKILL.md @@ -13,7 +13,7 @@ The merge-train system is fully automated via GitHub Actions in `.github/workflo 1. **PR Creation** (`merge-train-create-pr.yml`): Triggered on push to `merge-train/*` branches. Creates a PR targeting `next` with the `ci-no-squash` label (and `ci-full-no-test-cache` for spartan). Skips merge commits and commits already in `next`. -2. **Body Updates** (`merge-train-update-pr-body.yml`): Triggered on push to `merge-train/**` and `backport-to-*-staging` branches. Updates the PR body with meaningful commits (those containing PR references like `(#1234)`). The body uses `BEGIN_COMMIT_OVERRIDE` / `END_COMMIT_OVERRIDE` markers for release-please. Backport staging PRs also call `update-pr-body.sh` inline from `scripts/backport_to_staging.sh` to handle the first-push case (where the PR doesn't exist yet when the workflow fires). +2. **Body Updates** (`merge-train-update-pr-body.yml`): Triggered on push to `merge-train/**` and `backport-to-*-staging` branches. Updates the PR body with meaningful commits (those containing PR references like `(#1234)`). The body wraps the commit list in `BEGIN_COMMIT_OVERRIDE` / `END_COMMIT_OVERRIDE` markers. Backport staging PRs also call `update-pr-body.sh` inline from `scripts/backport_to_staging.sh` to handle the first-push case (where the PR doesn't exist yet when the workflow fires). 3. **Next Integration** (`merge-train-next-to-branches.yml`): Triggered on push to `next`. Merges `next` into each active merge-train branch via `scripts/merge-train/merge-next.sh`. Uses `continue-on-error: true` so a conflict in one branch does not block others. Skips branches whose PR already has auto-merge enabled. diff --git a/.github/release-please-master.json b/.github/release-please-master.json deleted file mode 100644 index 007d5f6760cb..000000000000 --- a/.github/release-please-master.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "release-type": "simple", - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "group-pull-request-title-pattern": "chore(master): Release ${version}", - "pull-request-header": ":robot: I have created a new Aztec Packages release", - "versioning": "default", - "include-component-in-tag": false, - "changelog-sections": [ - { "type": "feat", "section": "Features", "hidden": false }, - { "type": "fix", "section": "Bug Fixes", "hidden": false }, - { "type": "chore", "section": "Miscellaneous", "hidden": false }, - { "type": "test", "section": "Miscellaneous", "hidden": false }, - { "type": "refactor", "section": "Miscellaneous", "hidden": false }, - { "type": "docs", "section": "Documentation", "hidden": false } - ], - "packages": { - ".": { - "release-type": "simple" - } - } -} diff --git a/.github/release-please-v2.json b/.github/release-please-v2.json deleted file mode 100644 index 8e4e978e07f2..000000000000 --- a/.github/release-please-v2.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "release-type": "simple", - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "group-pull-request-title-pattern": "chore(v2): Release ${version}", - "pull-request-header": "Pending Aztec Packages v2 release", - "versioning": "always-bump-patch", - "include-component-in-tag": false, - "release-search-depth": 50, - "commit-search-depth": 150, - "sequential-calls": true, - "changelog-sections": [ - { "type": "feat", "section": "Features", "hidden": false }, - { "type": "fix", "section": "Bug Fixes", "hidden": false }, - { "type": "chore", "section": "Miscellaneous", "hidden": false }, - { "type": "test", "section": "Miscellaneous", "hidden": false }, - { "type": "refactor", "section": "Miscellaneous", "hidden": false }, - { "type": "docs", "section": "Documentation", "hidden": false } - ], - "packages": { - ".": { - "release-type": "simple" - } - } -} diff --git a/.github/release-please-v3.json b/.github/release-please-v3.json deleted file mode 100644 index a932b6082085..000000000000 --- a/.github/release-please-v3.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "release-type": "simple", - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "group-pull-request-title-pattern": "chore(v3): Release ${version}", - "pull-request-header": "Pending Aztec Packages v3 release", - "versioning": "always-bump-patch", - "include-component-in-tag": false, - "release-search-depth": 50, - "commit-search-depth": 150, - "sequential-calls": true, - "changelog-sections": [ - { "type": "feat", "section": "Features", "hidden": false }, - { "type": "fix", "section": "Bug Fixes", "hidden": false }, - { "type": "chore", "section": "Miscellaneous", "hidden": false }, - { "type": "test", "section": "Miscellaneous", "hidden": false }, - { "type": "refactor", "section": "Miscellaneous", "hidden": false }, - { "type": "docs", "section": "Documentation", "hidden": false } - ], - "packages": { - ".": { - "release-type": "simple" - } - } -} diff --git a/.github/release-please-v4.json b/.github/release-please-v4.json deleted file mode 100644 index af042c8872a5..000000000000 --- a/.github/release-please-v4.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "release-type": "simple", - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "group-pull-request-title-pattern": "chore(v4): Release ${version}", - "pull-request-header": "Pending Aztec Packages v4 release", - "versioning": "always-bump-patch", - "include-component-in-tag": false, - "release-search-depth": 50, - "commit-search-depth": 150, - "bootstrap-sha": "60d353cded21d7ebeed9bc64b5ae87ebba5f9a38", - "sequential-calls": true, - "changelog-sections": [ - { "type": "feat", "section": "Features", "hidden": false }, - { "type": "fix", "section": "Bug Fixes", "hidden": false }, - { "type": "chore", "section": "Miscellaneous", "hidden": true }, - { "type": "test", "section": "Miscellaneous", "hidden": true }, - { "type": "refactor", "section": "Miscellaneous", "hidden": true }, - { "type": "docs", "section": "Documentation", "hidden": false } - ], - "packages": { - ".": { - "release-type": "simple" - } - } -} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml deleted file mode 100644 index dd14e3153737..000000000000 --- a/.github/workflows/release-please.yml +++ /dev/null @@ -1,306 +0,0 @@ -name: release-please - -on: - push: - branches: - - "v[0-9]*" - - master - -permissions: - contents: write - pull-requests: write -env: - BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - -jobs: - release-please: - name: Create Release - runs-on: ubuntu-latest - outputs: - release-pr: ${{ steps.release.outputs.pr }} - release-version: ${{ steps.release.outputs.tag_name }} - steps: - - name: Run Release Please - id: release - uses: googleapis/release-please-action@7d28262f14160787a44a6be36146a18e6f575a3f - with: - token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - config-file: .github/release-please-${{ github.ref_name }}.json - target-branch: ${{ github.ref_name }} - - dedupe-release-notes: - name: Deduplicate release notes - needs: [release-please] - if: ${{ needs.release-please.outputs.release-pr }} - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Check if release notes branch exists - id: check-branch - env: - GH_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - run: | - NOTES_BRANCH="${{ fromJSON(needs.release-please.outputs.release-pr).headBranchName }}--release-notes" - if git ls-remote --exit-code "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git" "refs/heads/$NOTES_BRANCH" >/dev/null 2>&1; then - echo "exists=true" >> $GITHUB_OUTPUT - echo "branch=$NOTES_BRANCH" >> $GITHUB_OUTPUT - else - echo "exists=false" >> $GITHUB_OUTPUT - echo "Release notes branch $NOTES_BRANCH does not exist, skipping deduplication" - fi - - - name: Checkout release notes branch - if: steps.check-branch.outputs.exists == 'true' - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - with: - ref: ${{ steps.check-branch.outputs.branch }} - fetch-depth: 1 - token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - - - name: Fetch dedupe script from target branch - if: steps.check-branch.outputs.exists == 'true' - run: | - git fetch origin ${{ github.ref_name }} --depth=1 - git show origin/${{ github.ref_name }}:scripts/dedupe_release_notes.py > /tmp/dedupe_release_notes.py - - - name: Configure Git - if: steps.check-branch.outputs.exists == 'true' - run: | - git config --global user.name AztecBot - git config --global user.email tech@aztecprotocol.com - - - name: Deduplicate release notes - if: steps.check-branch.outputs.exists == 'true' - run: | - if [ -f release-notes.md ]; then - python3 /tmp/dedupe_release_notes.py release-notes.md - git add release-notes.md - if ! git diff --cached --quiet; then - git commit -m "chore: deduplicate release notes" - git push - fi - fi - - - name: Update PR body with deduped notes - if: steps.check-branch.outputs.exists == 'true' - env: - GH_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - run: | - if [ -f release-notes.md ]; then - PR_NUMBER=${{ fromJSON(needs.release-please.outputs.release-pr).number }} - NOTES_SIZE=$(wc -c < release-notes.md) - if [ "$NOTES_SIZE" -lt 60000 ]; then - gh pr edit "$PR_NUMBER" --body "$(cat release-notes.md)" - fi - fi - - update-docs: - name: Update docs - env: - GITHUB_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - needs: [release-please] - if: ${{ needs.release-please.outputs.release-pr }} - runs-on: ubuntu-latest - - steps: - - name: Checkout release branch - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - with: - ref: ${{ fromJSON(needs.release-please.outputs.release-pr).headBranchName }} - token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - - - name: Setup dependencies - run: | - sudo apt install -y --no-install-recommends doxygen - corepack enable - - - name: Configure Git - run: | - git config --global user.name AztecBot - git config --global user.email tech@aztecprotocol.com - - - name: Install Noir toolchain - uses: noir-lang/noirup@v0.1.4 - with: - toolchain: nightly - - - name: Query new version - id: version - run: | - # Extract version from .release-please-manifest.json - AZTEC_VERSION=$(jq -r '."."' .release-please-manifest.json) - - # Add v prefix - AZTEC_VERSION="v$AZTEC_VERSION" - - echo "semver=$AZTEC_VERSION" >> $GITHUB_OUTPUT - - - name: Generate Aztec.nr API documentation - working-directory: ./docs - run: | - ./scripts/aztec_nr_docs_generation/generate_aztec_nr_docs.sh ${{ steps.version.outputs.semver }} - echo "Generated Aztec.nr API docs for: ${{ steps.version.outputs.semver }}" - - - name: Build bb (uses cache if available) - working-directory: ./barretenberg/cpp - run: | - ./bootstrap.sh build_native - echo "BB_PATH=$(pwd)/build/bin" >> $GITHUB_ENV - - - name: Build noir packages - run: | - # Initialize noir submodule (required for yarn-project portal dependencies) - git submodule update --init --recursive noir/noir-repo - # Build noir JS packages (creates noir/packages/ directory needed by yarn-project) - cd noir - ./bootstrap.sh install_deps - ./bootstrap.sh build_packages - - - name: Build aztec CLI - id: build-cli - continue-on-error: true - working-directory: ./yarn-project - run: | - ./bootstrap.sh - echo "AZTEC_CLI_PATH=$(pwd)/aztec/dest/bin" >> $GITHUB_ENV - - - name: Generate TypeScript API documentation - if: steps.build-cli.outcome == 'success' - working-directory: ./docs - run: | - # Generate TypeScript API docs for this version (requires yarn-project to be built) - ./scripts/typescript_api_generation/generate_ts_api_docs.sh ${{ steps.version.outputs.semver }} - echo "Generated TypeScript API docs for: ${{ steps.version.outputs.semver }}" - - - name: Generate Aztec CLI documentation - id: aztec-cli-docs - if: steps.build-cli.outcome == 'success' - working-directory: ./docs - continue-on-error: true - run: | - # Add locally built binaries to PATH - export PATH="${BB_PATH}:${PATH}" - - # Create wrapper for aztec CLI that runs the local build - mkdir -p /tmp/cli-bin - cat > /tmp/cli-bin/aztec << 'EOF' - #!/bin/bash - node "$AZTEC_CLI_PATH/index.js" "$@" - EOF - chmod +x /tmp/cli-bin/aztec - - # Copy aztec-up from repo (it's a standalone bash script) - cp "$GITHUB_WORKSPACE/aztec-up/bin/aztec-up" /tmp/cli-bin/aztec-up - chmod +x /tmp/cli-bin/aztec-up - - export PATH="/tmp/cli-bin:${PATH}" - - # Generate Aztec CLI docs using locally built binaries - ./scripts/cli_reference_generation/generate_all_cli_docs.sh --force current - echo "Generated Aztec CLI documentation for: ${{ steps.version.outputs.semver }}" - - - name: Generate BB CLI documentation - id: bb-cli-docs - working-directory: ./barretenberg/docs - continue-on-error: true - run: | - # Add locally built bb to PATH - export PATH="${BB_PATH}:${PATH}" - - # Generate BB CLI docs - ./scripts/generate_bb_cli_docs.sh --force current - echo "Generated BB CLI documentation for: ${{ steps.version.outputs.semver }}" - - - name: Comment on PR if CLI docs generation failed - if: steps.build-cli.outcome == 'failure' || steps.aztec-cli-docs.outcome == 'failure' || steps.bb-cli-docs.outcome == 'failure' - env: - GH_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} - run: | - FAILED_DOCS="" - if [[ "${{ steps.build-cli.outcome }}" == "failure" ]]; then - FAILED_DOCS="yarn-project build (cache miss)" - fi - if [[ "${{ steps.aztec-cli-docs.outcome }}" == "failure" ]]; then - if [[ -n "$FAILED_DOCS" ]]; then - FAILED_DOCS="$FAILED_DOCS, Aztec CLI" - else - FAILED_DOCS="Aztec CLI" - fi - fi - if [[ "${{ steps.bb-cli-docs.outcome }}" == "failure" ]]; then - if [[ -n "$FAILED_DOCS" ]]; then - FAILED_DOCS="$FAILED_DOCS, BB CLI" - else - FAILED_DOCS="BB CLI" - fi - fi - - gh pr comment ${{ fromJSON(needs.release-please.outputs.release-pr).number }} --body "$(cat < versions.json - yarn - COMMIT_TAG=$COMMIT_TAG yarn build - COMMIT_TAG=$COMMIT_TAG yarn docusaurus docs:version ${{ steps.version.outputs.semver }} - - - name: Update Barretenberg Docs versions.json with new version - working-directory: ./barretenberg/docs/scripts - run: | - ./update_versions.sh - - - name: Commit new Barretenberg Docs version - run: | - git add . - git commit -m "chore(docs): cut new barretenberg docs version for tag ${{ steps.version.outputs.semver }}" - git push diff --git a/README.md b/README.md index 1a82f2949659..f139ad76f8a6 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Logging goes through the [Logger](yarn-project/foundation/src/log/) module in Ty ## Releases -Releases are driven by [release-please](https://github.com/googleapis/release-please), which maintains a 'Release PR' containing an updated CHANGELOG.md since the last release. Triggering a new release is simply a case of merging this PR to master. A [github workflow](./.github/workflows/release-please.yml) will create the tagged release triggering ./bootstrap.sh release to build and deploy the version at that tag. +Releases are driven by git tags. The current version is tracked in `.release-please-manifest.json` at the project root. Pushing a semver tag (e.g. `v1.2.3`, or a nightly tag created by the [nightly release workflow](./.github/workflows/nightly-release-tag.yml)) triggers `./bootstrap.sh release` to build and deploy the version at that tag. ## Contribute diff --git a/barretenberg/docs/docusaurus.config.ts b/barretenberg/docs/docusaurus.config.ts index 7fc7bf7e4253..cd35f2d3483d 100644 --- a/barretenberg/docs/docusaurus.config.ts +++ b/barretenberg/docs/docusaurus.config.ts @@ -262,17 +262,6 @@ const config: Config = { className: "code-block-error-line", line: "this-will-error", }, - // This could be used to have release-please modify the current version in code blocks. - // However doing so requires to manually add each md file to release-please-config.json/extra-files - // which is easy to forget an error prone, so instead we rely on the AztecPackagesVersion() function. - { - line: "x-release-please-version", - block: { - start: "x-release-please-start-version", - end: "x-release-please-end", - }, - className: "not-allowed-to-be-empty", - }, ], }, } satisfies Preset.ThemeConfig, diff --git a/bootstrap.sh b/bootstrap.sh index 6b9c3f74b058..98eac9d3e365 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -509,7 +509,7 @@ function release_bb_github { function release { # Releases are triggered when REF_NAME is a valid semver (but can have a leading v). - # We ensure there is a github release for our REF_NAME, if not on latest (in which case release-please creates it). + # We ensure there is a github release for our REF_NAME. # We derive a dist tag from our prerelease portion of our REF_NAME semver. It is latest if no prerelease. echo_header "release all" set -x diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index dde066d48778..d09a5cb2b161 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -541,17 +541,6 @@ const config = { className: "code-block-error-line", line: "this-will-error", }, - // This could be used to have release-please modify the current version in code blocks. - // However doing so requires to manually add each md file to release-please-config.json/extra-files - // which is easy to forget an error prone, so instead we rely on the AztecPackagesVersion() function. - { - line: "x-release-please-version", - block: { - start: "x-release-please-start-version", - end: "x-release-please-end", - }, - className: "not-allowed-to-be-empty", - }, ], }, }), diff --git a/docs/scripts/cli_reference_generation/CLI_DOCS_README.md b/docs/scripts/cli_reference_generation/CLI_DOCS_README.md index 6b9e8fc5a078..2725ccc36c80 100644 --- a/docs/scripts/cli_reference_generation/CLI_DOCS_README.md +++ b/docs/scripts/cli_reference_generation/CLI_DOCS_README.md @@ -399,7 +399,7 @@ The documentation system uses a **unified script architecture** to reduce code d To add support for a new CLI (e.g., `aztec-prover`): 1. Add configuration entry to `cli_docs_config.json` (single source of truth) 2. If the CLI needs special handling (e.g., version-independent), update `generate_cli_docs.sh` -3. Update CI workflows (`.github/workflows/nightly-docs-release.yml` and `release-please.yml`) if the CLI needs to be made available during CI builds +3. Update CI workflows (`.github/workflows/nightly-docs-release.yml`) if the CLI needs to be made available during CI builds ## License diff --git a/spartan/testnet-runbook.md b/spartan/testnet-runbook.md index 55760e513c8e..44eb1f265e59 100644 --- a/spartan/testnet-runbook.md +++ b/spartan/testnet-runbook.md @@ -12,7 +12,7 @@ The engineering team's public testnet responsibilities begin after code-freeze. 2. Create a named release branch (eg: `release/sassy-salamander`) from the desired `master` release (eg:`v0.64.0`). 3. Complete all QA testing against `release/sassy-salamander`. 4. For tests that do not pass, create a hotfix into the `release/sassy-salamander` release branch. -5. After testing is complete, initiate a `release-please` CI workflow from `release/sassy-salamander` to publish release artifacts. +5. After testing is complete, push a semver release tag from `release/sassy-salamander` to trigger the release CI workflow and publish release artifacts. ### Release Notes and Artifact Builds diff --git a/yarn-project/BRANCHING.md b/yarn-project/BRANCHING.md index e289f0839ece..371c44da4a22 100644 --- a/yarn-project/BRANCHING.md +++ b/yarn-project/BRANCHING.md @@ -39,7 +39,7 @@ This creates a new branch for whatever the current version in `next` is, then bu For example, if this were run now, it would create a branch `v3`, and then bump the version in `.release-please-manifest.json` on `next` to be `4.0.0`. -Every push to a release branch causes a new tag to be created via the auto-tag job in .github/workflows/release-please.yml. So as soon as `v3` is created, there will be a tag that is `v3.0.0-rc.1`. +Release-candidate tags (e.g. `v3.0.0-rc.1`) are pushed against the release branch to publish artifacts. Each `rc` tag causes ci3.yml to run, and creates releases because it runs `bootstrap.sh ci-nightly`.