Overflow release-notes.md is saved with latin1 encoding, corrupting non-ASCII characters (e.g. ⚠)
Maintainers usually reply within 2 days
@jay23606 is already working on this.
Since Nov 6, 2026.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 83/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- github, node.js, typescript
Research direction
Start in src/github.ts at GitHub.createFileOnNewBranch and inspect how file contents are encoded before being sent to GitHub. Reproduce the issue with the provided ⚠ example and check that the resulting bytes preserve UTF-8. Done when release notes retain non-ASCII characters; run the relevant tests for file creation if available.
Written by the indexing model from the issue text.
Description
Environment details
- OS:
ubuntu-latestin GitHub Actions - Node.js version: the one bundled with
googleapis/[email protected] release-pleaseversion: 17.11.2- Manifest mode, 17 packages, one grouped release PR
What happens
When the release PR body is too large, release-please saves the full notes to release-notes.md on the release-please--branches--<branch>--release-notes branch. Any character above U+00FF in that file gets corrupted. For example, ### ⚠ BREAKING CHANGES is stored as ### \xA0 BREAKING CHANGES (a single 0xA0 byte, not valid UTF-8), and GitHub shows the file as ISO-8859 text.
That file is what release-please parses when the PR is merged, and it is what links in the PR body point to.
Real case: https://github.com/kc-workspace/kcws/pull/286 (notes branch commit feb7d78)
Root cause
GitHub.createFileOnNewBranch in src/github.ts:
// contents need to be base64 encoded
content: Buffer.from(contents, 'binary').toString('base64'),
The 'binary' (latin1) encoding keeps only the low byte of each UTF-16 code unit. ⚠ (U+26A0) becomes 0xA0, and emoji or CJK text in commit messages break the same way.
Steps to reproduce
const b = Buffer.from('### ⚠ BREAKING CHANGES', 'binary');
console.log(b.toString('hex').slice(0, 24)); // 23232320a020425245414b49
console.log(b.toString('utf8')); // ### � BREAKING CHANGES
Suggested fix
Use Buffer.from(contents, 'utf8').toString('base64').
- Dominant language
- TypeScript
- Stars
- 7.8k
- Forks
- 621
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 8
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from googleapis/release-please
-
BREAKING CHANGE footer with a continuation line keeps only the last linePossibly taken @kojiromike claimed this 7 days ago. Openpriority: p3 type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
googleapis/release-please#2955 · 1 comment ·
Maintainers usually reply within 2 days
-
priority: p3 type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
googleapis/release-please#2952 ·
Maintainers usually reply within 2 days
-
exclude-paths filters out empty Release-As commits in manifest modePossibly taken @anishesg claimed this 63 days ago. Openpriority: p3 type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
googleapis/release-please#2891 · 1 comment ·
Maintainers usually reply within 2 days
-
TypeError: Cannot read properties of undefined (reading 'match') when a commit subject contains a raw `<details>` token - crashes re-parsing of the open release pull request bodyPossibly taken @johnitvn claimed this 83 days ago. Openpriority: p3 type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
googleapis/release-please#2884 · 1 reaction ·
Maintainers usually reply within 2 days
-
cargo-workspace: cascaded dependent bumps ignore the active prerelease windowMay be free again A pull request for this issue was closed without being merged. Openpriority: p3 type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
googleapis/release-please#2828 · 2 comments ·
Maintainers usually reply within 2 days
All issues in googleapis/release-please
Similar issues
-
parse: child keys like `007`, `1e3`, `0x1f`, `-1` make the parent an empty array and hide the valueOpen
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement follow-up
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 62/100
bketelsen/pi-pocket-team#232 ·
Maintainers usually reply within 1 day
-
bug UI
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
wardian-app/Wardian#1746 ·
Maintainers usually reply within 1 day
-
area: interop area: sip-core v3
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
fonoster/routr#705 · 1 comment ·
Maintainers usually reply within 1 day