Ugrás a fő tartalomra

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ás
  • scripts/release.js — vezérlés
  • scripts/mirror-forgejo-releases.mjs — tükrözés/pótlás
  • scripts/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/.