chore: add release-please automation config - #157
Conversation
📝 WalkthroughWalkthroughChangesRelease automation
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Pull request overview
Adds Release Please automation to standardize releases in this repo: automated versioning, CHANGELOG generation, and GitHub Releases driven by Conventional Commits.
Changes:
- Add a
release-pleaseGitHub Actions workflow that runs on pushes tomain. - Add Release Please config defining
simplerelease type and changelog section mapping. - Add the Release Please manifest pinning the current version (
1.0.0) as the starting point.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
.github/workflows/release-please.yml |
Adds the automation workflow to open/update Release PRs and cut releases. |
.github/release-please-config.json |
Configures release-please behavior and changelog section mapping for Conventional Commits. |
.github/.release-please-manifest.json |
Establishes the initial version baseline for release-please’s manifest mode. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| name: release-please | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
|
|
||
| permissions: | ||
| contents: write | ||
| pull-requests: write | ||
|
|
||
| jobs: | ||
| release-please: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: googleapis/release-please-action@v4 | ||
| with: | ||
| config-file: .github/release-please-config.json | ||
| manifest-file: .github/.release-please-manifest.json |
| release-please: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: googleapis/release-please-action@v4 |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (1)
.github/workflows/release-please.yml (1)
15-18: 🩺 Stability & Availability | 🔵 TrivialConfirm release PRs do not require CI status checks.
This action uses the default
GITHUB_TOKEN; release PRs created with that token do not trigger actions listening topull_requestevents. Branch protection would mark these PRs as failing if required status checks depend on such runs. If required checks are enabled, pass a token with enough authority viatoken; otherwise, branch protection does not affect this setup.🤖 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 @.github/workflows/release-please.yml around lines 15 - 18, Review the release-please-action configuration and confirm whether release PRs are exempt from required CI status checks. If checks are required, update the action’s token configuration to use a token with sufficient authority so pull_request workflows run; otherwise, preserve the current default GITHUB_TOKEN setup and document or validate that branch protection does not require those checks.
🤖 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/release-please-config.json:
- Around line 3-7: Add the root version.txt file required by the packages["."]
configuration for release-type "simple", or update that package entry with a
version-file pointing to an existing version file; ensure the tracked release
manifest and Release Please configuration resolve the package version
consistently.
In @.github/workflows/release-please.yml:
- Line 15: Update the release-please-action entry in the workflow to pin
googleapis/release-please-action to the 40-character commit SHA corresponding to
the v4 release, replacing the movable `@v4` tag while preserving the existing
workflow configuration.
- Line 15: Update the release-please action reference in the workflow from
googleapis/release-please-action@v4 to googleapis/release-please-action@v5.0.0,
leaving the surrounding automated release configuration unchanged.
- Around line 7-9: Update the workflow permissions block to add issues: write
alongside the existing contents: write and pull-requests: write permissions,
ensuring googleapis/release-please-action@v4 has all required write access.
---
Nitpick comments:
In @.github/workflows/release-please.yml:
- Around line 15-18: Review the release-please-action configuration and confirm
whether release PRs are exempt from required CI status checks. If checks are
required, update the action’s token configuration to use a token with sufficient
authority so pull_request workflows run; otherwise, preserve the current default
GITHUB_TOKEN setup and document or validate that branch protection does not
require those checks.
🪄 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 Plus
Run ID: 6199e584-1f0b-490b-b76c-e98d324287a6
📒 Files selected for processing (3)
.github/.release-please-manifest.json.github/release-please-config.json.github/workflows/release-please.yml
| "release-type": "simple", | ||
| "packages": { | ||
| ".": { | ||
| "package-name": "suburblens", | ||
| "changelog-path": "CHANGELOG.md" |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
if [[ -f version.txt ]]; then
echo "Found root version.txt"
exit 0
fi
echo "No root version.txt found. Candidate files:"
find . -path './.git' -prune -o -type f -name 'version.txt' -print
exit 1Repository: fatblaine/suburblens
Length of output: 202
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Release-please config:"
if [[ -f .github/release-please-config.json ]]; then
cat -n .github/release-please-config.json
else
echo "missing .github/release-please-config.json"
fi
echo
echo "Top-level metadata/version file candidates:"
git ls-files | awk '
/^[^\.#\/][^\/]*$/ || /^[^\/].*[^\/]$/ {
base=$0
gsub(/[\/].*/, "", base)
if (base ~ /^(package\.json|pyproject\.toml|Cargo\.toml|pom\.xml|build\.gradle|gradle\.properties|setup\.py|setup\.cfg|dist\.version|VERSION|version|CHANGELOG\.md|release-please-config\.json|release-please\.json)$/) print
}' | sort
echo
echo "Any parsed release-please config version-file values:"
if command -v python3 >/dev/null 2>&1; then
python3 - <<'PY'
import json, pathlib
p=pathlib.Path(".github/release-please-config.json")
if p.exists():
cfg=json.loads(p.read_text())
print("release-type:", cfg.get("release-type"))
print("global version-file:", cfg.get("version-file"))
pkgs = cfg.get("packages", {})
for pkg_path, pkg in pkgs.items():
print(f"package {pkg_path!r}: version-file={pkg.get('version-file')!r}")
PY
fi
echo
echo "GitHub action workflow files using release-please:"
fd -t f .github/workflows -x sh -c 'echo "--- $1"; rg -n "release-please|release-please-action|release-please" "$1" || true' sh {}Repository: fatblaine/suburblens
Length of output: 1503
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "GitHub workflows:"
for f in .github/workflows/*.yml .github/workflows/*.yaml; do
[[ -f "$f" ]] || continue
echo "--- $f"
rg -n "release-please|release-please-action|github\.com/googleapis/release-please" "$f" || true
done
echo
echo "root release file candidates:"
find . -maxdepth 1 -type f \( -name version.txt -o -name VERSION -o -name version -o -name dist.version -o -name CHANGELOG.md \) -printRepository: fatblaine/suburblens
Length of output: 573
🌐 Web query:
Release Please simple release-type version.txt defaults to version.txt refuses to create file
💡 Result:
In Release Please, the simple release strategy is designed to manage a repository that includes a version.txt file and a CHANGELOG.md file [1][2][3]. If Release Please appears to be "refusing" to create or update this file, it is often due to a misunderstanding of how the simple strategy interacts with version.txt or a configuration omission [4]. Key points regarding the version.txt behavior: 1. It is an output, not an input: The version.txt file is treated as an output that Release Please maintains [4]. It is not a configuration file you use to tell Release Please what the version should be; rather, Release Please detects the current version from your release history and updates the file accordingly [4]. 2. Automatic Updates: When using the simple strategy, Release Please should automatically manage the version.txt file in the root of your repository [2][3]. If it is not being created or updated, ensure that: - You are using the simple release type in your configuration [5][6]. - Your repository structure meets the expectation of having a version.txt and CHANGELOG.md at the root [1][2]. 3. Handling Missing Files: If you encounter warnings stating that version.txt does not exist, note that many of Release Please's internal updaters are configured by default with createIfMissing: false [7]. If the file does not exist, it will not be created automatically by the default simple strategy logic; you must initialize it manually in your repository [4]. 4. Advanced Customization: If you need to manage custom version files, use different naming conventions, or preserve specific formats (like a v prefix), you should use the extra-files configuration option in your release-please-config.json instead of relying solely on the built-in simple strategy behavior [1][8][9]. Using extra-files allows you to target any file and use annotators (like x-release-please-version) within that file to indicate where the version should be injected or updated [1]. Example configuration for extra-files: { "packages": { ".": { "release-type": "simple", "extra-files": ["version.txt"] } } } If you find that Release Please is overwriting your file in a way you do not want, check for recent feature updates (such as those aimed at preserving file formats) that might address your specific requirements [8].
Citations:
- 1: https://github.com/googleapis/release-please/blob/a61fa929b42f04c6acdd6650328d3f90903b7dc5/docs/customizing.md
- 2: https://github.com/googleapis/release-please
- 3: https://github.com/googleapis/release-please/blob/main/README.md
- 4: Simple strategy ignores version.txt googleapis/release-please#2098
- 5: https://github.com/googleapis/release-please-action
- 6: https://github.com/marketplace/actions/release-please-action
- 7: [BUG] Extra file JSON object passed via CLI --extra-files parameter is improperly parsed googleapis/release-please#2519
- 8: Simple strategy does not allow v prefix in version files googleapis/release-please#2536
- 9: https://github.com/release-please-oss/release-please-action
Add the root version.txt file for release-type: simple.
The manifest is tracked in .github/.release-please-manifest.json, but the root packages["."] entry has no version-file override, and there is no root version.txt. Add version.txt or set the package version-file to an existing version file before Release Please generates another release PR.
🤖 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 @.github/release-please-config.json around lines 3 - 7, Add the root
version.txt file required by the packages["."] configuration for release-type
"simple", or update that package entry with a version-file pointing to an
existing version file; ensure the tracked release manifest and Release Please
configuration resolve the package version consistently.
| permissions: | ||
| contents: write | ||
| pull-requests: write |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
grep -Eq '^[[:space:]]+issues:[[:space:]]+write[[:space:]]*$' \
.github/workflows/release-please.ymlRepository: fatblaine/suburblens
Length of output: 158
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '--- workflow files ---\n'
git ls-files '.github/workflows/*' || true
printf '\n--- release-please workflow ---\n'
cat -n .github/workflows/release-please.yml || true
printf '\n--- release please action versions/usages ---\n'
rg -n "googleapis/release-please-action|release-please" .github package.json package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null || true
printf '\n--- package configs mentioning release please ---\n'
git ls-files | grep -E '(^|/)(release-please\.config|package\.json)$' | xargs -r -n1 sh -c 'echo "--- $0"; sed -n "1,220p" "$0"'Repository: fatblaine/suburblens
Length of output: 249
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '%s\n' '--- workflow files ---'
git ls-files '.github/workflows/*' || true
printf '%s\n' '--- release-please workflow ---'
cat -n .github/workflows/release-please.yml || true
printf '%s\n' '--- release please action versions/usages ---'
rg -n "googleapis/release-please-action|release-please" .github package.json package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null || true
printf '%s\n' '--- package configs mentioning release please ---'
for f in $(git ls-files | grep -E '(^|/)(release-please\.config|package\.json)$' || true); do
printf '%s\n' "--- $f"
sed -n '1,220p' "$f"
doneRepository: fatblaine/suburblens
Length of output: 2920
🌐 Web query:
googleapis/release-please-action v4 actions README PERMISSIONS contents issues pull-requests
💡 Result:
To use googleapis/release-please-action v4, the workflow file requires specific GitHub Actions permissions to interact with the repository. In your workflow YAML file, you must explicitly grant write permissions for the following scopes: permissions: contents: write issues: write pull-requests: write Additionally, to ensure the action functions correctly, you must often enable "Allow GitHub Actions to create and approve pull requests" within your repository settings under Settings > Actions > General [1][2][3]. If you choose to use a Personal Access Token (PAT) instead of the default GITHUB_TOKEN—for instance, to trigger other workflows upon the creation of a release pull request—the token typically requires: - Metadata: Read access [4] - Contents: Read and write access [5][6][4] - Pull requests: Read and write access [5][6][4] - Actions: Depending on your specific workflow triggers and environment, you may also need to grant Read or Write access to Actions [5][4]. Note that while the README officially documents the required contents, issues, and pull-requests permissions [1][7], users have reported that additional permissions (such as Actions) may sometimes be necessary depending on the specific repository configuration and whether other automated workflows are expected to trigger from the action's activity [5][6][4].
Citations:
- 1: https://github.com/googleapis/release-please-action?tab=readme-ov-file
- 2: https://github.com/googleapis/release-please-action
- 3: https://github.com/marketplace/actions/release-please-action
- 4: Document required scopes for personal access tokens (PAT) googleapis/release-please-action#818
- 5: Comments on "Resource not accessible by personal access token" error (fixed by adding Actions: Read-only permission) googleapis/release-please-action#1048
- 6: https://gist.github.com/dlaehnemann/44e1528491463511fbc7262291725063
- 7: docs: adds missing github action permissions to README googleapis/release-please-action#1108
Add issues: write workflow permission.
googleapis/release-please-action@v4 requires contents, issues, and pull-requests write permissions. Missing issues: write can fail Release Please work that needs the Issues API.
Proposed permission fix
permissions:
contents: write
+ issues: write
pull-requests: write📝 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.
| permissions: | |
| contents: write | |
| pull-requests: write | |
| permissions: | |
| contents: write | |
| issues: write | |
| pull-requests: write |
🤖 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 @.github/workflows/release-please.yml around lines 7 - 9, Update the workflow
permissions block to add issues: write alongside the existing contents: write
and pull-requests: write permissions, ensuring
googleapis/release-please-action@v4 has all required write access.
| release-please: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: googleapis/release-please-action@v4 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
ref="$(sed -nE 's/.*googleapis\/release-please-action@([^[:space:]]+).*/\1/p' \
.github/workflows/release-please.yml | head -n1)"
[[ "$ref" =~ ^[0-9a-fA-F]{40}$ ]]Repository: fatblaine/suburblens
Length of output: 158
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf 'Workflow relevant lines:\n'
sed -n '1,80p' .github/workflows/release-please.yml
printf '\nReference in workflow:\n'
grep -E 'googleapis/release-please-action@' .github/workflows/release-please.yml || true
printf '\nRelease-please action v4 refs from public registry:\n'
if command -v gh >/dev/null 2>&1; then
gh api -H "Accept: application/vnd.github+json" \
"repos/googleapis/release-please-action/git/ref/tags/v4" 2>/dev/null | jq -r '{ref, object_type: .object.type, object_sha: .object.sha}' || true
else
echo 'gh not available'
fiRepository: fatblaine/suburblens
Length of output: 780
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sha="$(gh api --raw-field object='8b8fd2cc23b2e18957157a9d923d75aa0c6f6ad5' -H "Accept: application/vnd.github+json" \
"repos/googleapis/release-please-action/git/tags/8b8fd2cc23b2e18957157a9d923d75aa0c6f6ad5" | jq -r '.object.sha')"
printf 'annotated tag object commits to: %s\n' "$sha"
gh api --raw-field object="$sha" -H "Accept: application/vnd.github+json" "repos/googleapis/release-please-action/commits/$sha" | jq -r '.sha, .commit.message[0:200]'Repository: fatblaine/suburblens
Length of output: 183
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo 'Release-please action v4 tagged commit:'
gh api -H "Accept: application/vnd.github+json" \
"repos/googleapis/release-please-action/commits/v4" \
| jq -r '.sha' || trueRepository: fatblaine/suburblens
Length of output: 239
Pin googleapis/release-please-action@v4 to its 40-character commit SHA.
This workflow has contents and pull-requests write permissions. Use the pinned commit from the v4 release instead of the movable tag reference.
🤖 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 @.github/workflows/release-please.yml at line 15, Update the
release-please-action entry in the workflow to pin
googleapis/release-please-action to the 40-character commit SHA corresponding to
the v4 release, replacing the movable `@v4` tag while preserving the existing
workflow configuration.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Workflow:"
sed -n '1,40p' .github/workflows/release-please.yml 2>/dev/null || true
echo
echo "Relevant release-please workflow pins/comments:"
rg -n 'release-please-action|release-please' .github/workflows || true
echo
echo "Check whether v4 ref exists and action.yml runtime:"
if command -v gh >/dev/null 2>&1; then
gh release view googleapis/release-please-action --repo googleapis/release-please-action 2>/dev/null | sed -n '1,80p' || true
gh release view v4.4.1 --repo googleapis/release-please-action 2>/dev/null | sed -n '1,80p' || true
gh release view v5.0.0 --repo googleapis/release-please-action 2>/dev/null | sed -n '1,80p' || true
fi
python3 - <<'PY'
import json, urllib.request
for tag in ["v4.4.1", "v5.0.0"]:
print(f"\n--- {tag} release metadata ---")
url=f"https://api.github.com/repos/googleapis/release-please-action/releases/tags/{tag}"
try:
with urllib.request.urlopen(url, timeout=10) as r:
print(r.status, json.load(r)["tag_name"], json.load(r)["published_at"]]
except Exception as e:
print("GET release metadata failed:", e)
PY
python3 - <<'PY'
import urllib.request
for tag in ["v4.4.1", "v5.0.0"]:
url=f"https://raw.githubusercontent.com/googleapis/release-please-action/{tag}/action.yml"
print(f"\n--- {tag} action.yml excerpt ---")
try:
data=urllib.request.urlopen(url, timeout=15).read().decode()
except Exception as e:
print("GET action.yml failed:", e)
continue
for i,line in enumerate(data.splitlines()[:80], 1):
if "runtime" in line.lower() or line.strip().startswith("#"):
print(f"{i:3}: {line}")
PYRepository: fatblaine/suburblens
Length of output: 2822
🌐 Web query:
GitHub Actions Node 20 support removed fall 2026 Node 24 default June 16 2026
💡 Result:
GitHub is currently in the process of deprecating Node.js 20 for GitHub Actions runners [1][2]. The transition schedule has been updated as follows: 1. Node.js 24 as Default: Starting June 16, 2026, GitHub Actions runners began using Node.js 24 by default [1][3]. 2. Node.js 20 Removal: Following the switch to Node.js 24, support for Node.js 20 is scheduled to be removed from GitHub Actions runners in the fall of 2026 [1][2]. Users who need to continue using Node.js 20 temporarily after the June 16, 2026, default switch could opt out by setting the environment variable ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true in their workflow or on their runner machine [1][4]. However, this opt-out mechanism is temporary and will cease to function once Node.js 20 is fully removed from the runners in the fall of 2026 [1]. To prepare for this change, Actions maintainers should update their actions to support Node.js 24, and Actions users should ensure their workflows are updated to use the latest versions of these actions [1][2]. Runners emit deprecation warnings for workflows utilizing actions that still depend on Node.js 20 [5][2]. [1][2][3]
Citations:
- 1: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
- 2: Bump CI actions off deprecated Node.js 20 stacklok/toolhive#5421
- 3: Update Node 24 default date to June 16th, 2026 actions/runner#4462
- 4: Node 20 -> Node 24 migration feature flagging, opt-in and opt-out environment variables actions/runner#3948
- 5: Add Node.js 20 deprecation warning annotation (Phase 1) actions/runner#4242
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import urllib.request
for tag in ["v4.4.1", "v5.0.0"]:
url = f"https://raw.githubusercontent.com/googleapis/release-please-action/{tag}/action.yml"
print(f"\n--- {tag} action.yml runtime declaration ---")
try:
text = urllib.request.urlopen(url, timeout=15).read().decode()
except Exception as e:
print("GET action.yml failed:", e)
continue
for i, line in enumerate(text.splitlines(), 1):
if "runtime:" in line:
print(f"{i}: {line}")
if "runtime:" not in text:
print("No runtime declaration found.")
PYRepository: fatblaine/suburblens
Length of output: 568
Upgrade to the Node24 Release Please action.
googleapis/release-please-action@v4.4.1 still declares Node.js 20, while v5.0.0 declares Node.js 24. Use googleapis/release-please-action@v5.0.0 before this automated release workflow depends on Node20 support removal.
🤖 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 @.github/workflows/release-please.yml at line 15, Update the release-please
action reference in the workflow from googleapis/release-please-action@v4 to
googleapis/release-please-action@v5.0.0, leaving the surrounding automated
release configuration unchanged.
What
Add release-please automation: automated versioning,
CHANGELOG.md, and GitHub Releases driven by Conventional Commits.Why
Releases are currently manual ("write release notes + tag by hand"). release-please turns that into "review & merge one auto-generated Release PR". Zero-cost, no change to the feat→dev→main
Changes
.github/release-please-config.jsonsimplereleachangelog-sections mapping commit types → sections.github/.release-please-manifest.json1.0.0(auto-maintained after this).github/workflows/release-please.ymlFollow-up before it works end-to-end
mainmust follow Conventional Commits (feat/fix/perf/refactor/docs/chore)Verification
main, an empty greenrelease-pleaserun appears in Actions (no release yet — no feat/fix since v1.0.0; expected).feat:/fix:onmainauto-opens a `chore(mai PR with a generated CHANGELOG; merging it tags therelease.Summary by CodeRabbit