1+ #Использовать 1commands
2+
3+ Функция ПолучитьВерсию (ПутьКФайлу )
4+ ТекстовыйФайл = Новый ТекстовыйДокумент;
5+ ТекстовыйФайл.Прочитать(ПутьКФайлу + "/src/cf/Configuration.xml" , КодировкаТекста.UTF8, Символы.ВК + Символы.ПС);
6+ СтрокаВерсии = ВРег (ТекстовыйФайл.ПолучитьТекст());
7+ ПозицияСтарта = Найти (СтрокаВерсии, "<VERSION>" ) + 9 ;
8+ ПозицияОкончания = Найти (СтрокаВерсии, "</VERSION>" );
9+ ЧислоСимволов = ПозицияОкончания - ПозицияСтарта;
10+ Версия = Сред (СтрокаВерсии, ПозицияСтарта, ЧислоСимволов);
11+
12+ Возврат Версия;
13+ КонецФункции
14+
15+ Функция ПолучитьКоммиты (КаталогРепозитария , ДатаПоследнегоАнализа )
16+ КомандаГит = Новый Команда();
17+ КомандаГит.УстановитьКоманду("git" );
18+ КомандаГит.ДобавитьПараметр("log" );
19+ КомандаГит.ДобавитьПараметр("--reverse" );
20+ КомандаГит.ДобавитьПараметр("--pretty=format:"" %h | %cd"" " );
21+ КомандаГит.ДобавитьПараметр("--date=format:%Y%m%d" );
22+ КомандаГит.ДобавитьПараметр("--branches="" master*"" " );
23+ КомандаГит.УстановитьРабочийКаталог(КаталогРепозитария);
24+
25+ КомандаГит.Исполнить();
26+
27+ КоммитыСДатами = СтрРазделить (КомандаГит.ПолучитьВывод(), Символы.ПС, Ложь );
28+ Коммиты = Новый ТаблицаЗначений();
29+ Коммиты.Колонки.Добавить("Коммит" );
30+ Коммиты.Колонки.Добавить("КоммитДата" );
31+
32+ ПоследняяДатаКоммита = Дата (СтрЗаменить (ДатаПоследнегоАнализа, "-" , "" ));
33+
34+ Для Каждого КоммитСДатой Из КоммитыСДатами Цикл
35+ ТекКоммитСДатой = СтрРазделить (КоммитСДатой, "|" );
36+ ДатаКоммитаСтрокой = СокрЛП (ТекКоммитСДатой[1 ]);
37+ ДатаКоммита = Дата (ДатаКоммитаСтрокой);
38+ Если ДатаКоммита > ПоследняяДатаКоммита Тогда
39+ ПоследняяДатаКоммита = ДатаКоммита;
40+ СтрокаТЗ = Коммиты.Добавить();
41+ СтрокаТЗ.Коммит = СокрЛП (ТекКоммитСДатой[0 ]);
42+ СтрокаТЗ.КоммитДата = Формат (ДатаКоммита, "ДФ="" гггг-ММ-дд"" " );
43+ КонецЕсли ;
44+ КонецЦикла ;
45+
46+ Возврат Коммиты;
47+ КонецФункции
48+
49+ Процедура Старт ()
50+ АдресСонара = "http://localhost:9000/" ; // адрес сервера sonarqube
51+ КлючПроекта = "" ; // ключ проекта на sonarqube
52+ НаименованиеПроекта = "=" ; // название проекта на sonarqube
53+ КаталогРепозитария = "" ; // /path/to/project
54+ ДатаПоследнегоСкана = "" ; // например 2020-01-01
55+ ТокенСонара = "" ; // токен в sonarqube
56+
57+ Сообщить ("Получаю список коммитов" );
58+
59+ КоммитыДляСканирования = ПолучитьКоммиты(КаталогРепозитария, ДатаПоследнегоСкана);
60+ КоличествоКоммитовКОбработке = КоммитыДляСканирования.Количество();
61+ Сообщить ("Начинаю обработку коммитов. Всего к обработке : " + КоличествоКоммитовКОбработке);
62+
63+ Для Индекс = 0 По КоличествоКоммитовКОбработке - 1 Цикл
64+
65+ ТекКоммит = КоммитыДляСканирования[Индекс].Коммит;
66+ ТекКоммитДата = КоммитыДляСканирования[Индекс].КоммитДата;
67+
68+ Сообщить ("Переключаюсь на коммит : " + ТекКоммит + " от " + ТекКоммитДата);
69+ КомандаЧекаут = Новый Команда();
70+ КомандаЧекаут.УстановитьКоманду("git" );
71+ КомандаЧекаут.ПоказыватьВыводНемедленно(Ложь );
72+ КомандаЧекаут.ДобавитьПараметр("checkout" );
73+ КомандаЧекаут.ДобавитьПараметр(ТекКоммит);
74+ КомандаЧекаут.УстановитьРабочийКаталог(КаталогРепозитария);
75+ КомандаЧекаут.Исполнить();
76+
77+ ВерсияВКоммите = ПолучитьВерсию(КаталогРепозитария);
78+
79+ Сообщить ("Запускаю сканирование : " + СокрЛП (Индекс + 1 ) + "/" + КоличествоКоммитовКОбработке);
80+ КомандаСканера = Новый Команда();
81+ КомандаСканера.УстановитьКоманду("D:/sonar-scanner/bin/sonar-scanner.bat" );
82+ КомандаСканера.ПоказыватьВыводНемедленно(Ложь );
83+ КомандаСканера.ДобавитьПараметр("-Dsonar.login=" + ТокенСонара);
84+ КомандаСканера.ДобавитьПараметр("-Dsonar.host.url=" + АдресСонара);
85+ КомандаСканера.ДобавитьПараметр("-Dsonar.projectKey=" + КлючПроекта);
86+ КомандаСканера.ДобавитьПараметр("-Dsonar.projectName=" + НаименованиеПроекта);
87+ КомандаСканера.ДобавитьПараметр("-Dsonar.projectBaseDir=" + КаталогРепозитария);
88+ КомандаСканера.ДобавитьПараметр("-Dsonar.sources=" + КаталогРепозитария + "\src" );
89+ КомандаСканера.ДобавитьПараметр("-Dsonar.sourceEncoding=UTF-8" );
90+ КомандаСканера.ДобавитьПараметр("-Dsonar.inclusions=**/*.bsl" );
91+ КомандаСканера.ДобавитьПараметр("-Dsonar.scm.enabled=true" );
92+ КомандаСканера.ДобавитьПараметр("-Dsonar.scm.provider=git" );
93+ КомандаСканера.ДобавитьПараметр("-Dsonar.scm.exclusions.disabled=true" );
94+ КомандаСканера.ДобавитьПараметр("-Dsonar.projectDate=" + ТекКоммитДата);
95+ КомандаСканера.ДобавитьПараметр("-Dsonar.projectVersion=" + ВерсияВКоммите);
96+ КомандаСканера.Исполнить();
97+
98+ Сообщить ("Сканирование завешено " );
99+ Сообщить (КомандаСканера.ПолучитьВывод());
100+ Сообщить ("Коммит " + ТекКоммит + " от " + ТекКоммитДата + " обработан." );
101+ Сообщить ("Осталось еще обработать : " + (КоличествоКоммитовКОбработке - Индекс - 1 ));
102+ КонецЦикла ;
103+ КонецПроцедуры
0 commit comments