1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-04-26 20:43:22 +02:00

Доработка генерации драфтов

This commit is contained in:
Anton Titovets
2026-03-15 11:30:55 +03:00
parent a8ea750a3b
commit a42f0edeb9
9 changed files with 831 additions and 686 deletions
+639 -631
View File
File diff suppressed because it is too large Load Diff
+147 -45
View File
@@ -3,6 +3,8 @@
#Использовать "../../../../src/ru/OInt/tools/main"
Перем ДанныеПроекта;
Перем Версия;
Перем КаталогШаблонов;
Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)
@@ -14,16 +16,34 @@
CommonTools.СообщитьПроцесс("Draft initialization");
СоздатьДрафтGithub();
СоздатьДрафтSourcecraft();
Версия = ДанныеПроекта.ПолучитьЗначениеНастройки("primary.version");
КаталогШаблонов = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.templatesSrc");
ПутьФайлаChangelog = "./service/releases.json";
ДанныеChangelog = CommonTools.ПрочитатьФайлJSON(ПутьФайлаChangelog);
ДанныеТекущего = Неопределено;
Для Каждого Релиз Из ДанныеChangelog Цикл
Если Релиз["version"] = Версия Тогда
ДанныеТекущего = Релиз;
Прервать;
КонецЕсли;
КонецЦикла;
Если ДанныеТекущего = Неопределено Тогда
ВызватьИсключение "Changelog for current version not found!";
КонецЕсли;
СоздатьДрафтGithub(ДанныеТекущего);
СоздатьДрафтSourcecraft(ДанныеТекущего);
КонецПроцедуры
Процедура СоздатьДрафтGithub()
Процедура СоздатьДрафтGithub(Знач Данные)
ПолеТокена = ДанныеПроекта.ПолучитьЗначениеНастройки("github.tokenField");
Токен = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокена);
Версия = ДанныеПроекта.ПолучитьЗначениеНастройки("primary.version");
ПолеТокена = ДанныеПроекта.ПолучитьЗначениеНастройки("github.tokenField");
URLКонтента = ДанныеПроекта.ПолучитьЗначениеНастройки("github.contentPath");
Токен = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокена);
СписокРелизов = OPI_ЗапросыHTTP
.НовыйЗапрос()
@@ -32,13 +52,14 @@
.ОбработатьЗапрос("GET")
.ВернутьОтветКакJSONКоллекцию();
IDРелиза = Неопределено;
Попытка
Для Каждого Релиз Из СписокРелизов Цикл
Если Релиз["tag_name"] = "draft" Тогда
CommonTools.СообщитьПроцесс("GitHub: Draft already exist");
Возврат;
IDРелиза = Релиз["id"];
КонецЕсли;
Если Релиз["tag_name"] = Версия Тогда
@@ -52,39 +73,77 @@
ВызватьИсключение OPI_Инструменты.JSONСтрокой(СписокРелизов);
КонецПопытки;
КаталогШаблонов = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.templatesSrc");
CommonTools.СообщитьПроцесс("GitHub: Init new draft...");
Если IDРелиза = Неопределено Тогда
CommonTools.СообщитьПроцесс("GitHub: Init new draft...");
Иначе
CommonTools.СообщитьПроцесс("GitHub: Update draft...");
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDРелиза);
КонецЕсли;
ПутьШаблона = ОбъединитьПути(КаталогШаблонов, "gh_draft.txt");
ШаблонДрафта = ПолучитьСтрокуИзДвоичныхДанных(Новый ДвоичныеДанные(ПутьШаблона));
ТекстДрафта = СтрШаблон(ШаблонДрафта, Версия);
ТекущаяДата = Формат(ТекущаяДата(), "ДЛФ=D");
МассивИзменений = Новый Массив;
ШаблонИзменений = "| <img src=""%1%2"" width=""32""/> | %3 | %4 |";
Для Каждого Изменение Из Данные["changes"] Цикл
ТекущееИзменение = СтрШаблон(ШаблонИзменений
, URLКонтента
, Изменение["icon"]
, Изменение["description_ru"]
, Изменение["description_en"]);
МассивИзменений.Добавить(ТекущееИзменение);
КонецЦикла;
ТекстДрафта = СтрШаблон(ШаблонДрафта
, Версия
, Данные["summary_ru"]
, Данные["summary_en"]
, СтрСоединить(МассивИзменений, Символы.ПС)
, URLКонтента
, Данные["image"]);
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("tag_name" , "draft");
СтруктураЗапроса.Вставить("name" , СтрШаблон("Version %1 - %2", Версия, ТекущаяДата));
СтруктураЗапроса.Вставить("name" , Данные["title"]);
СтруктураЗапроса.Вставить("body" , ТекстДрафта);
СтруктураЗапроса.Вставить("draft" , Истина);
СтруктураЗапроса.Вставить("prerelease" , Ложь);
СозданиеДрафта = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать("https://api.github.com/repos/bayselonarrend/OpenIntegrations/releases")
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("POST")
.ВернутьОтветКакСтроку();
Если ЗначениеЗаполнено(IDРелиза) Тогда
CommonTools.СообщитьПроцесс(СозданиеДрафта);
Результат = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать(СтрШаблон("https://api.github.com/repos/bayselonarrend/OpenIntegrations/releases/%1", IDРелиза))
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("PATCH")
.ВернутьОтветКакСтроку();
Иначе
Результат = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать("https://api.github.com/repos/bayselonarrend/OpenIntegrations/releases")
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("POST")
.ВернутьОтветКакСтроку();
КонецЕсли;
CommonTools.СообщитьПроцесс(Результат);
КонецПроцедуры
Процедура СоздатьДрафтSourcecraft()
Процедура СоздатьДрафтSourcecraft(Знач Данные)
ПолеТокена = ДанныеПроекта.ПолучитьЗначениеНастройки("sourcecraft.tokenField");
Токен = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокена);
Версия = ДанныеПроекта.ПолучитьЗначениеНастройки("primary.version");
ПолеТокена = ДанныеПроекта.ПолучитьЗначениеНастройки("sourcecraft.tokenField");
URLКонтента = ДанныеПроекта.ПолучитьЗначениеНастройки("sourcecraft.contentPath");
Токен = ДанныеПроекта.ПолучитьЗначениеСекретныхДанных(ПолеТокена);
СписокРелизов = OPI_ЗапросыHTTP
.НовыйЗапрос()
@@ -93,13 +152,14 @@
.ОбработатьЗапрос("GET")
.ВернутьОтветКакJSONКоллекцию();
IDРелиза = Неопределено;
Попытка
Для Каждого Релиз Из СписокРелизов["releases"] Цикл
Если Релиз["tag"] = "draft" Тогда
CommonTools.СообщитьПроцесс("SourceCraft: Draft already exist");
Возврат;
IDРелиза = Релиз["id"];
КонецЕсли;
Если Релиз["tag"] = Версия Тогда
@@ -112,30 +172,72 @@
Исключение
ВызватьИсключение OPI_Инструменты.JSONСтрокой(СписокРелизов);
КонецПопытки;
КаталогШаблонов = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.templatesSrc");
CommonTools.СообщитьПроцесс("SourceCraft: Init new draft...");
Если IDРелиза = Неопределено Тогда
CommonTools.СообщитьПроцесс("SourceCraft: Init new draft...");
Иначе
CommonTools.СообщитьПроцесс("SourceCraft: Update draft...");
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDРелиза);
КонецЕсли;
ПутьШаблона = ОбъединитьПути(КаталогШаблонов, "sc_draft.txt");
ШаблонДрафта = ПолучитьСтрокуИзДвоичныхДанных(Новый ДвоичныеДанные(ПутьШаблона));
ТекстДрафта = СтрШаблон(ШаблонДрафта, Версия);
ТекущаяДата = Формат(ТекущаяДата(), "ДЛФ=D");
МассивИзменений = Новый Массив;
ШаблонИзменений = "| <img src=""%1%2"" width=""32""/> | %3 | %4 |";
Для Каждого Изменение Из Данные["changes"] Цикл
ТекущееИзменение = СтрШаблон(ШаблонИзменений
, URLКонтента
, Изменение["icon"]
, Изменение["description_ru"]
, Изменение["description_en"]);
МассивИзменений.Добавить(ТекущееИзменение);
КонецЦикла;
ТекстДрафта = СтрШаблон(ШаблонДрафта
, Версия
, Данные["summary_ru"]
, Данные["summary_en"]
, СтрСоединить(МассивИзменений, Символы.ПС)
, URLКонтента
, Данные["image"]);
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("tag" , "draft");
СтруктураЗапроса.Вставить("title" , СтрШаблон("Version %1 - %2", Версия, ТекущаяДата));
СтруктураЗапроса.Вставить("release_notes" , ТекстДрафта);
СтруктураЗапроса.Вставить("publish" , Ложь);
СозданиеДрафта = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать("https://api.sourcecraft.tech/repos/bayselonarrend/openintegrations/releases")
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("POST")
.ВернутьОтветКакСтроку();
Если ЗначениеЗаполнено(IDРелиза) Тогда
CommonTools.СообщитьПроцесс(СозданиеДрафта);
СтруктураЗапроса.Вставить("title" , Данные["title"]);
СтруктураЗапроса.Вставить("release_notes" , ТекстДрафта);
Результат = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать(СтрШаблон("https://api.sourcecraft.tech/releases/id:%1", IDРелиза))
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("PATCH")
.ВернутьОтветКакСтроку();
Иначе
СтруктураЗапроса.Вставить("tag" , "draft");
СтруктураЗапроса.Вставить("title" , Данные["title"]);
СтруктураЗапроса.Вставить("release_notes" , ТекстДрафта);
СтруктураЗапроса.Вставить("publish" , Ложь);
Результат = OPI_ЗапросыHTTP
.НовыйЗапрос()
.Инициализировать("https://api.sourcecraft.tech/repos/bayselonarrend/openintegrations/releases")
.ДобавитьBearerАвторизацию(Токен)
.УстановитьJsonТело(СтруктураЗапроса)
.ОбработатьЗапрос("POST")
.ВернутьОтветКакСтроку();
КонецЕсли;
CommonTools.СообщитьПроцесс(Результат);
КонецПроцедуры
@@ -13,7 +13,7 @@
Процедура ЗаписатьФайлJSON(Знач Путь, Знач Данные) Экспорт
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, Символы.Таб);
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, " ");
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, Данные);
Запись.Закрыть();
+35
View File
@@ -0,0 +1,35 @@
[
{
"version": "1.34.0",
"title": "Version 1.34.0 - 0.04.2026",
"summary_ru": "Методы работы с RSS",
"summary_en": "Methods of working with RSS",
"image": "media/Covers/RSS.png",
"changes": [
{
"lib": "RSS",
"icon": "media/RSS.png",
"description_ru": "Методы формирования RSS (3 функции)",
"description_en": "RSS generation methods (3 functions)"
},
{
"lib": "RSS",
"icon": "media/RSS.png",
"description_ru": "Методы формирования Atom (3 функции)",
"description_en": "Atom generation methods (3 functions)"
},
{
"lib": "TCP",
"icon": "media/TCP.png",
"description_ru": "Добавлен функционал TCP-сервера",
"description_en": "Added TCP server functionality"
},
{
"lib": "All",
"icon": "media/logo.png",
"description_ru": "Исправлен баг вывода справки CLI для `tcp` и `ssh`",
"description_en": "Fixed CLI help output bug for `tcp` and `ssh`"
}
]
}
]
@@ -0,0 +1 @@
,T480/bayselonarrend,T480,15.03.2026 11:29,file:///C:/Users/bayselonarrend/AppData/Roaming/LibreOffice/4;
Binary file not shown.
Binary file not shown.
+4 -5
View File
@@ -1,7 +1,7 @@
![cover](https://raw.githubusercontent.com/Bayselonarrend/OpenIntegrations/refs/heads/main/media/Covers/blank.png)
![cover](%5%6)
🇷🇺: Обновление Открытого пакета интеграций %1: Методы работы
🇺🇸: Open integrations package update %1: Methods of working with
🇷🇺: Обновление Открытого пакета интеграций %1: %2
🇺🇸: Open integrations package update %1: %3
## Новые функции / New functions
@@ -10,8 +10,7 @@
| API | 🇷🇺 | 🇺🇸 |
|-|-|-|
| <img src="https://raw.githubusercontent.com/Bayselonarrend/OpenIntegrations/main/media/logo.png" width="32"/> | Шаблон | Template |
%4
## Скачать / Download
+4 -4
View File
@@ -1,9 +1,9 @@
![cover](https://sourcecraft.dev/file?owner=bayselonarrend&repo=openintegrations&rev=main&path=media/Covers/SSH.png)
![cover](%5%6)
<br>
**🇷🇺: Обновление Открытого пакета интеграций %1: Методы работы**
**🇺🇸: Open integrations package update %1: Methods of working with**
**🇷🇺: Обновление Открытого пакета интеграций %1: %2**
**🇺🇸: Open integrations package update %1: %3**
<hr>
@@ -14,7 +14,7 @@
| API | 🇷🇺 | 🇺🇸 |
|-|-|-|
| <img src="https://sourcecraft.dev/file?owner=bayselonarrend&repo=openintegrations&rev=main&path=media/logo.png" width="32"/> | Шаблон | Template |
%4
<hr>