Kiadásautomatizálás
A kiadási szkript a repository gyökeréből fut, beolvassa a tényleges Git-előzményeket az előző tag óta, frissíti a verziókat, megírja a változásnaplót, lefuttatja az ellenőrzéseket, majd létrehozza a commitot és az annotált taget. A GitHub felépíti és közzéteszi a binárisokat, a metaadatok és artefaktumhivatkozások pedig tükröződnek a Forgejóra.
Egyszeri beállítás
npm install
npm run setup-hooks
Ez beállítja a .githooks/commit-msg horgot a Conventional Commits ellenőrzéséhez, a .githooks/pre-commit horgot a formázáshoz és a .gitmessage sablont.
Kiadás létrehozása
# Patch release
npm run release
# Minor release
npm run release:minor
# Major release
npm run release:major
A szkript ellenőrzi a tiszta munkafát és a szabad taget, commit-, fájl-, függőség-, lokalizációs és changelog-bizonyítékokat gyűjt, kiadási megjegyzéseket készít, frissíti a package.json, workspace-csomagok, package-lock.json, Helm és CHANGELOG.md fájlokat, lefuttatja az npm run release:check parancsot, és csak siker után hozza létre a commitot és a taget.
Változásnapló
npm run changelog
npm run changelog -- update
Egy helyi, Ollama-kompatibilis modell vázlatot írhat, amelyet a rendszer Git-bizonyítékokkal ellenőriz. Hiba esetén a determinisztikus generátort használja.
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
A kiadás feltöltése
Csak a szkript által létrehozott commitot és taget tegye közzé. Először Forgejo, majd GitHub, automatikusan követett tagek nélkül:
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
Az SHA-knak egyezniük kell. Várja meg a workflow-kat, és feltöltés előtt ellenőrizze, hogy a tag hiányzik:
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^{}'
Cserélje ki a vX.Y.Z értéket, és ellenőrizze a tag objektumát és a feloldott commitot. Soha ne használja a git push --tags parancsot.
CI-folyamat
Egy v* tag lefuttatja az ellenőrzéseket, felépíti az Electron-verziót, létrehozza a GitHub release-t, tükrözi a Forgejót, és azonos verzióval közzéteszi a Dockert és a Helmet, valamint az npm-csomagot az NPM_TOKEN segítségével.
npm run release:check
Forgejo-tükrözés
A FORGEJO_TOKEN titok csak write:repository jogosultsággal rendelkezik. A tükrözés idempotens: létrehozza a hiányzó rekordokat, szinkronizálja a metaadatokat, és kihagyja a meglévő hivatkozásokat. Az assetek külső hivatkozások a GitHub browser_download_url értékére.
A cél repository libre-webui/libre-webui, az előnézethez --dry-run, a tag vX.Y.Z, az ág pedig main.
Egy kiadás előnézete vagy pótlása
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Az összes előnézete vagy pótlása
node scripts/mirror-forgejo-releases.mjs --all --dry-run
node scripts/mirror-forgejo-releases.mjs --all
A GITHUB_TOKEN a --all használatához, a FORGEJO_TOKEN pedig az íráshoz szükséges. Az API-k lapoznak, és GitHub Releases objektumokat dolgoznak fel. Ismételje a dry-run futtatást, amíg nem marad változás.
Megváltoztathatatlan tagek szabályzata
A közzétett tagek nem törölhetők, mozgathatók, használhatók újra vagy írhatók felül force-push segítségével. A javítást a következő patch release-ben végezze el. A Forgejo v0.8.6 taget a kettős tükrözés bevezetésekor egyszer, jóváhagyással igazítottuk, ez nem teremt precedenst.
Helm-verziószabályzat
A chart version és appVersion, a gyökércsomag és a kiadási tag ugyanazt a szemantikus verziót használja. A chart csak v* tagből kerül közzétételre. A 0.14.1 egyszeri digest override-ot tartalmaz; a következő kiadás eltávolítja. A Docker ugyanazt a taget teszi közzé a GHCR és Docker Hub rendszeren, a Helm pedig legfeljebb 20 percet vár. Az Ollama image külön latest taget használ.
Conventional Commits
<type>[optional scope]: <description>
Típusok: feat, fix, docs, refactor, perf, test, chore. A visszafelé nem kompatibilis változások ! jelet használnak:
git commit -m "feat!: remove deprecated endpoint"
git commit -m "fix(auth)!: change token validation"
Hibaelhárítás
Nem tiszta munkakönyvtár
git status --short
git add .
git commit -m "fix: resolve pending changes"
Nincs kiadható változás
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Kézzel szerkesztett changelog
git add CHANGELOG.md
git commit -m "docs: refine changelog"
Helyi kiadás visszavonása
git tag -d v0.12.0
git reset --soft HEAD~1
Ha a távoli tag már létezik, hozzon létre új patch release-t.
Hiányos tükrözés
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Az engedélyezési hiba hiányzó vagy lejárt FORGEJO_TOKEN értéket jelez. A tükrözés nem hoz létre és nem mozgat tageket.
Karbantartói fájlok
.gitmessage— commit-sablon.githooks/commit-msg— Conventional Commit ellenőrzése.githooks/pre-commit— formázásscripts/release.js— vezérlésscripts/mirror-forgejo-releases.mjs— tükrözés/pótlásscripts/generate-changelog.js— változásnaplóscripts/lib/releaseNotes.js— bizonyítékok.github/workflows/release.yml— tag CI.github/workflows/helm-publish.yml— Helm
További információ: https://www.conventionalcommits.org/.