Αυτοματοποίηση έκδοσης
Το release script τρέχει από τη ρίζα repository, διαβάζει πραγματικό git history από προηγούμενο tag, ενημερώνει versions, γράφει changelog, τρέχει checks και δημιουργεί commit και annotated tag. Το GitHub χτίζει/δημοσιεύει binaries και metadata/artifact links καθρεφτίζονται στο Forgejo.
Εφάπαξ ρύθμιση
npm install
npm run setup-hooks
Ρυθμίζονται .githooks/commit-msg για Conventional Commits, .githooks/pre-commit για format και .gitmessage ως template.
Δημιουργία έκδοσης
# Patch release
npm run release
# Minor release
npm run release:minor
# Major release
npm run release:major
Το script ελέγχει καθαρό tree και διαθέσιμο tag, συλλέγει commit/file/dependency/locale/changelog evidence, παράγει notes, ενημερώνει package.json, workspace packages, package-lock.json, Helm και CHANGELOG.md, τρέχει npm run release:check και δημιουργεί commit/tag μόνο μετά την επιτυχία.
Changelog
npm run changelog
npm run changelog -- update
Τοπικό Ollama-compatible μοντέλο μπορεί να γράψει draft που επικυρώνεται με git evidence. Σε αποτυχία χρησιμοποιείται ντετερμινιστικός 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 έκδοσης
Δημοσιεύστε μόνο commit/tag του script. Πρώτα Forgejo, μετά GitHub, χωρίς followed tags:
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
Τα SHA πρέπει να ταιριάζουν. Περιμένετε workflows και ελέγξτε ότι το tag λείπει πριν το push:
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^{}'
Αντικαταστήστε vX.Y.Z, ελέγξτε tag object και peeled commit. Ποτέ git push --tags.
Διαδρομή CI
Tag v* τρέχει checks, χτίζει Electron, δημιουργεί GitHub release, mirror Forgejo, Docker, Helm ίδιας version και npm με NPM_TOKEN.
npm run release:check
Mirror Forgejo
Το secret FORGEJO_TOKEN έχει μόνο write:repository. Το mirror είναι idempotent: δημιουργεί ελλείποντα records, συγχρονίζει metadata και παραλείπει υπάρχοντα links. Τα assets είναι external links στο GitHub browser_download_url.
Repository στόχος libre-webui/libre-webui, preview με --dry-run, tag vX.Y.Z, branch main.
Preview/backfill μιας έκδοσης
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Preview/backfill όλων
node scripts/mirror-forgejo-releases.mjs --all --dry-run
node scripts/mirror-forgejo-releases.mjs --all
GITHUB_TOKEN απαιτείται για --all και FORGEJO_TOKEN για εγγραφή. Τα APIs κάνουν pagination και επεξεργάζονται GitHub Releases. Επαναλάβετε dry-run ώσπου να μη μένουν αλλαγές.
Πολιτική αμετάβλητων tags
Δημοσιευμένα tags δεν διαγράφονται, force-pushάρονται, μετακινούνται ή επαναχρησιμοποιούνται. Διορθώστε στην επόμενη patch release. Το v0.8.6 Forgejo ευθυγραμμίστηκε μία εγκεκριμένη φορά κατά την εισαγωγή διπλού mirror και δεν αποτελεί προηγούμενο.
Πολιτική version Helm
Chart version, appVersion, root package και release tag χρησιμοποιούν ίδια semantic version. Chart δημοσιεύεται μόνο από v*. Η 0.14.1 έχει εφάπαξ digest override· η επόμενη release το καθαρίζει. Docker δημοσιεύει ίδιο tag σε GHCR/Docker Hub και Helm περιμένει έως 20 λεπτά. Ollama image χρησιμοποιεί ξεχωριστό latest.
Conventional Commits
<type>[optional scope]: <description>
Τύποι: feat, fix, docs, refactor, perf, test, chore. Breaking αλλαγές με !:
git commit -m "feat!: remove deprecated endpoint"
git commit -m "fix(auth)!: change token validation"
Αντιμετώπιση προβλημάτων
Μη καθαρός κατάλογος
git status --short
git add .
git commit -m "fix: resolve pending changes"
Χωρίς releasable αλλαγές
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Χειροκίνητο changelog
git add CHANGELOG.md
git commit -m "docs: refine changelog"
Αναίρεση τοπικής release
git tag -d v0.12.0
git reset --soft HEAD~1
Αν υπάρχει remote tag, δημιουργήστε νέα patch release.
Ελλιπές mirror
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z --dry-run
node scripts/mirror-forgejo-releases.mjs --tag vX.Y.Z
Authorization failure σημαίνει ελλιπές/ληγμένο FORGEJO_TOKEN. Το mirror δεν δημιουργεί ή μετακινεί tags.
Αρχεία συντηρητή
.gitmessage— template commit.githooks/commit-msg— έλεγχος Conventional Commit.githooks/pre-commit— formatscripts/release.js— orchestrationscripts/mirror-forgejo-releases.mjs— mirror/backfillscripts/generate-changelog.js— changelogscripts/lib/releaseNotes.js— evidence.github/workflows/release.yml— CI tag.github/workflows/helm-publish.yml— Helm
Περισσότερα: https://www.conventionalcommits.org/.