mit einem Klick
create-release
// Create a new GitHub release for MiniPdf with CLI and GUI AOT binaries. Use when: publishing a release, creating a new version, bumping version, tagging a release, generating release notes from git diff.
// Create a new GitHub release for MiniPdf with CLI and GUI AOT binaries. Use when: publishing a release, creating a new version, bumping version, tagging a release, generating release notes from git diff.
| name | create-release |
| description | Create a new GitHub release for MiniPdf with CLI and GUI AOT binaries. Use when: publishing a release, creating a new version, bumping version, tagging a release, generating release notes from git diff. |
| argument-hint | Optionally specify the new version number (e.g. v0.27.0) |
Automate the full release cycle: compute version, commit, tag, generate release notes from git diff, and publish via gh release create so that CLI + GUI AOT workflows build and upload binaries automatically.
upstream maingh CLI authenticated with repo write accessupstream -> mini-software/MiniPdf| Component | Tag pattern | Trigger workflow |
|---|---|---|
| Library + CLI + GUI | v* (e.g. v0.26.0) | release-aot.yml (CLI) + release-aot-gui.yml (GUI) + nuget-publish.yml |
Version bumps follow v{major}.{minor}.{patch} — default increment is +0.1.0 on the minor.
git tag --sort=-v:refname | Select-Object -First 1
Parse the last tag, increment minor by 1, e.g. v0.25.0 -> v0.26.0.
If user specifies a version, use that instead.
git status --short
# If uncommitted changes exist, stage and commit them first
git push upstream main
git log {LAST_TAG}..HEAD --oneline
git diff {LAST_TAG} HEAD --stat
git tag {NEW_TAG}
git push upstream {NEW_TAG}
ghWrite release notes to a temp file, then create:
gh release create {NEW_TAG} --repo mini-software/MiniPdf --title "{NEW_TAG}" --notes-file release-notes.tmp
Remove-Item release-notes.tmp -Force
IMPORTANT: Do NOT use PowerShell here-strings (@"..."@) for multi-line notes -- they have escaping issues in the terminal. Instead, use create_file to write the notes file, then pass --notes-file.
Start-Sleep 5
gh run list --repo mini-software/MiniPdf --limit 4 --json name,status -q ".[] | {name,status}"
Expect to see:
Release AOT Binaries — builds CLI for 6 platformsRelease GUI AOT Binaries — builds GUI for 6 platformsNuGet Publish — publishes library to NuGetUse this structure for the release body (write via create_file to a temp file):
## What's New in {NEW_TAG}
### Highlights
- **Feature A** -- description
- **Fix B** -- description
### Downloads
| Platform | CLI | GUI |
|----------|-----|-----|
| Windows x64 | `minipdf-win-x64.zip` | `minipdf-gui-win-x64.zip` |
| Windows ARM64 | `minipdf-win-arm64.zip` | `minipdf-gui-win-arm64.zip` |
| Linux x64 | `minipdf-linux-x64.tar.gz` | `minipdf-gui-linux-x64.tar.gz` |
| Linux ARM64 | `minipdf-linux-arm64.tar.gz` | `minipdf-gui-linux-arm64.tar.gz` |
| macOS x64 | `minipdf-osx-x64.tar.gz` | `minipdf-gui-osx-x64.tar.gz` |
| macOS ARM64 | `minipdf-osx-arm64.tar.gz` | `minipdf-gui-osx-arm64.tar.gz` |
### Changes since {LAST_TAG}
{GIT_LOG_ONELINE}
{GIT_DIFF_STAT}
**Full Changelog**: https://github.com/mini-software/MiniPdf/compare/{LAST_TAG}...{NEW_TAG}
The following assets are built and uploaded automatically by GitHub Actions:
release-aot.yml)| Artifact | Platform |
|---|---|
minipdf-win-x64.zip | Windows x64 |
minipdf-win-arm64.zip | Windows ARM64 |
minipdf-linux-x64.tar.gz | Linux x64 |
minipdf-linux-arm64.tar.gz | Linux ARM64 |
minipdf-osx-x64.tar.gz | macOS x64 |
minipdf-osx-arm64.tar.gz | macOS ARM64 |
release-aot-gui.yml)| Artifact | Platform | Contents |
|---|---|---|
minipdf-gui-win-x64.zip | Windows x64 | exe + native DLLs |
minipdf-gui-win-arm64.zip | Windows ARM64 | exe + native DLLs |
minipdf-gui-linux-x64.tar.gz | Linux x64 | binary + .so libs |
minipdf-gui-linux-arm64.tar.gz | Linux ARM64 | binary + .so libs |
minipdf-gui-osx-x64.tar.gz | macOS x64 | binary + .dylib libs |
minipdf-gui-osx-arm64.tar.gz | macOS ARM64 | binary + .dylib libs |
GUI packages must include native libraries (libSkiaSharp, libHarfBuzzSharp, av_libglesv2) alongside the executable. The exe alone will not launch.
If a release needs to be recreated (e.g. workflow bug, wrong packaging):
# Delete remote release and tag
gh release delete {TAG} --repo mini-software/MiniPdf --yes --cleanup-tag
# Delete and recreate local tag on latest commit
git tag -d {TAG}
git tag {TAG}
git push upstream {TAG}
# Recreate release
gh release create {TAG} --repo mini-software/MiniPdf --title "{TAG}" --notes-file release-notes.tmp
--force on tags that other people may have fetched -- delete and recreate instead.git push per project policy -- always push explicitly.release-notes.tmp) after release creation.Look up the underlying processing logic of Office -> PDF tooling (LibreOffice, Apache POI, generic Office-to-PDF) from local Obsidian vaults. Use when: investigating how LibreOffice renders a document, how Apache POI models OOXML, aligning MiniPdf output with LibreOffice behavior, debugging a conversion mismatch, choosing a heuristic for docx/xlsx -> PDF, or any time the user asks "how does LibreOffice / POI handle X".
Sync changes from the English README.md to all translated README files. Use when: updating README translations, syncing README across languages, propagating README changes to other locales.