Skip to content

Commit 3115460

Browse files
committed
Merge branch 'release/v0.12.0'
2 parents 93947a9 + 5dc7ec0 commit 3115460

File tree

4 files changed

+149
-1
lines changed

4 files changed

+149
-1
lines changed

packagedef

+2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
Описание.Имя("opm")
66
.Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта)
77
.ЗависитОт("fs", "0.3")
8+
.ЗависитОт("asserts")
89
.ЗависитОт("logos")
910
.ЗависитОт("cmdline")
1011
.ЗависитОт("tempfiles")
1112
.ЗависитОт("1testrunner")
13+
.ЗависитОт("gitrunner", "1.4.0")
1214
.ВключитьФайл("src")
1315
.ОпределяетКласс("ОписаниеПакета", "src/Классы/ОписаниеПакета.os")
1416
.ИсполняемыйФайл("src/opm.os");
+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
#Использовать asserts
2+
#Использовать logos
3+
#Использовать gitrunner
4+
5+
Перем ДопустимыеИменаКаналов;
6+
Перем Лог;
7+
8+
///////////////////////////////////////////////////////////////////////////////////////////////////
9+
// Прикладной интерфейс
10+
11+
Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт
12+
13+
ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, "Отправить пакет в хаб пакетов");
14+
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--token", " Токен авторизации на GitHub.com
15+
| Токен авторизации создается на странице https://github.com/settings/tokens
16+
| Токен используется только для проверки авторизации на GitHub.com и прав на репозиторий, выдача дополнительных разрешений в ""scopes"" НЕ требуется.");
17+
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--file", " Маска или имя файла пакета.");
18+
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--channel", "Канал публикации. Возможные значения: stable, dev.
19+
| В случае отправки из ветки master гит-репозитория данный параметр можно опустить - будет использоваться канал ""stable"".
20+
| В любых других случаях его заполнение обязательно.");
21+
Парсер.ДобавитьКоманду(ОписаниеКоманды);
22+
23+
КонецПроцедуры
24+
25+
// Выполняет логику команды
26+
//
27+
// Параметры:
28+
// ПараметрыКоманды - Соответствие ключей командной строки и их значений
29+
//
30+
Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт
31+
32+
ТокенАвторизации = ПолучитьЗначениеОбязательногоПараметра(ПараметрыКоманды, "--token");
33+
34+
МаскаФайлаПакета = ПолучитьЗначениеОбязательногоПараметра(ПараметрыКоманды, "--file");
35+
ФайлПакета = ПолучитьФайлПакета(МаскаФайлаПакета);
36+
37+
Канал = ПолучитьИмяКаналаПубликации(ПараметрыКоманды);
38+
39+
ОтправитьПакетВХаб(ТокенАвторизации, ФайлПакета, Канал);
40+
Возврат 0;
41+
42+
КонецФункции
43+
44+
Функция ПолучитьЗначениеОбязательногоПараметра(Знач ЗначенияПараметров, Знач ИмяПараметра)
45+
ЗначениеПараметра = ЗначенияПараметров[ИмяПараметра];
46+
Ожидаем.Что(ЗначениеПараметра, СтрШаблон("Не заполнено значение обязательного параметра %1", ИмяПараметра)).Заполнено();
47+
48+
Возврат ЗначениеПараметра;
49+
КонецФункции
50+
51+
Функция ПолучитьИмяКаналаПубликации(Знач ЗначенияПараметров)
52+
53+
ГитРепозиторий = Новый ГитРепозиторий();
54+
ГитРепозиторий.УстановитьРабочийКаталог(ТекущийКаталог());
55+
56+
КаналПубликации = СокрЛП(ЗначенияПараметров["--channel"]);
57+
58+
Если ЗначениеЗаполнено(КаналПубликации) Тогда
59+
Если ЭтоДопустимыйКаналПубликации(КаналПубликации) Тогда
60+
Возврат КаналПубликации;
61+
Иначе
62+
ТекстСообщения = "Указано недопустимое имя канала. Допустимые имена:" + Символы.ПС;
63+
Для Каждого КлючИЗначение Из ДопустимыеИменаКаналов Цикл
64+
ТекстСообщения = ТекстСообщения + КлючИЗначение.Значение + Символы.ПС;
65+
КонецЦикла;
66+
67+
ВызватьИсключение ТекстСообщения;
68+
КонецЕсли;
69+
КонецЕсли;
70+
71+
Если НЕ ГитРепозиторий.ЭтоРепозиторий() Тогда
72+
ВызватьИсключение "Не заполнено значение обязательного параметра --channel";
73+
КонецЕсли;
74+
75+
ИмяВетки = ГитРепозиторий.ПолучитьТекущуюВетку();
76+
Если ИмяВетки <> "master" Тогда
77+
ВызватьИсключение "Не заполнено значение обязательного параметра --channel";
78+
КонецЕсли;
79+
80+
Возврат ДопустимыеИменаКаналов.Стабильный;
81+
82+
КонецФункции
83+
84+
Функция ЭтоДопустимыйКаналПубликации(КаналПубликации)
85+
Результат = Ложь;
86+
Для Каждого КлючИЗначение Из ДопустимыеИменаКаналов Цикл
87+
Если КлючИЗначение.Значение = КаналПубликации Тогда
88+
Результат = Истина;
89+
Прервать;
90+
КонецЕсли;
91+
КонецЦикла;
92+
93+
Возврат Результат;
94+
КонецФункции
95+
96+
Функция ПолучитьФайлПакета(МаскаФайлаПакета)
97+
98+
НайденныеФайлы = НайтиФайлы(ТекущийКаталог(), МаскаФайлаПакета);
99+
100+
Если НайденныеФайлы.Количество() = 0 Тогда
101+
ВызватьИсключение "По переданной маске файла пакета не найдено файлов";
102+
КонецЕсли;
103+
Если НайденныеФайлы.Количество() > 1 Тогда
104+
ВызватьИсключение "По переданной маске файла пакета найдено больше одного файла";
105+
КонецЕсли;
106+
107+
Возврат НайденныеФайлы[0];
108+
109+
КонецФункции
110+
111+
Процедура ОтправитьПакетВХаб(Знач ТокенАвторизации, Знач ФайлПакета, Знач Канал)
112+
113+
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ФайлПакета.ПолноеИмя);
114+
ДвоичныеДанныеФайлаВBase64 = Base64Строка(ДвоичныеДанныеФайла);
115+
116+
Сервер = КонстантыOpm.СерверУдаленногоХранилища;
117+
Ресурс = КонстантыOpm.РесурсПубликацииПакетов;
118+
119+
Заголовки = Новый Соответствие();
120+
Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации);
121+
Заголовки.Вставить("FILE-NAME", ФайлПакета.Имя);
122+
Заголовки.Вставить("CHANNEL", Канал);
123+
124+
Соединение = Новый HTTPСоединение(Сервер);
125+
Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);
126+
Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеФайла);
127+
128+
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
129+
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
130+
131+
Если Ответ.КодСостояния <> 200 Тогда
132+
ВызватьИсключение ТелоОтвета;
133+
КонецЕсли;
134+
135+
Лог.Информация(ТелоОтвета);
136+
137+
КонецПроцедуры
138+
139+
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
140+
141+
ДопустимыеИменаКаналов = Новый Структура;
142+
ДопустимыеИменаКаналов.Вставить("Стабильный", "stable");
143+
ДопустимыеИменаКаналов.Вставить("Разработческий", "dev");

src/Модули/КонстантыOpm.os

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Перем ИмяФайлаСпецификацииПакета Экспорт;
33
Перем ИмяФайлаСодержимогоПакета Экспорт;
44
Перем ИмяФайлаМетаданныхПакета Экспорт;
5+
Перем РесурсПубликацииПакетов Экспорт;
56
Перем СерверУдаленногоХранилища Экспорт;
67
Перем ПутьВХранилище Экспорт;
78
Перем СерверЗапасногоХранилища Экспорт;
@@ -17,10 +18,11 @@
1718
ИмяФайлаСодержимогоПакета = "content.zip";
1819
ИмяФайлаМетаданныхПакета = "opm-metadata.xml";
1920
СерверУдаленногоХранилища = "http://hub.oscript.io";
21+
РесурсПубликацииПакетов = "/push";
2022
ПутьВХранилище = "/download/";
2123
СерверЗапасногоХранилища = "http://hub.oscript.ru";
2224
ПутьВЗапасномХранилище = "/download/";
2325
ЛокальныйКаталогУстановкиПакетов = "oscript_modules";
2426
ИмяЛога = "oscript.app.opm";
25-
ВерсияПродукта = "0.11.0";
27+
ВерсияПродукта = "0.12.0";
2628
ИмяФайлаНастроек = "opm.cfg";

src/Модули/ПараметрыСистемыOpm.os

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
КлассыРеализацииКоманд["help"] = "КомандаСправкаПоПараметрам";
99
КлассыРеализацииКоманд["app"] = "КомандаOpm_App";
1010
КлассыРеализацииКоманд["build"] = "КомандаOpm_Build";
11+
КлассыРеализацииКоманд["push"] = "КомандаOpm_Push";
1112
КлассыРеализацииКоманд["config"] = "КомандаOpm_Config";
1213
КлассыРеализацииКоманд["install"] = "КомандаOpm_Install";
1314
КлассыРеализацииКоманд["list"] = "КомандаOpm_List";

0 commit comments

Comments
 (0)