Автоматическое версионирование проектов в GitHub Actions

31.03.25

Разработка - Групповая разработка (Git, хранилище)

Делегируем задачу версионирования расширений в GitHub Actions.

Наверное, перед каждым разработчиком вставал вопрос о том, какую версию присвоить своему проекту после очередного внесенного в него изменения. 1.0.1? Или 1.1.0? Делать это вручную довольно нудно. В какой-то момент можно просто забыть о том, что версию проекта вообще-то нужно было бы поднять. А в случае командной разработки надо еще следить за тем, чтобы все разработчики ответственно следили за обновлением версии, да еще и нужно остерегаться возможных коллизий, чтобы версии разных разработчиков случайно не пересеклись.

Однако если ваш проект хранится в репозитории на GitHub, то автоматизировать версионирование не составит вам особого труда. Достаточно настроить небольшой Workflow, который будет запускать замечательный инструмент от Google под названием Release Please. С помощью него мы одним выстрелом убьем сразу трех зайцев:

  1. Автоматизируем версионирование
  2. Добавим в проект файл CHANGELOG.MD, в который автоматически будет записываться история внесенных изменений
  3. Автоматизируем выпуск релизов

Release Please сделает всю грязную работу за нас, а в конце сформирует pull request с изменениями, которые мы позже примем в проект.

Все, что потребуется от нас, это соблюдать соглашение о коммитах.


Соглашение о коммитах


Желательно ознакомиться с первоисточником, тем более что он полностью переведен на русский язык.

Но если коротко, то сообщение каждого коммита должно начинаться с определенного типа:

fix - если мы исправили в проекте ошибку. Например:

 

fix: Исправлена ошибка при проведении документа установки цен


Такие коммиты будут повышать номер патча в вашей версии: 0.0.1, 0.0.2, 0.0.3 и т.д.

feat - если мы добавили в проект новый функционал:

feat: Добавлена возможность выбора валюты отчета

 
Такие коммиты будут повышать минорную версию: 0.1.0, 0.2.0, 0.3.0 и т.д.

Встает вопрос когда и как повышать мажорную версию проекта - 1.0.0, 2.0.0, 3.0.0? Если следовать все тому же соглашению, то повышать мажорную версию нужно только тогда, когда в ваш проект внесены "обратно несовместимые изменения", т.е. когда конечному пользователю просто обновиться на новую версию будет недостаточно - придется еще что-то менять и перенастраивать. А выпустить такую версию можно очень просто: достаточно после типа добавить восклицательный знак (!). Например:

feat!: Реализована новая версия API


Альтернативный вариант мажорного обновления - это использование в теле коммита словосочетания "BREAKING CHANGE":

feat: Реализована новая версия API

BREAKING CHANGE: Старая версия API более не поддерживается

 

Помимо fix и feat мы можем использовать и другие типы в сообщениях коммитов: docs, ci, chore, test и другие, но на версионирование такие сообщения уже влиять не будут - они нужны скорее как сигналы.


Практический пример


Перейдем от слов к действию. Рассмотрим весь процесс на реальном примере - в расширении для интеграции 1С и Telegram затесалась ошибка, после исправления которой мы хотим автоматически поднять версию релиза с 0.12.0 на 0.12.1.

Перед тем как взяться за исправление ошибки, настроим Workflow.

Разработка расширения ведется в EDT, настроена работа с репозиторием в GitHub. Все исходники нашего проекта, которые в последствии и выгружаются в репозиторий, хранятся по следующему пути:




Именно с исходниками мы и будем работать, но только сделаем это не через EDT, а с помощью VS Code. Предварительно создадим отдельную ветку для настройки CI в GitHub, переключимся на эту ветку, и уже после этого откроем каталог 1c-telegram-bot-management в VS Code. 

Далее делаем следующее:

Создаем каталог .github\workflows, в котором инициализируем файл release-build.yml со следующим содержимым:

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write

name: release-please

jobs:
  release-please:
    runs-on: ubuntu-latest
    steps:
      - uses: googleapis/release-please-action@v4
        with:
          token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}


Именно этот файл и будет у нас запускаться в GitHub Actions. Вызываться он будет автоматически при каждом push в ветку main или же при ручном вызове (за это отвечает строчка workflow_dispatch). Этим файлом выполняется лишь одно действие: запускается release-please-action. Под это же действие мы выдаем права на внесение изменений и создание pull request (секция permissions), а также передаем токен авторизации.

 
 Где получить и сохранить секретный токен?


Далее создаем еще два файла специально под настройки Release Please: 

.release-please-manifest.json, в котором указываем текущую версию нашего проекта:

{".":"0.12.0"}

И release-please-config.json, в котором прописываем настройки Release Please:

{
  "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
  "release-type": "simple",
  "extra-files": [
    "Управление_торговлей_демо_Telegram.TelegramBotManagement/src/Configuration/Configuration.mdo"
  ],
  "packages": {
    ".": {}
  }
}

На файле release-please-config.json остановимся чуть подробнее. Здесь мы указали две важные настройки:

  • release-type - Release Please из под коробки поддерживает версионирование проектов на самых разных стеках - node, php, dart, python и многих других. Конечно, 1С в этом списке нет, поэтому мы выбираем тип релиза simple.
  • extra-files - так как Release Please сам не знает, где в 1С хранится информация о версии проекта (в данном случае речь о версии расширения), то путь к этому файлу нужно указать вручную. Именно по пути Управление_торговлей_демо_Telegram.TelegramBotManagement/src/Configuration/Configuration.mdo и содержится информация корневого узла расширения, в том числе и его версия. Кроме того, внутри этого файла нужно с помощью специального комментария (<!-- x-release-please-version -->) указать конкретную позицию, где указана версия. В последствии Release Please с помощью регулярного выражения разберет эту строчку и заменит номер версии на новый.




С полным описанием доступных свойств файла release-please-config.json можно ознакомиться здесь.

В итоге у нас должна получиться такая картина:




Коммитим изменения, и мерджим с основной веткой.

Теперь создаем новую ветку для того, чтобы исправить ошибку. Возвращаемся в EDT, переключаемся на новую ветку, исправляем ошибку, и вот настал момент истины - коммитим и пушим изменения:



Далее создаем pull request и мерджим изменения в основную ветку. Если все сделано правильно, то сразу после этого у нас автоматически срабатывает GitHub Action:



А в результате его исполнения у нас появляется автоматический pull request:



Смотрим, какие файлы были изменены:



Отлично! Изменен номер версии расширения, плюс создан новый файл CHANGELOG.MD с историей изменений.



Принимаем pull request и смотрим дальше: у нас появился автоматический релиз!



Ну и напоследок возвращаемся в EDT, переключаемся на основную ветку, получаем изменения и видим - версия действительно обновилась, как мы того и хотели:



Ложка дегтя

Есть два очевидных недостатка. Во-первых, хотелось бы, чтобы при создании релиза из исходников EDT автоматически собирался файл .cfe. К сожалению, пока не удалось найти способ сделать это внутри GitHub Actions без установленной платформы. Буду рад, если кто подскажет, как это можно было бы реализовать. Или же можно все-таки установить платформу и собрать .cfe через интерфейс командной строки.

Во-вторых, этот сценарий отлично подходит при работе в EDT, но при работе из конфигуратора (например, хранилище + Git) постоянно будет стираться обязательный комментарий напротив версии (<!-- x-release-please-version -->). Но думаю, что эту проблему вполне можно обойти с помощью OneScript.

Кроме того, Release Please доступен в виде CLI (подробнее), поэтому вполне возможно, что вы сможете воспользоваться этим инструментом так, как это подойдет под ваше окружение.

На этом все. Спасибо за внимание!

Вступайте в нашу телеграмм-группу Инфостарт

CI GitHub GitHub Actions Версионирование

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    4495    32    0    

20

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) EDT Разработчик 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Разобрали, как выстроить CI для 1С 8.3 на EDT и Git: ветки с автослиянием, Jenkins и Pipeline Libraries, подготовка эталонной ИБ на каждый MR, Vanessa и xUnitFor1C в Allure. Материал для инструментальщика, который проектирует проверки до master, а не после релиза.

вчера в 17:30    169    zolotov7481    0    

0

Инструментарий разработчика DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С 8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление холдингом Бесплатно (free)

Практическое руководство по выстраиванию процессов версионирования в экосистеме «1С:Предприятие 8»: разбор физики сериализации метаданных, скрытые риски построчного слияния XML, сайзинг 1C:EDT vs gitsync/ibcmd и поэтапный конвейер миграции без остановки релизов.

22.09.2026    524    Ninel_S    0    

0

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Информационная безопасность Инструменты администратора БД Системный администратор Разработчик 1С 8.3 Беларусь Россия Казахстан Абонемент ($m)

Как реализовать безопасное маскирование данных в процессе CI/CD без создания промежуточных копий баз. Объясняем, как использовать инструмент pg_anon для автоматизации скрытия персональных данных при тестировании и развёртывании, сохраняя целостность и структуру информации. Материал объединяет практику Site Reliability Engineering (SRE) с задачами защиты данных, демонстрируя подход, при котором разработчики и DevOps;инженеры могут работать с реалистичными, но обезличенными данными, не нарушая требования безопасности и конфиденциальности.

1 стартмани

11.09.2026    1050    Ninel_S    0    

0

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Системный администратор Разработчик Руководитель проекта Стажер 1С 8.3 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1C:ERP Беларусь Россия Казахстан Абонемент ($m)

В четвёртой части серии SRE-Suite-for-1C-platform мы переходим к практической автоматизации развёртывания отказоустойчивого кластера PostgreSQL для высоконагруженных систем 1С на Linux. В материале подробно разбирается инженерное решение без HAProxy — с использованием виртуального IP-адреса и vip-manager от CYBERTEC, обеспечивающего прямое подключение к активному мастеру без лишних задержек и точек отказа. Показана структура Ansible-модуля: подготовка ОС, развёртывание etcd, настройка Patroni с параметрами для больших нагрузок 1С. В конфигурационный шаблон Patroni автоматически закладываются параметры, критически важные для высоконагруженных баз данных, запуск vip-manager и полная автоматизация создания трёхнодового кластера. В конце — пошаговый Quick Start и планы развития модуля, включая резервное копирование, оптимизацию ОС Linux и rolling updates PostgreSQL.

1 стартмани

11.09.2026    913    Ninel_S    0    

0

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

В корпоративных инсталляциях «1С:Предприятие 8.3» под управлением PostgreSQL всё чаще проявляются архитектурные пределы масштабирования: рост числа пользователей, обязательная маркировка, плотный поток API-интеграций и высокая стоимость простоя. Вводная часть цикла разбирает ключевые факторы современной эксплуатационной нагрузки и формирует инженерную методологию эволюционной модернизации без остановки продуктивного контура. Материал основан на практическом кейсе «Торговый контур» и показывает, как определить целевые метрики (p95, MTTR, APDEX), выстроить наблюдаемость, стабилизировать работу кластера и подготовить инфраструктуру к дальнейшему масштабированию. Публикация задаёт фундамент для последующих частей, посвящённых телеметрии, оптимизации PostgreSQL, CI/CD и архитектурному росту.

1 стартмани

10.09.2026    923    Ninel_S    0    

5

DevOps и автоматизация разработки Linux HighLoad оптимизация Групповая разработка (Git, хранилище) Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С 8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Беларусь Россия Казахстан Абонемент ($m)

Системный анализ архитектурных границ масштабирования учетных систем «1С:Предприятие 8.3» под управлением PostgreSQL в ОС Linux. Формулирование инженерной методологии сквозного проекта «Торговый контур», определение измеримых целевых показателей (p95, MTTR, APDEX) и стратегии поэтапной модернизации эксплуатационного контура без остановки промышленных учетных процессов.

1 стартмани

07.09.2026    1199    Ninel_S    10    

1

Linux Групповая разработка (Git, хранилище) Администрирование СУБД Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Декларативный pipeline в GitHub Actions, тонкости лицензирования в Docker (--net=host), изоляция RUN_ID и интеграция со сборочным конвейером SRE-Suite-for-1C-platform. Вторая часть практического руководства (https://infostart.ru/public/2779597): от первого коммита до детерминированного синтаксического гейта на headless-раннере Linux

1 стартмани

03.09.2026    1664    Ninel_S    0    

4
Для отправки сообщения требуется регистрация/авторизация