Автоматическое версионирование проектов в 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    14062    123    0    

87

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

В прошлой статье у ERP оставалось 89 отказов загрузки, у ЗУП — 19. Теперь обе конфигурации совпали с эталонами, а собранные файлы прошли круг через платформу. Развертка выделена в открытый репозиторий cf-unwrapper: библиотека на Rust и консольная утилита. Показываю результаты, объясняю границы «100%» и приглашаю к проверкам и развитию проекта.

02.11.2026    321    oyti    1    

1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

Практическое руководство для команд, которые хотят уйти с хранилища конфигурации на git, не переходя на новую среду разработки. Подойдёт разработчикам и тимлидам, которые настраивают командную разработку на типовых и собственных конфигурациях.

02.11.2026    644    vanya_gonchar    2    

6

Файловый обмен (TXT, XML, DBF), FTP DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.5 Бесплатно (free)

В прошлой статье я выгрузил Бухгалтерию в XML байт в байт и спросил, на чем проверить дальше. Вы ответили: ERP, старые релизы, зарплата. Прогнал пять конфигураций, от клиента ЭДО до ERP на 120 тысяч файлов. Рассказываю, что сломалось после Бухгалтерии, почему эталону платформы нельзя верить на слово, как выгрузить одну конфигурацию в формат трех версий платформы - и почему cf-конвертер становится отдельным продуктом, Разверткой.

02.11.2026    430    oyti    2    

3

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

Два разработчика, по десять правок «Нано-УТ 2.0» в git: длинные ветки против слияния после каждой правки, 22 слияния с загрузкой main в чистую базу. ConfigDumpInfo.xml конфликтовал в 11 слияниях из 11, построчное объединение ломало XML и модули. Показываю, что убрать строкой в .gitattributes, что разбирать целыми вставками и как увидеть конфликты до слияния. Прилагаются инструмент с 38 тестами и материалы опыта.

1 стартмани

29.10.2026    414    Ninel_S    3    

-1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    990    oyti    20    

16

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

Скрипт на Python посчитал метрики 2711 общих модулей УТ 11.5: 26 модулей длиннее 10 000 строк кода. Проверила счёт на синтетических модулях и показала, где рейтинг ошибается: самый длинный модуль оказался в нём ниже девяти коротких. Для разработчиков 1С. В архиве скрипт, тесты и журналы.

1 стартмани

26.10.2026    452    Ninel_S    8    

-3

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

Общие модули 1С вынесла в подмодуль Git и подключила к двум проектам на выгрузке «Нано-УТ» и платформе 8.3.27. Подмодуль на весь каталог CommonModules загружается; клон без --recursive даёт код 1, а забытый указатель и смена ветки молча дают базу не той версии. Переименованная процедура прошла /CheckModules при 28 вызовах. В архиве скрипты, диагностика подмодулей, тесты и журналы.

1 стартмани

26.10.2026    433    Ninel_S    0    

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