Automatizace vydání
Skript release se spouští z kořene repository, čte skutečnou historii git od předchozího tagu, aktualizuje verze balíčků, zapisuje changelog, spouští kontroly, vytvoří release commit a anotovaný tag. GitHub sestavuje a publikuje binární soubory; metadata a pojmenované odkazy na artifacts se zrcadlí do Forgejo.
Jednorázové místní nastavení
npm install
npm run setup-hooks
Nastaví .githooks/commit-msg pro Conventional Commits, .githooks/pre-commit pro kontrolu formátování a .gitmessage jako místní šablonu zprávy.
Vytvoření vydání
Spusťte z čistého worktree na větvi, kterou chcete označit:
# Patch release
npm run release
# Minor release
npm run release:minor
# Major release
npm run release:major
Skript ověří čistý strom a volný tag, shromáždí důkazy z commitů, souborů, závislostí, locales a nevydaného changelogu, vygeneruje poznámky, aktualizuje package.json, balíčky workspace, package-lock.json, Helm chart a CHANGELOG.md, spustí npm run release:check a commit/tag vytvoří až po úspěchu všech kontrol.
Generování changelogu
npm run changelog
npm run changelog -- update
Místní model kompatibilní s Ollama může vytvořit uhlazený návrh, který se ověří proti důkazům git. Při nedostupné či nebezpečné AI se použije deterministický generátor.
CHANGELOG_AI=0 npm run release:minor
CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
OLLAMA_BASE_URL=http://127.0.0.1:11434 npm run release
Push vydání
Publikujte pouze přesný commit a tag zobrazený skriptem. Produkční větev pošlete nejprve do Forgejo a poté na GitHub s vypnutým následováním tagů:
git -c push.followTags=false push \
https://git.kroonen.ai/libre-webui/libre-webui.git \
HEAD:refs/heads/main
git ls-remote \
https://git.kroonen.ai/libre-webui/libre-webui.git \
refs/heads/main
git -c push.followTags=false push \
https://github.com/libre-webui/libre-webui.git \
HEAD:refs/heads/main
git ls-remote \
https://github.com/libre-webui/libre-webui.git \
refs/heads/main
Obě SHA musí odpovídat místnímu release commitu. Před tagem počkejte na povinné GitHub workflows. Ověřte, že tag na žádné službě neexistuje, a odešlete pouze jej:
git ls-remote \
https://git.kroonen.ai/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
git ls-remote \
https://github.com/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
git -c push.followTags=false push \
https://git.kroonen.ai/libre-webui/libre-webui.git \
refs/tags/vX.Y.Z:refs/tags/vX.Y.Z
git -c push.followTags=false push \
https://github.com/libre-webui/libre-webui.git \
refs/tags/vX.Y.Z:refs/tags/vX.Y.Z
git ls-remote \
https://git.kroonen.ai/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
git ls-remote \
https://github.com/libre-webui/libre-webui.git \
'refs/tags/vX.Y.Z' 'refs/tags/vX.Y.Z^{}'
Nahraďte vX.Y.Z skutečným tagem a ověřte SHA tag object i peeled commitu. Nikdy nepoužívejte git push --tags.
Cesta vydání v CI
Tag v* spustí release:check, sestaví Electron artifacts pro tři platformy, vytvoří GitHub release z changelogu, zrcadlí Forgejo, sestaví Docker image, publikuje Helm se stejnou verzí a npm s NPM_TOKEN.
npm run release:check
Zrcadlo vydání ve Forgejo
GitHub Actions secret FORGEJO_TOKEN má mít pouze scope write:repository. Zrcadlení je idempotentní: vytvoří chybějící záznamy, sladí metadata a přeskočí existující odkazy. Assets ve Forgejo jsou externí odkazy na GitHub browser_download_url; GitHub zůstává hostitelem binárních souborů a zdrojové archivy vznikají z přesného tagu na obou službách.
Cílové repository je libre-webui/libre-webui. K náhledu použijte --dry-run, vX.Y.Z nahraďte přesným tagem a produkční větev je main.
Náhled nebo doplnění jednoho vydání
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Tag musí existovat na GitHubu i Forgejo a ukazovat na stejný objekt a commit.
Náhled nebo doplnění všech vydání
node scripts/mirror-forgejo-releases.mjs --all --dry-run
node scripts/mirror-forgejo-releases.mjs --all
GITHUB_TOKEN je vyžadován pro --all včetně dry run; při zápisu také FORGEJO_TOKEN. Obě API se stránkují a zpracovávají se objekty GitHub Release, nikoli všechny tagy. Po doplnění spusťte dry run znovu; neměly by zbýt změny.
Zásada neměnných tagů
Publikovaný tag nesmíte smazat, force-pushnout, přesunout ani znovu použít pro jiný obsah. Chybu opravte v příštím patch vydání; pokud chybí pouze stránka či odkaz, spusťte zrcadlení znovu. Tag Forgejo v0.8.6 byl jednou výslovně schváleně srovnán při zavedení dvojího zrcadlení; nejde o precedent.
Zásada verzí Helm
version chartu, appVersion, kořenový balíček a release tag používají stejnou sémantickou verzi a CI odmítne rozdíl. Chart se publikuje pouze z neměnného tagu v*. Verze 0.14.1 má jednorázový digest override z doby před sémantickými Docker tagy; příští vydání jej odstraní. Docker workflow publikuje stejný tag do GHCR a Docker Hub a Helm čeká nejvýše 20 minut na image. Ollama image používá samostatný upstream latest.
Conventional Commits
<type>[optional scope]: <description>
Běžné typy jsou feat, fix, docs, refactor, perf, test a chore. Nekompatibilní změny používají !:
git commit -m "feat!: remove deprecated endpoint"
git commit -m "fix(auth)!: change token validation"
Řešení problémů
Pracovní adresář není čistý
git status --short
git add .
git commit -m "fix: resolve pending changes"
Žádné vydatelné změny
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Changelog vyžaduje ruční úpravu
git add CHANGELOG.md
git commit -m "docs: refine changelog"
Vrácení místního release commitu
Pokud commit ani tag nebyly odeslány:
git tag -d v0.12.0
git reset --soft HEAD~1
Pokud již tag existuje vzdáleně, vytvořte další patch release; nemažte jej.
Neúplné zrcadlo Forgejo
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Chyba oprávnění znamená chybějící, vypršený nebo nedostatečný FORGEJO_TOKEN. Zrcadlo nikdy nevytváří ani nepřesouvá Git tagy.
Soubory správce
.gitmessage— šablona zprávy commitu.githooks/commit-msg— kontrola Conventional Commit.githooks/pre-commit— kontrola formátováníscripts/release.js— orchestrace vydáníscripts/mirror-forgejo-releases.mjs— idempotentní zrcadlení a backfillscripts/generate-changelog.js— příkaz changeloguscripts/lib/releaseNotes.js— důkazy a generování changelogu.github/workflows/release.yml— CI řízené tagem.github/workflows/helm-publish.yml— kontrola a publikace Helm
Více informací: https://www.conventionalcommits.org/.