|
| 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"); |
0 commit comments