Přeskočit na hlavní obsah

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 backfill
  • scripts/generate-changelog.js — příkaz changelogu
  • scripts/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/.