Hoppa till huvudinnehåll

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