Проблема створення нових версії, допоможіть або я сам її вирішу

Telegram dou#techПідписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Привіт, community
Мене звати Вова, і в мене проблема з створенням нових версії.
Спробую тут пояснити що маю наувазі, в кожному проекті при налаштувані автоматизації процесу deploy, зробити генерацію новї версії стає як на мене за складною задачею, хотя мало б бути все просто. Але кожний раз це перетворюється в набір bash/shell скриптів які шукають останій tag парсять його, міняють якусь його частину і постять новий tag, і це складно. А ще виглядає дико, ось вам приклда з мого проекту.
jobs:
  prod_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions-ecosystem/action-get-latest-tag@v1
        id: get-latest-tag
      - uses: actions-ecosystem/action-bump-semver@v1
        id: bump-semver
        with:
          current_version: ${{ steps.get-latest-tag.outputs.tag }}
          level: patch
      - uses: actions-ecosystem/action-push-tag@v1
        with:
          tag: ${{ steps.bump-semver.outputs.new_version }}
          message: 'Release ${{ steps.bump-semver.outputs.new_version }}'
      - name: "Set output"
        id: set-output
        run: echo "mix_drinks_backend_version=${{ steps.bump-semver.outputs.new_version }}" >> $GITHUB_ENV


Якщо є бажання іти не стандартним semver а наприклад формат YYYY.MM.<порядковий номер версії в цьому місяці>, або YY.<порядковий номер резізу в році> це стає ще складніше. Треба витягувати час зараз з нього парсингом через regex брати рік та місяць, знаходити попередній tag з за цей самий часовий проміжок щоб зрозуміти скільки вже релізів було. Складно якщо коротко.


І коли ви вже почати це все нормально опрацьовувати, постає задача що генерувати версії для beta та alpha каналів що робить задачу ще складнішою. Наступне з чим стикається людина що робить автоматизацію проекту це генерація версії до pull request, наприклад для того щоб вигрузити docker image зібраний з цього pull request в docker hub або що.
Уявимо що ви це все зробили. І якщо в вас щось що нагадує semver і patch части міняється автоматично просто i++, то для змінити major або minor треба лізти в скрипти або ж додавати tag руками, що теж явно не ок.


Підзадача яка випливає з цього всього це генерація version code, і тут теж починається або рахування кількості tag або реліз гілок в репозиторії, або ж в проекті появляється txt файл в який CI останім кроком пише наступний version code що теж як на мене не ок, тому що щоб його оновити треба запушити новий commit, і тут вже повляються коміти типу `[skip ci] new version`. Або ж version code почитаються генерувати по принципу version.replace(".-", "").toInt() що теж рано чи пізно поламається тому що так версію 0.2.15 більша за 0.3.1, далі появиться парсинг версії і формула по типу major * 10_000 + minor * 1000 + patch і багато іншого.
І усі ці проблеми можна вирішити якщо вибрати для цього нормальний інструмент, сервіс з базою, щоб було все як положено.
Мій основний посил що задача має бути проста, а кожний раз вирішується якось або складно або погано.


Хочеться сервіс де просто можна завести проект додати йому кілька каналів виставити шаблони для генерації версії. І він буде мати приблизно такий rest:
— GET /<project_name>/<chanel_name>/nextversion
— POST /<project_name>/<chanel_name>/nextversion/released
Авторизація працює по token який можна згенерувати в налаштуванням проекту.
Для чого це все тут, напишіть в коментах чи є у вас така проблема, і чи користувалися ви б таких сервісом, або ж напишіть що це проблема яку я сам собі придумав, і вона є тільки в мене, і я просто напишу рішення тільки для себе, без зазору на якусь універсальність.
Звісно якщо писати універсально то це буде гарно, з UI, готовими github action, прикладами для всяких gitlab pipeline та drone ci, простим rest api і все як положено. Ну і звісно це все діло буде open source (це в любому випадку).
Особливий респект людям що напишуть, чувак твоя проблема вже давно вирішена ось тобі посилання є все що треба.
👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я решил проблему следующим образом: при компиляции проекта через shell-script выполняется такая команда buildvers=$(git describe --tags), дальше это значение вписывается в исполнимый файл (через опции компиляции), и везде куда надо.

Тут більше питання в тому як зробити tag а не як його передати далі

Є купа плагінів:
github.com/markchalloner/git-semver
github.com/...​ovemilk/semver-git-plugin

Більшість можна підлаштувати під себе. Але я не рекомендував би створювати ще одну систему версіонування. Якщо, звісно, це не внутрішній продукт. semver має майже все, що потрібно... І, головне, зрозуміла всім.

допоможіть або я сам її вирішу

Это угроза?

Так, і це ми ще нічого не починали

Підписатись на коментарі