Skip to content
Back to skills

Github Release

ASecurity

Publish a GitHub release using gh CLI. Use when creating a new version tag, writing release notes, or fixing garbled/corrupted characters in release notes. Covers standard release flow, ASCII-safe notes file approach, and Unicode homoglyph prevention.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 20, 2026
ai-agentspythonshellgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 20, 2026

npx -y skills add lamxy/agent-prompt-rules-system --skill github-release --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Github Release?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Github Release
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lamxy-github-release/badge)](https://www.skillsdirectory.com/skills/lamxy-github-release)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: github-release
description: 'Publish a GitHub release using gh CLI. Use when creating a new version tag, writing release notes, or fixing garbled/corrupted characters in release notes. Covers standard release flow, ASCII-safe notes file approach, and Unicode homoglyph prevention.'
argument-hint: 'target version tag, e.g. v1.2.1'
---

# GitHub Release

## When to Use

- Publishing a new version (patch / minor / major)
- Writing or updating release notes for an existing tag
- Fixing garbled characters (question marks, mojibake) in release notes caused by Unicode homoglyphs

## Procedure

### Step 1: Collect changes since last tag

```sh
git log --oneline <last-tag>..HEAD
git diff <last-tag>..HEAD --stat
gh release view <last-tag>   # reference previous notes format
```

### Step 2: Create and push tag

```sh
git tag -a <new-tag> -m "release: <new-tag>"
git push origin <new-tag>
```

### Step 3: Write release notes to a temp file

Write notes to `.release_notes_tmp.md` using `create_file` tool -- never inline in the shell command.

See [release-notes-template.md](./references/release-notes-template.md) for the recommended structure.

### Step 4: Verify pure ASCII (required)

```sh
python3 -c "
import sys
data = open('.release_notes_tmp.md', encoding='utf-8').read()
bad = [(i, c, ord(c)) for i, c in enumerate(data) if ord(c) > 127]
print(f'Non-ASCII count: {len(bad)}')
for idx, ch, cp in bad:
    print(f'  index {idx}: U+{cp:04X}  repr={ch!r}')
if bad: sys.exit(1)
"
```

Expected output: `Non-ASCII count: 0` and exit code 0.  
If any characters are found, consult [ascii-replacements.md](./references/ascii-replacements.md) and fix before continuing.

### Step 5: Create release

```sh
gh release create <new-tag> --title "<new-tag>" --notes-file .release_notes_tmp.md
```

### Step 6: Cleanup

```sh
rm .release_notes_tmp.md
```

### Step 7 (fix existing release): Edit release notes

```sh
gh release edit <tag> --notes-file .release_notes_tmp.md
rm .release_notes_tmp.md
```

## Key Constraints

- **Never** pass AI-generated text as an inline `--notes "..."` argument -- Unicode homoglyphs (e.g. Cyrillic `a` U+0430 disguised as Latin `a`) survive copy-paste and corrupt the published notes.
- **Always** use `--notes-file` with a file that has passed the ASCII verification step.
- Keep `.release_notes_tmp.md` out of version control (add to `.gitignore`).

## References

- [release-notes-template.md](./references/release-notes-template.md) -- recommended notes structure
- [ascii-replacements.md](./references/ascii-replacements.md) -- common Unicode-to-ASCII replacement table

Files in this skill

  • SKILL.md2.6 KB
  • references/ascii-replacements.md2.9 KB
  • references/release-notes-template.md852 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.