Automatiseret udgivelse
Release-scriptet køres fra repositoryets rod, læser den faktiske git-historik siden det forrige versionstag, opdaterer pakkeversioner, skriver changelog, kører kontroller og opretter release-commit og annoteret tag. GitHub bygger og udgiver binære filer; metadata og navngivne artifact-links spejles til Forgejo.
Engangskonfiguration
npm install
npm run setup-hooks
Det konfigurerer .githooks/commit-msg for Conventional Commits, .githooks/pre-commit for formatering og .gitmessage som lokal skabelon.
Opret en release
Kør fra et rent worktree på grenen som skal tagges:
# Patch release
npm run release
# Minor release
npm run release:minor
# Major release
npm run release:major
Skriptet kontrollerer ren arbejdskatalog og ledig tag, indsamler commit-, fil-, dependency-, locale- og changelog-evidens, genererer release notes, opdaterer package.json, workspacepakker, package-lock.json, Helm-versioner og CHANGELOG.md, kør npm run release:check og opretter commit/tag først når alt består.
Changelog
npm run changelog
npm run changelog -- update
En lokal Ollama-kompatibel model kan opret et utkast som valideres mod git-evidens. Vid otillgænglig eller osæker AI bruges 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 af release
Publicera kun commit og tag som skriptet viser. Pusha produktionsgrenen først til Forgejo, derefter GitHub, med føljda tags 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 skal matcha lokal release-commit. Vænta på obligatoriska GitHub-workflows før taggen udgives. Kontrollera at taggen mangler og pusha præcis den til Forgejo og 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^{}'
Verificer både taggobjektets og peeled commit SHA. Brug aldrig git push --tags.
CI-vægen
Et v*-tag kører release:check, bygger Electron-artifacts til macOS, Windows og Linux, opretter en GitHub-release fra changeloggen, spejler den til Forgejo, bygger Docker-images og udgiver Helm med samme version samt npm-pakken med NPM_TOKEN.
npm run release:check
Forgejo-spejling
GitHub Actions-hemligheten FORGEJO_TOKEN skal kun ha write:repository. Speglingen er idempotent: den opretter manglende poster, synkroniserer metadata og springer over over eksisterende links. Forgejo-assets er eksterne links til GitHubs browser_download_url; GitHub forbliver binærværd mens kilderkiv oprettes fra præcis tag på begge tjenester.
Målrepositoryet er libre-webui/libre-webui. Brug --dry-run til forhåndsvisning, erstat vX.Y.Z med det præcise tag, og udgiv 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 skal findes på begge og løsa til samme objekt og commit.
Førhandsgranska eller fyll alle
node scripts/mirror-forgejo-releases.mjs --all --dry-run
node scripts/mirror-forgejo-releases.mjs --all
GITHUB_TOKEN kræves til --all, også ved dry-run; FORGEJO_TOKEN kræves ved skrivning. Begge API'er pagineres, og kun GitHub Release-objekter behandles. Kør dry-run igen bagefter; der bør ikke være nogen udestående ændringer.
Oførænderlig taggpolicy
Udgivne tags får ikke slettes, force-pushes, flyttes eller genbruges. Ret fejl i næste patchrelease; kør speglingen igen hvis kun side eller link mangler. Forgejos v0.8.6 blev justeret en enkelt udtrykkeligt godkendt gang ved indførelsen af dobbeltspejling; det er intet prejudikat.
Helm-versionspolicy
Chart version, appVersion, rodpakke og release-tag bruger samme semantiske version og CI afviser afvigelse. Chart udgives kun fra uforanderlig v*-tag. Version 0.14.1 har et engangs-digestoverride fra før semantiske Docker-tags; næste release rydder det. Docker-workflow publicerer samme tag til GHCR og Docker Hub, og Helm væntar højst 20 minutter på imagen. Ollama-imagen bruger separat latest.
Conventional Commits
<type>[optional scope]: <description>
Vanliga typer: feat, fix, docs, refactor, perf, test, chore. Inkompatibla ændringer bruger !:
git commit -m "feat!: remove deprecated endpoint"
git commit -m "fix(auth)!: change token validation"
Fejlfinding
Arbetskatalogen er ikke ren
git status --short
git add .
git commit -m "fix: resolve pending changes"
Inga releasbara ændringer
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Changelog skal redigeres manuellt
git add CHANGELOG.md
git commit -m "docs: refine changelog"
Återstæll lokal release-commit
Om intet pushats:
git tag -d v0.12.0
git reset --soft HEAD~1
Findes taggen på en remote skal næste patchrelease oprettes i stedet.
Forgejo-speglingen er ofullstændig
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Autentificeringsfejl betyder manglende, udløbet eller otillræcklig FORGEJO_TOKEN. Speglingen opretter eller flytter aldrig Git-tags.
Underhållarfiler
.gitmessage— commitmall.githooks/commit-msg— Conventional Commit-kontrol.githooks/pre-commit— formateringskontrollscripts/release.js— releaseorkestreringscripts/mirror-forgejo-releases.mjs— idempotent spejling/backfillscripts/generate-changelog.js— changelogkommandoscripts/lib/releaseNotes.js— evidens og changelog.github/workflows/release.yml— taggstyrd CI.github/workflows/helm-publish.yml— Helm-kontrol/publicering
Mer information: https://www.conventionalcommits.org/.