Проблема створення нових версії, допоможіть або я сам її вирішу
Підписуйтеся на 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 (це в любому випадку).
Особливий респект людям що напишуть, чувак твоя проблема вже давно вирішена ось тобі посилання є все що треба.
5 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів