Git Code Review - инструмент для рецензирования кода

11.01.24

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

Git Code Review - инструмент, позволяющий быстро анализировать изменения из git-репозитория прямо в 1С

Скачать исходный код

Наименование Файл Версия Размер
Git Code Review (расширение)
.cfe 1,54Mb
24
.cfe 20240111 1,54Mb 24 Скачать
Git Code Review (обработка)
.epf 1,54Mb
37
.epf 20240111 1,54Mb 37 Скачать

Всё еще не выгружаете конфигурацию в git? Самое время начать!

Code Review тема в комьюнити 1С довольно популярная. На конференциях и в публикациях на Инфостарте можно услышать и почитать, что процесс этот очень даже желательный, если вы хотите выдавать качественный продукт.

К сожалению, инструментов для удобного рецензирования кода не так много.

Большинство команд используют возможности облачных платформ для хостинга кода, например, Github или GitLab. Платформы классные, я бы даже сказал, незаменимые. Правда, проверять новый код в них немного непривычно. Кроме того, в зависимости от настроек CI, код может попадать на проверку не сразу. В этом нет ничего плохого, скорее даже наоборот.

Однажды, смотря на очередной Merge Request в GitLab, мне пришла в голову идея сделать свой велосипед инструмент для проверки вносимых изменений, который бы позволил в более или менее привычном виде анализировать различия в коде.

Как всегда, любая конструктивная критика и предложения по доработке горячо приветствуются!

Как это работает?

Обработка под капотом запускает различные команды git в каталоге репозитория с конфигурацией 1С и анализирует полученные данные. Отсюда следует, что на клиентской машине как минимум должен быть установлен этот самый git.

Системные требования:

  • Установленный git
  • Операционная система Windows или Linux
  • Платформа не ниже 8.3.14.1565
  • Конфигурация на основе БСП
  • Локальный репозиторий с исходниками конфигурации (не в формате EDT)

Возможности:

Обработка позволяет прочитать список всех версий из локального репозитория (коммиты/commits). Для каждой версии или диапазона версий вывести изменения. В полученные изменения добавить свои замечания и/или замечания bsl-language-server, а затем отправить полученный результат на ознакомление/исправление виновнику изменений.

 

Список изменений

 

Для измененных объектов определяются не только изменения модулей, но и изменения реквизитов, табличных частей, команд, измерений. На данный момент определяются не все изменения. Механизм еще будет дорабатываться, но уже сейчас можно быстро понять, что конкретно изменилось в том или ином объекте метаданных, вместо того, чтобы анализировать глазами изменения в виде xml.

Есть возможность для списка коммитов определять номер версии хранилища, если для выгрузки конфигурации использовался gitsync

 
 Пример получения изменений для диапазона версий (коммитов)

 

Процесс рецензирования или Code Review:

Замечания могут вноситься руками. Для этого используемый в инструменте редактор кода был специально доработан. На практике это выглядит следующим образом:

Добавление замечания

Дополнительно к процессу проверки можно подключить bsl-language-server. Изначально задумывалось получать изменения из SonarQube. Делать это не сложно, но есть один очень важный нюанс. Нужно как-то гарантировать, что код и его анализ в проекте SonarQube соответствует тому, что мы проверяем в данный момент, а сделать это сложно. Если просто брать все замечания из Сонара, то легко можно столкнуться с ситуацией, когда версия кода в нём отличается от текущей и все замечания мягко говоря не актуальны. Именно поэтому выбор был сделан в пользу BSLLS.

 
 Пример использования BSL Language Server

Результаты рецензирования:

Результат проверки можно сохранить в хранилище настроек или файл. При использовании первого варианта достаточно отправить уникальный идентификатор проверки автору изменений. Затем с помощью идентификатор можно будет открыть и посмотреть все замечания. Для использования данного варианта необходимо процедуру Code Review и работу с результатами выполнять в одной базе.

Сам рецензент в любой момент может видеть все проведенные проверки, возвращаться к ним, просматривать или удалять по истечении какого-то срока.

 
 Пример работы с результами Code Review

При использовании расширения появляется возможность делиться навигационной ссылкой, при переходе по которой автор изменений сразу увидит все результаты проверки его кода.

Особенности и известные проблемы:

  • В linux могут наблюдаться некоторые проблемы с отображением замечаний в редакторе кода
  • git не всегда отдает читаемые названия измененных файлов. В обработку встроена проверка и, возможно, придется выполнить одну простую команду в консоли вручную.
  • Формат исходников EDT пока не поддерживается

Планы по развитию:

  • Расширить количество анализируемых изменений в объектах метаданных
  • Добавить интеграцию с paste1c.ru
  • Добавить возможность отвечать на замечания, выявленные в процессе Code Review

Тестировалось в следующих условиях:

  • Windows 10 x64, релизы платформы 8.3.18.1616, 8.3.23.1688
  • Linux Ubuntu 22.04 x64 релиз платформы 8.3.23.1596

Похожие разработки:

 
 История изменений

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.15.69

git code review проверка кода bsl language server консоль кода

См. также

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9471    78    4    

112

Обновляемый список последних статей Инфостарт для профиля Github

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

Не знаете, чем бы таким заполнить свой профиль Github? Заполните его своими статьями на Инфостарт! Этот простой workflow сам соберет список ваших последних статей и будет периодически обновлять его для актуализации данных.

08.04.2024    947    bayselonarrend    2    

31

Процесс разработки с использованием GIT и расширений для 1С:ERP. Без EDT

Групповая разработка (Git, хранилище) Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Доработки 1С:ERP на крупных проектах можно организовать, не внося изменения в саму типовую конфигурацию, а используя только расширения и отдельные «микроконфигурации». Расскажем о том, как это сделать без EDT, используя процесс разработки GitHub Flow.

02.04.2024    5032    Begemoth80    24    

45

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1619    bayselonarrend    3    

38

Автоматизация процесса разработки с помощью сервиса GitFlic

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

GitFlic – первая в России полностью самостоятельная реализация сервиса для хранения репозиториев с исходным кодом. За три года разработки сервис GitFlic стал полноценным инструментом, которым можно заменить GitLab, GitHub и BitBucket. Расскажем о том, как выстроить в GitFlic процесс автоматического тестирования, статического анализа кода и сборки приложений.

05.03.2024    2135    user1989937    6    

16

OpenYellow - рейтинг открытых GitHub репозиториев для платформы 1С:Предприятие

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

Обновляемый топ GitHub репозиториев для 1С по всем языкам программирования и еще немного рассуждений про open-source.

05.02.2024    4085    bayselonarrend    15    

63

Насколько глубок 1С-ный GitHub?

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

Open-source проекты - важная часть мира программного обеспечения. 1С привычно держится немного в стороне от глобальных трендов, но бросить холодный статистический взгляд на положение дел мне показалось небезынтересным.

22.01.2024    8123    bayselonarrend    50    

87

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    3065    kamisov    17    

60
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1530 20.12.23 12:21 Сейчас в теме
ОГОНЬ! Большущее спасибо!
2. artbear 1530 20.12.23 12:33 Сейчас в теме
(0) Опечатка - Процесс резцензирования
3. leobrn 617 20.12.23 12:34 Сейчас в теме
Тоже крутил в этом направлении для конфигурации для ревью https://infostart.ru/profile/350139/, но проект так и не доехал до гитхаба. Дополнительно еще добавлял проверку напрямую через bsl ls. Потом все замечания улетали в Jira.
Прикрепленные файлы:
5. salexdv 2332 20.12.23 13:14 Сейчас в теме
(3) Было бы классно, если бы получилось доделать. Инструментов много не бывает
15. Tahallus 439 20.12.23 17:40 Сейчас в теме
(3) в итоге какая судьба у "Ревьювер" ? Будет скоро представлен или забили на него ?
Видел только статью с описанием, но самого продукта вроде нет.
16. leobrn 617 21.12.23 07:41 Сейчас в теме
17. Tahallus 439 21.12.23 11:48 Сейчас в теме
(16) не думали выложить в open-sourse как есть? Там глядишь сообщество подхватило бы.
20. leobrn 617 21.12.23 15:50 Сейчас в теме
(17) Думал. Надо уже видимо так и сделать
4. RustIG 1619 20.12.23 12:39 Сейчас в теме
(0) не могу проверить, но, кажется, как всегда "круто". Скачал - поддержал проект.
6. vandalsvq 1550 20.12.23 13:28 Сейчас в теме
Великолепно, здорово, замечательно. Даже не знаю какие еще эпитеты придумать.
И еще, класс что редактор развивается, есть надежда что какие-то наработки перекочуют и в основной репозиторий ))))
7. comptr 31 20.12.23 13:38 Сейчас в теме
По поводу навигационных ссылок.
Во-первых, насколько я понял, обработка должна быть встроена в конфу.
Во-вторых, нужно переопределить обработчики генерации навигационной ссылки в форме обработки, ограничений на вид навигационной ссылки, вроде бы, нет:

&НаКлиенте
Процедура ОбработкаПолученияСпискаНавигационныхСсылок(Элемент, СписокНавигационыхСсылок, КлючПоУмолчанию)
	Элемент.Очистить();
	Элемент.Добавить("ФормаРевью", СтрШаблон(НСтр("ru='Результат ревью %1'"), ГУИД), Ложь); // ГУИД - строковый реквизит формы, для примера.
	КлючПоУмолчанию = "ФормаРевью";	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаПолученияНавигационнойСсылки(Элемент, Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка)
	Если Элемент = "ФормаРевью" Тогда
		СтандартнаяОбработка = Ложь;
		НачалоСсылки = "e1cib/app/Обработка.Тест_НавигационнаяСсылка";
		Представление = НачалоСсылки + "?ref=" + ГУИД;
		НавигационнаяСсылка = Представление;
	КонецЕсли;
КонецПроцедуры
Показать


В-третьих, нужно добавить обработку своей навигационной ссылки в модуле приложения:

Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка)
	
	НачалоВхождения = СтрНайти(ДанныеПереходаПоНавигационнойСсылке.ОтносительнаяНавигационнаяСсылка, "e1cib/app/Обработка.Тест_НавигационнаяСсылка?ref=");
	Если НачалоВхождения > 0 Тогда
		СтандартнаяОбработка = Ложь;
		// В конце строки могут быть управляющие символы (например ETX), которые невозможно передать с клиента на сервер
		ГУИД = Лев(ДанныеПереходаПоНавигационнойСсылке.ПараметрыНавигационнойСсылки.Получить("ref"), 36); 
		ПараметрыОткрытия = Новый Структура("ГУИД", ГУИД);
		ОткрытьФорму("Обработка.Тест_НавигационнаяСсылка.Форма.МояФорма", ПараметрыОткрытия);
	КонецЕсли;
	
КонецПроцедуры
Показать


В-четвертых, в форме обработки нужно обработать полученный параметр в ПриСозданииНаСервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("ГУИД") Тогда
		ГУИД = Параметры.ГУИД;
	КонецЕсли;
КонецПроцедуры


На что влияет Ключ в ОбработкаПолученияНавигационнойСсылки - я уже не помню :)
10. salexdv 2332 20.12.23 13:47 Сейчас в теме
(7) Я пробовал это сделать. На платформе 8.3.23 не получилось. Не исключаю, что просто у меня кривые руки. Спасибо за примеры!
12. comptr 31 20.12.23 13:51 Сейчас в теме
(10) этот пример работает и на 22-й и на 24-й платформе.
Прикрепленные файлы:
НавигационнаяСсылкаВОбработке.cf
8. Serg O. 265 20.12.23 13:39 Сейчас в теме
прикольно, большой +

небольшие замечания...
1) если обработка анализирует локальную папку (синхронизированную с git-репозиторием), то она должна (и будет) работать и при ручных выгрузках в файлы... с последующей (ручной) заливкой в gitHub.

2) кроме gitsynс есть выгрузка внешних отчетов/обработок и последующая раскладка файлов epf / erf в текстовые файлы... с помощью плагина OneScript - Precommit1C ... которые так же будут анализироваться в git
а значит и в этой обработке то же.

и вообще любые файлы txt, csv, md можно анализировать (и тут наверное тоже)...
а файлы Word, Excel, схемы, графики и картинки даже git не умеет анализировать
11. salexdv 2332 20.12.23 13:49 Сейчас в теме
(8) Первый вариант должен работать. Второй вариант, возможно, не взлетит без доработки. Надо попробовать. Спасибо!
Файлы отличные от *.bsl и *.xml анализировать смысла особо не вижу, если только *.mxl еще.
9. comptr 31 20.12.23 13:45 Сейчас в теме
Возможно, стоит сразу делать это не отдельной обработкой, а конфигурацией? Тогда можно хранить результаты ревью в документе, раскидав всю инфу о процессе по реквизитам и табличным частям. Какие-то сложные вещи можно закидывать в реквизиты с типом ХранилищеЗначений.
Ну или хотя бы справочник, для начала.
dmpas; salexdv; +2 Ответить
13. user1636469 20.12.23 14:49 Сейчас в теме
зачем это, если есть EDT
14. smit1c 106 20.12.23 14:55 Сейчас в теме
18. nixel 1409 21.12.23 14:17 Сейчас в теме
@salexdv приходи в чат, все интеграции с бсл лс какие надо настроим) веб-сокеты в релизе, если вдруг бсл лс не реагирует на какое-то действие в diff-режиме - пингуй, подкрутим или придумаем как обойти на стороне обработки.

А так - огонь-огонь!
Totoro; salexdv; +2 Ответить
19. salexdv 2332 21.12.23 15:30 Сейчас в теме
(18) Спасибо за классный продукт!
21. salexdv 2332 23.12.23 16:03 Сейчас в теме
Новое:
1. Добавил поставку в виде расширения, где можно делиться результатом в виде навигационных ссылок
2. Добавил вывод замечаний BSL Language Server в виде маркеров и CodeLens
3. Добавил возможность выбора веток
22. iD1n 11 27.12.23 09:56 Сейчас в теме
23. TheRunMan 09.01.24 11:01 Сейчас в теме
Чет не работает

Репозиторий с исходниками есть, открываю его, комиты видит, а справа список объектов пустой и соответственно изменения тоже не отображаются

Upd: Оказывается это работает только если git инициализирован прямо вместе с исходниками, указать например подпапку src/cf нельзя, просто ничего не отображается тогда. Странно конечно. Мне кажется редко можно увидеть, что в гите лежат чисто исходники и больше ничего.
24. salexdv 2332 09.01.24 13:34 Сейчас в теме
(23) Такого быть не должно. По коммитам определяется "корень" конфигурации и от него уже вычисляются все изменения метаданных. Проверю.
25. TheRunMan 10.01.24 04:45 Сейчас в теме
(24) Ну может я чет не так делаю конечно, просто указал папку где лежит .git и все он комиты видит и больше ничего. Указывал и подпапку, тогда там куча ошибок сыпет каких-то и тоже не отображает. Попробовал вот как я выше описал, тогда все ок.
26. salexdv 2332 11.01.24 14:49 Сейчас в теме
(25) Одной из причин такого поведения могло быть изменение каталога хранения исходников конфигурации. Доработал, теперь корень конфигурации определяется иначе и такой проблемы быть не должно.
Оставьте свое сообщение