7e80226bf2
Two branches: dev for everyday work, production for releases. - ci.yml builds and packs on dev and on pull requests; it never publishes. - release.yml runs on a push (usually a merge) into production: reads <Version> from the csproj, refuses to proceed if that tag already exists, publishes to nuget.org, and only then creates the tag and the Gitea release — so a tag always means a published package. - Drop --skip-duplicate: a duplicate push must fail loudly instead of reporting success while shipping nothing.
2.5 KiB
2.5 KiB
Разработка и релиз
Ветки
| Ветка | Назначение |
|---|---|
dev |
Основная ветка разработки. Сюда идут все изменения и pull request'ы. CI собирает и пакует, но ничего не публикует. |
production |
Релизная ветка. Мерж сюда = выпуск версии. |
Сборка
dotnet build
dotnet pack src/CertifiEd.Client/CertifiEd.Client.csproj -c Release -o artifacts
Требуется .NET 10 SDK (см. global.json). Предупреждения компилятора трактуются как ошибки, публичные члены обязаны иметь XML-документацию.
Релиз
Версия берётся из файлов — единственный источник правды — <Version> в
src/CertifiEd.Client/CertifiEd.Client.csproj.
# 1. на dev: поднять версию
# <Version>1.0.1</Version>
git commit -am "chore: bump version to 1.0.1"
git push origin dev
# 2. влить dev в production — это и есть релиз
git checkout production
git merge --no-ff dev
git push origin production
Дальше .gitea/workflows/release.yml сам:
- читает версию из csproj;
- отказывается публиковать, если тег
vX.Y.Zуже существует (опубликованную версию в NuGet заменить нельзя — нужно поднять версию); - собирает и пакует;
- публикует пакет на nuget.org (дубликат падает с ошибкой, а не «молча успешно»);
- только после успешной публикации создаёт тег
vX.Y.Zи Gitea-release.
Порядок намеренный: тег появляется лишь тогда, когда пакет реально опубликован.
Что настроено один раз
- Секрет
NUGET_API_KEY— ключ nuget.org с правом публикацииCertifiEd.Client. - Actions-раннер с лейблом
ubuntu-latest. GITEA_TOKENвыдаётся Actions автоматически — используется для тега и релиза.
Совместимость
Публичный API следует semver: ломающие изменения — только в мажорной версии.