Files
CertifiEd.Client/CONTRIBUTING.md
Faris Laptop 7e80226bf2
CI / build (push) Successful in 39s
Release / release (push) Failing after 36s
ci: release from the production branch, version from the project file
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.
2026-07-20 16:12:21 +05:00

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 сам:

  1. читает версию из csproj;
  2. отказывается публиковать, если тег vX.Y.Z уже существует (опубликованную версию в NuGet заменить нельзя — нужно поднять версию);
  3. собирает и пакует;
  4. публикует пакет на nuget.org (дубликат падает с ошибкой, а не «молча успешно»);
  5. только после успешной публикации создаёт тег vX.Y.Z и Gitea-release.

Порядок намеренный: тег появляется лишь тогда, когда пакет реально опубликован.

Что настроено один раз

  • Секрет NUGET_API_KEY — ключ nuget.org с правом публикации CertifiEd.Client.
  • Actions-раннер с лейблом ubuntu-latest.
  • GITEA_TOKEN выдаётся Actions автоматически — используется для тега и релиза.

Совместимость

Публичный API следует semver: ломающие изменения — только в мажорной версии.