Files
OpenIntegrations/ci/os/ReleasePublisher.os
T

133 lines
5.8 KiB
Plaintext

#Использовать "./internal"
#Использовать "./internal/Classes/internal"
#Использовать "../../src/ru/OInt/tools/http"
#Использовать "../../src/ru/OInt/tools/main"
#Использовать "../../src/ru/OInt/api/yadisk"
Перем ДанныеПроекта;
Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)
Если ДанныеПроекта_ = Неопределено Тогда
ДанныеПроекта = Новый ProjectData;
Иначе
ДанныеПроекта = ДанныеПроекта_;
КонецЕсли;
CommonTools.СообщитьПроцесс("Release publishing");
ОпубликоватьGithub();
ОпубликоватьSourcecraft();
Обработчик = Новый ChangelogGenerator(ДанныеПроекта);
КонецПроцедуры
Процедура ОпубликоватьGithub()
ПолеТокена = ДанныеПроекта.ПолучитьЗначениеНастройки("github.tokenField");
Токен = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокена);
Версия = ДанныеПроекта.ПолучитьЗначениеНастройки("primary.version");
СписокРелизов = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать("https://api.github.com/repos/bayselonarrend/OpenIntegrations/releases")
.ДобавитьBearerАвторизацию(Токен)
.ОбработатьЗапрос("GET")
.ВернутьОтветКакJSONКоллекцию();
IDРелиза = Неопределено;
Попытка
Для Каждого Релиз Из СписокРелизов Цикл
Если Релиз["tag_name"] = Версия Тогда
IDРелиза = Релиз["id"];
Прервать;
КонецЕсли;
КонецЦикла;
Исключение
ВызватьИсключение OPI_Инструменты.JSONСтрокой(СписокРелизов);
КонецПопытки;
Если IDРелиза = Неопределено Тогда
ВызватьИсключение "GitHub: Draft not found!";
Иначе
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDРелиза);
КонецЕсли;
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("draft", Ложь);
ПубликацияРелиза = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать(СтрШаблон("https://api.github.com/repos/bayselonarrend/OpenIntegrations/releases/%1", IDРелиза))
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("PATCH")
.ВернутьОтветКакСтроку();
CommonTools.СообщитьПроцесс(ПубликацияРелиза);
КонецПроцедуры
Процедура ОпубликоватьSourcecraft()
ПолеТокена = ДанныеПроекта.ПолучитьЗначениеНастройки("sourcecraft.tokenField");
Токен = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокена);
Версия = ДанныеПроекта.ПолучитьЗначениеНастройки("primary.version");
СписокРелизов = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать("https://api.sourcecraft.tech/repos/bayselonarrend/openintegrations/releases")
.ДобавитьBearerАвторизацию(Токен)
.ОбработатьЗапрос("GET")
.ВернутьОтветКакJSONКоллекцию();
IDРелиза = Неопределено;
Попытка
Для Каждого Релиз Из СписокРелизов["releases"] Цикл
Если Релиз["tag"] = Версия Тогда
IDРелиза = Релиз["id"];
Прервать;
КонецЕсли;
КонецЦикла;
Исключение
ВызватьИсключение OPI_Инструменты.JSONСтрокой(СписокРелизов);
КонецПопытки;
Если IDРелиза = Неопределено Тогда
ВызватьИсключение "SourceCraft: Draft not found!";
Иначе
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDРелиза);
КонецЕсли;
СозданиеДрафта = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать(СтрШаблон("https://api.sourcecraft.tech/releases/id:%1/publish", IDРелиза))
.ДобавитьBearerАвторизацию(Токен)
.ОбработатьЗапрос("POST")
.ВернутьОтветКакСтроку();
CommonTools.СообщитьПроцесс(СозданиеДрафта);
CommonTools.СообщитьПроцесс("Yandex Disk: Prerelease directory rename");
ПолеТокенаYD = ДанныеПроекта.ПолучитьЗначениеНастройки("sourcecraft.diskTokenField");
ТокенYD = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокенаYD);
ПереименованиеКаталога = OPI_YandexDisk.ПереместитьОбъект(ТокенYD
, "/OpenIntegrations/prerelease"
, СтрШаблон("/OpenIntegrations/%1", Версия));
CommonTools.СообщитьПроцесс(OPI_Инструменты.JSONСтрокой(ПереименованиеКаталога));
КонецПроцедуры