Hop til hovedindhold

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 — formateringskontroll
  • scripts/release.js — releaseorkestrering
  • scripts/mirror-forgejo-releases.mjs — idempotent spejling/backfill
  • scripts/generate-changelog.js — changelogkommando
  • scripts/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/.