Automatiserad release
Release-skriptet körs från repository-roten, läser verklig git-historik sedan föregående versionstagg, uppdaterar paketversioner, skriver changelog, kör kontroller, skapar commit och annoterad tagg. GitHub bygger och publicerar binärer; metadata och namngivna artifact-länkar speglas till Forgejo.
Engångskonfiguration
npm install
npm run setup-hooks
Det konfigurerar .githooks/commit-msg för Conventional Commits, .githooks/pre-commit för formatering och .gitmessage som lokal mall.
Skapa en release
Kör från ett rent worktree på grenen som ska taggas:
# Patch release
npm run release
# Minor release
npm run release:minor
# Major release
npm run release:major
Skriptet kontrollerar ren arbetskatalog och ledig tagg, samlar commit-, fil-, dependency-, locale- och changelog-evidens, genererar release notes, uppdaterar package.json, workspacepaket, package-lock.json, Helm-versioner och CHANGELOG.md, kör npm run release:check och skapar commit/tagg först när allt passerar.
Changelog
npm run changelog
npm run changelog -- update
En lokal Ollama-kompatibel modell kan skapa ett utkast som valideras mot git-evidens. Vid otillgänglig eller osäker AI används en deterministisk generator.
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 av release
Publicera bara commit och tagg som skriptet visar. Pusha produktionsgrenen först till Forgejo, sedan GitHub, med följda taggar avstängda:
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
Båda SHA måste matcha lokal release-commit. Vänta på obligatoriska GitHub-workflows innan taggen publiceras. Kontrollera att taggen saknas och pusha exakt den till Forgejo och GitHub:
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^{}'
Verifiera både taggobjektets och peeled commit SHA. Använd aldrig git push --tags.
CI-vägen
En v*-tagg kör release:check, bygger Electron för tre plattformar, skapar GitHub-release från changelog, speglar Forgejo, bygger Docker, publicerar Helm med samma version och npm med NPM_TOKEN.
npm run release:check
Forgejo-spegling
GitHub Actions-hemligheten FORGEJO_TOKEN ska bara ha write:repository. Speglingen är idempotent: den skapar saknade poster, synkroniserar metadata och hoppar över befintliga länkar. Forgejo-assets är externa länkar till GitHubs browser_download_url; GitHub förblir binärvärd medan källarkiv skapas från exakt tagg på båda tjänster.
Målrepositoryt är libre-webui/libre-webui. Använd --dry-run för förhandsgranskning, ersätt vX.Y.Z med exakt tagg och publicera produktionsgrenen main.
Förhandsgranska eller fyll en release
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Taggen måste finnas på båda och lösa till samma objekt och commit.
Förhandsgranska eller fyll alla
node scripts/mirror-forgejo-releases.mjs --all --dry-run
node scripts/mirror-forgejo-releases.mjs --all
GITHUB_TOKEN krävs för --all, även dry-run; FORGEJO_TOKEN krävs vid skrivning. API:erna sidindelas och bara GitHub Release-objekt behandlas. Kör dry-run igen efteråt; inga ändringar ska återstå.
Oföränderlig taggpolicy
Publicerade taggar får inte raderas, force-pushas, flyttas eller återanvändas. Rätta fel i nästa patchrelease; kör speglingen igen om bara sida eller länk saknas. Forgejos v0.8.6 justerades en enda uttryckligen godkänd gång vid införandet av dubbelspegling; det är inget prejudikat.
Helm-versionspolicy
Chart version, appVersion, rotpaket och release-tagg använder samma semantiska version och CI avvisar avvikelse. Chart publiceras bara från oföränderlig v*-tagg. Version 0.14.1 har ett engångs-digestoverride från före semantiska Docker-taggar; nästa release rensar det. Docker-workflow publicerar samma tagg till GHCR och Docker Hub, och Helm väntar högst 20 minuter på imagen. Ollama-imagen använder separat latest.
Conventional Commits
<type>[optional scope]: <description>
Vanliga typer: feat, fix, docs, refactor, perf, test, chore. Inkompatibla ändringar använder !:
git commit -m "feat!: remove deprecated endpoint"
git commit -m "fix(auth)!: change token validation"
Felsökning
Arbetskatalogen är inte ren
git status --short
git add .
git commit -m "fix: resolve pending changes"
Inga releasbara ändringar
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Changelog måste redigeras manuellt
git add CHANGELOG.md
git commit -m "docs: refine changelog"
Återställ lokal release-commit
Om inget pushats:
git tag -d v0.12.0
git reset --soft HEAD~1
Finns taggen på en remote ska nästa patchrelease skapas i stället.
Forgejo-speglingen är ofullständig
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Autentiseringsfel innebär saknad, utgången eller otillräcklig FORGEJO_TOKEN. Speglingen skapar eller flyttar aldrig Git-taggar.
Underhållarfiler
.gitmessage— commitmall.githooks/commit-msg— Conventional Commit-kontroll.githooks/pre-commit— formateringskontrollscripts/release.js— releaseorkestreringscripts/mirror-forgejo-releases.mjs— idempotent spegling/backfillscripts/generate-changelog.js— changelogkommandoscripts/lib/releaseNotes.js— evidens och changelog.github/workflows/release.yml— taggstyrd CI.github/workflows/helm-publish.yml— Helm-kontroll/publicering
Mer information: https://www.conventionalcommits.org/.