Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Add build version using GitHub Actions
ohalay
ohalay

Posted on • Edited on

     

Add build version using GitHub Actions

Коли реліз все ближче і потрібно підтримувати кілька середовищ, а потім кілька версій, то постає питання: "Як можна додати версійність до програмного продукту?".

Semantic Versioning

Semantic Versioning (SemVer) - стандарт схеми версіювання, який не прив'язаний до жодної з мов програмування. Він описується наступною моделлюmajor.minor.patch-pre-release.build, до прикладу0.1.0-rc.44. Коли ми робимо зміни в нашій аплікації/бібліотеці нам необхідно збільшувати цифровий ідентифікатор. Наступні правила описують зміну цифрового ідентифікатора:

  • major - архітектурні зміни, несумісний API
  • minor - новий функціонал, додали зворотну сумісність до API
  • patch - виправлення помилок чи проблем безпеки
  • pre-release - опційний аргумент, щоб ідентифікувати версію яка ще не готова до production -alfa,beta,rc(release candidate)
  • build - опційний аргумент, що визначає версію збірки продукту.

Add version to solution

Ми вже знаємо як створювати семантичну версію продукту. Щоб додати її до нашого рішення необхідно обрати*.csproj абоDirectory.build.props до якого ми будемо додавати версійність і додати атрибутVersionPrefix. Відповідно цей атрибут буде доданий до нашої збірки.

<PropertyGroup>  <VersionPrefix>0.1.0</VersionPrefix></PropertyGroup>
Enter fullscreen modeExit fullscreen mode

Тут важливо використовувати атрибутVersionPrefix, а неVersion, бо ми ще хочемо додаватиpre-release опційний атрибут до нашої кінцевої версії.

Add API for versions

Для того, щоб створити API, який буде повертати версію продукту необхідно створити контролер, який буде з атрибутівassembly отримувати версію. Код нижче описує як це можна зробити

[HttpGet]public string GetVersion()    => Assembly      .GetExecutingAssembly()      .GetCustomAttribute<AssemblyInformationalVersionAttribute>()      .InformationalVersion;
Enter fullscreen modeExit fullscreen mode

Add build version

Для завершення рішення залишилось додати білд версію. Для цього нам необхідно знати дві речі:

  1. Командаdotnet build підтримуєпараметр--version-suffix який додає суфікс до версії під час збору аплікації.
  2. GitHub Actions надає набірвизначених змінних про контекст виконання одиниці автоматизації. Для нас є цікавим зміннаgithub.run_number - унікальний ідентифікатор запуску одиниці автоматизації, який збільшується на одиницю під час кожного запуску і починається також з одиниці.

Зібравши попередні два пункти, ми можемо описати команду збору проекту наступним чином:

dotnet build -c Release --version-suffix rc+${{github.run_number}}
Enter fullscreen modeExit fullscreen mode

Додаємо цю команду в крок одиниці автоматизації і все готово.

Summary

SemVer є стандартизованим підходом до версіювання, який спрощує інтеграцію аплікації з іншими системами; також з допомогою версіювання можна легко відслідкувати помилки в аплікації (ми розуміємо в якій версії помилка з'явилась і в якій її виправили).
Описаний вище підхід дозволяє досить швидко додавати версійність до аплікації, також його можна використовувати з іншими CI платформами. І ще одне, коли продукт/бібліотека використовує стандарт SemVer, то легко налаштувати dependabot, про який я описувавтут, що буде автоматично апдейтитиpatch версії. Приклад GitHub проекту можна глянути нижче

Top comments(5)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss
CollapseExpand
 
olesmartyniuk profile image
Oleksandr Martyniuk
.NET developer
  • Location
    Lviv
  • Education
    Herson National Technical University
  • Work
    Consultant at Alten
  • Joined
rc+${{github.run_number}}
Enter fullscreen modeExit fullscreen mode

Ти використовуєш run_number як build секцію чи частину patch? Можливо, тут потрібна крапка?

CollapseExpand
 
ohalay profile image
ohalay
.Net Developer
  • Location
    Lviv
  • Work
    Senior Dotnet developer
  • Joined

Я тут використовуюrun_number якbuild секцію. І тут цікаво, що стандартSemVer, описує наступні правила

<valid semver> ::= <version core>                 | <version core> "-" <pre-release>                 | <version core> "+" <build>                 | <version core> "-" <pre-release> "+" <build>
Enter fullscreen modeExit fullscreen mode

і допустимоrun_number=44, то версії0.1.0-rc+44 та0.1.0-rc.44 - обидві коректні.

CollapseExpand
 
olesmartyniuk profile image
Oleksandr Martyniuk
.NET developer
  • Location
    Lviv
  • Education
    Herson National Technical University
  • Work
    Consultant at Alten
  • Joined

До речі, я міг би переглянути статтю на граматичні помилки. Просто надійшли файл, якщо цікаво. Зараз в статті вони зустрічаються. Я розумію, що свій текст важко вивірити, око замилюється.

CollapseExpand
 
ohalay profile image
ohalay
.Net Developer
  • Location
    Lviv
  • Work
    Senior Dotnet developer
  • Joined

Дякую Саша, ще раз переглянув і побачив кілька граматичних помилок, правки вже додані до тексту. Наступного разу з радістю скористаюсь твоєю допомогою.

CollapseExpand
 
der_gopher profile image
Alex Pliutau
SWE | Passionate about Backend, Go, Cloud, DevOps, Kubernetes | Writing https://packagemain.tech Newsletter | 🇩🇪
  • Location
    Berlin
  • Work
    Software Engineering Lead at Solsten
  • Joined

Great write-up, we do it similarly but with release branches -packagemain.tech/p/github-actions-...

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

.Net Developer
  • Location
    Lviv
  • Work
    Senior Dotnet developer
  • Joined

More fromohalay

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp