-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup.os
166 lines (106 loc) · 6.58 KB
/
setup.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#Использовать 1commands
#Использовать cli-selector
#Использовать 1connector
#Использовать "."
Процедура УстановитьБиблиотеку(Версия)
АдресПрикрепленногоФайлаПакета = ПолучитьАдресПрикрепленногоПакета(Версия);
Если ЗначениеЗаполнено(АдресПрикрепленногоФайлаПакета) Тогда
ЦветнойВывод.Вывести("Установка версии ("+Версия+"|#color=Желтый)... ");
Иначе
ЦветнойВывод.ВывестиСтроку(СтрШаблон("(ОШИБКА:|#color=Красный) К релизу (%1|#color=Желтый) не прикреплен *.ospx файл пакета", Версия));
Возврат;
КонецЕсли;
Команда = Новый Команда;
Команда.УстановитьСтрокуЗапуска("opm i --url " + АдресПрикрепленногоФайлаПакета);
КодВозврата = Команда.Исполнить();
ТекстВывода = Команда.ПолучитьВывод();
Если КодВозврата = 0 Тогда
ЦветнойВывод.ВывестиСтроку("(Успешно|#color=Зеленый)");
ЦветнойВывод.ВывестиСтроку(СокрЛП(ТекстВывода));
Иначе
ЦветнойВывод.ВывестиСтроку("(Ошибка|#color=Красный)");
ЦветнойВывод.ВывестиСтроку("Код возврата: ("+КодВозврата+"|#color=Желтый)", "Серый");
ЦветнойВывод.ВывестиСтроку("Текст ошибки: ("+СокрЛП(ТекстВывода)+"|#color=Белый)", "Серый");
КонецЕсли;
КонецПроцедуры
Функция ПолучитьАдресПрикрепленногоПакета(Версия)
Адрес = "https://api.github.com/repos/{Владелец}/{Репозиторий}/releases/tags/" + Версия;
УстановитьИмяРепозитория(Адрес);
Данные = ПолучитьДанные(Адрес);
Для Каждого ПрикрепленныйФайл Из Данные["assets"] Цикл
Если Прав(ПрикрепленныйФайл["name"], 5) = ".ospx" Тогда
Возврат ПрикрепленныйФайл["browser_download_url"];
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
Функция ПолучитьТэгПоследнегоРелиза()
Адрес = "https://api.github.com/repos/{Владелец}/{Репозиторий}/releases/latest";
УстановитьИмяРепозитория(Адрес);
Данные = ПолучитьДанные(Адрес);
ПоследнийТэг = Данные["tag_name"];
Возврат ПоследнийТэг;
КонецФункции
Функция ПолучитьВсеТэгиРелизов()
Адрес = "https://api.github.com/repos/{Владелец}/{Репозиторий}/releases";
УстановитьИмяРепозитория(Адрес);
Данные = ПолучитьДанные(Адрес);
Тэги = Новый Массив;
Для Каждого КЗ Из Данные Цикл
Тэги.Добавить(КЗ["tag_name"]);
КонецЦикла;
Возврат Тэги;
КонецФункции
Функция ТэгСуществует(Тэг)
мТэги = ПолучитьВсеТэгиРелизов();
Возврат НЕ мТэги.Найти(Тэг) = Неопределено;
КонецФункции
Процедура УстановитьИмяРепозитория(Адрес)
Владелец = "240596448";
Репозиторий = "coloratos";
Адрес = СтрЗаменить(Адрес, "{Владелец}", Владелец);
Адрес = СтрЗаменить(Адрес, "{Репозиторий}", Репозиторий);
КонецПроцедуры
Функция ПолучитьДанные(Адрес)
Данные = КоннекторHTTP.Get(Адрес).Json();
Возврат Данные;
КонецФункции
Функция РежимОтладки()
Флаг = ПолучитьПеременнуюСреды("DEBUG");
Возврат НРЕГ(Флаг) = "true"
Или Флаг = "1"
Или НРЕГ(Флаг) = "истина";
КонецФункции
Если АргументыКоманднойСтроки.Количество() = 1 Тогда
Версия = АргументыКоманднойСтроки[0];
Если ВРЕГ(Версия) = "LATEST" Тогда
Версия = ПолучитьТэгПоследнегоРелиза();
УстановитьБиблиотеку(Версия);
Иначе
Если ТэгСуществует(Версия) Тогда
УстановитьБиблиотеку(Версия);
Иначе
ЦветнойВывод.ВывестиСтроку(СтрШаблон("(ОШИБКА:|#color=Красный) Тэг (%1|#color=Желтый) не существует", Версия));
КонецЕсли;
КонецЕсли;
Иначе
МассивТэгов = ПолучитьВсеТэгиРелизов();
Если РежимОтладки() Тогда
Если МассивТэгов.Количество() Тогда
УстановитьБиблиотеку(МассивТэгов[0]);
Иначе
ЦветнойВывод.ВывестиСтроку("(ОШИБКА:|#color=Красный) Не найдено ни одного релиза");
КонецЕсли;
Иначе
ВыборВКонсоли = Новый ВыборВКонсоли("Выберите версию для установки:");
Для инд = 0 По МассивТэгов.ВГраница() Цикл
ВыборВКонсоли.ДобавитьЗначениеВыбора(МассивТэгов[инд], , инд = 0); // установим пометку на первый элемент - на последний релиз
КонецЦикла;
Версия = ВыборВКонсоли.Выбрать(Ложь); // выбор одного значения
Если ЗначениеЗаполнено(Версия) Тогда
УстановитьБиблиотеку(Версия);
Иначе
ЦветнойВывод.Сообщить("Не выбрано ни одного релиза !", СтатусСообщения.Внимание);
КонецЕсли;
КонецЕсли;
КонецЕсли;