diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 31f8454..340d553 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -7,13 +7,13 @@ name: Контроль качества on: [push, pull_request] jobs: build: - if: github.repository == 'khorevaa/configor' + if: github.repository == 'oscript-library/configor' runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.8.3', 'stable'] + oscript_version: ['1.8.3'] steps: # Загрузка проекта @@ -54,14 +54,16 @@ jobs: id: extract_version - name: Установка Sonar-scanner - uses: warchant/setup-sonar-scanner@v1 + uses: warchant/setup-sonar-scanner@v3 # Анализ проекта в SonarQube (ветка) - name: Анализ в SonarQube (branch) if: github.event_name == 'push' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: sonar-scanner - -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} - -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} + -Dsonar.host.url=https://sonar.openbsl.ru -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} @@ -69,10 +71,11 @@ jobs: # https://docs.sonarqube.org/latest/analysis/pull-request/ - name: Анализ в SonarQube (pull-request) if: github.event_name == 'pull_request' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: sonar-scanner - -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} - -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} - -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} + -Dsonar.host.url=https://sonar.openbsl.ru -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fabc4ec..4adc530 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,7 +6,7 @@ name: Подготовка релиза и публикация в хабе # Только события создания и изменения релиза on: release: - types: [published, edited] + types: [published] jobs: build: @@ -54,6 +54,6 @@ jobs: - name: Публикация в hub.oscript.io shell: bash - run: opm push -f ./${{ matrix.package_mask }} --token ${{ env.TOKEN }} -c stable + run: opm push -f ./${{ matrix.package_mask }} --token ${{ env.PUSH_TOKEN }} -c stable env: - TOKEN: ${{ secrets.ACCESS_TOKEN }} \ No newline at end of file + PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }} diff --git a/packagedef b/packagedef index 63fdd77..103ca2f 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("configor") - .Версия("0.8.0") + .Версия("0.8.2") .Автор("Khorev Aleksey") .АдресАвтора("Khorevaa@gmail.com") .Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml") @@ -20,6 +20,9 @@ .ЗависитОт("notify", "0.2.0") .ЗависитОт("tempfiles") .ЗависитОт("reflector", "0.3.1") + .РазработкаЗависитОт("coverage", "0.6.1") + .РазработкаЗависитОт("1testrunner", "1.8.0") + .РазработкаЗависитОт("1bdd", "1.14.0") .ОпределяетКласс("МенеджерПараметров", "src/Классы/МенеджерПараметров.os") .ОпределяетКласс("КонструкторПараметров", "src/Классы/КонструкторПараметров.os") ; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" index 404f1a8..b3744e6 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" @@ -50,27 +50,39 @@ Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс); ПеременныеСреды = ПеременныеСреды(); - - Если ПустаяСтрока(Префикс) Тогда - Возврат ПеременныеСреды; - КонецЕсли; - ПрочитанныеПараметры = Новый Соответствие; Для каждого ПеременнаяСреды Из ПеременныеСреды Цикл - Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда + ПрочитанныеПараметры.Вставить( + СтрЗаменить(СтрЗаменить(ПеременнаяСреды.Ключ, "_", "."), "..", "_"), + ПеременнаяСреды.Значение + ); - ПрочитанныеПараметры.Вставить( - Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)), - ПеременнаяСреды.Значение - ); + КонецЦикла; - КонецЕсли; + Результат = Новый Соответствие; - КонецЦикла; + Если ПустаяСтрока(Префикс) Тогда + Результат = ПрочитанныеПараметры; + Иначе + + Для каждого ПеременнаяСреды Из ПрочитанныеПараметры Цикл + + Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда + Сообщить(Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс))); + Результат.Вставить( + Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)), + ПеременнаяСреды.Значение + ); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; - Возврат ПрочитанныеПараметры; + Возврат Результат; КонецФункции diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 52d7003..7778d46 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -202,9 +202,9 @@ Иначе - ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикВыполненияЧтениеФайловогоПровайдера", ЭтотОбъект); КоллекцияФайловПараметров.ДляКаждого( - "КаталогПоиска -> ВыполнитьЧтениеФайловогоПровайдера(КаталогПоиска.ИмяФайла());" + "КаталогПоиска -> ВыполнитьЧтениеФайловогоПровайдера(КаталогПоиска.ИмяФайла());", + ЭтотОбъект ); КонецЕсли; diff --git a/tasks/coverage.os b/tasks/coverage.os index 3f50e0e..9fe5073 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -2,29 +2,31 @@ #Использовать 1commands #Использовать fs +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + ФС.ОбеспечитьПустойКаталог("coverage"); ПутьКСтат = "coverage/stat.json"; Команда = Новый Команда; Команда.УстановитьКоманду("oscript"); -Команда.ДобавитьПараметр("-encoding=utf-8"); -Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); +Если НЕ ЭтоWindows Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); +КонецЕсли; +Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); Команда.ДобавитьПараметр("tasks/test.os"); Команда.ПоказыватьВыводНемедленно(Истина); КодВозврата = Команда.Исполнить(); -Файл_Стат = Новый Файл(ПутьКСтат); - -ИмяПакета = "configor"; - ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); ПроцессорГенерации.ОтносительныеПути() - .ФайлСтатистики(Файл_Стат.ПолноеИмя) - .GenericCoverage() - .Cobertura() - .Clover(ИмяПакета) - .Сформировать(); - -ЗавершитьРаботу(КодВозврата); \ No newline at end of file + .РабочийКаталог("coverage") + .КаталогИсходников(ТекущийКаталог()) + .ИмяФайлаСтатистики() + .GenericCoverage() + .Cobertura() + .Сформировать(); + +ЗавершитьРаботу(КодВозврата); diff --git "a/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" "b/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" index 5dc187c..46a9b78 100644 --- "a/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" +++ "b/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" @@ -4,23 +4,9 @@ #Использовать tempfiles #Использовать json -Перем юТест; Перем Лог; -Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт - - юТест = Тестирование; - - ИменаТестов = Новый Массив; - - ИменаТестов.Добавить("ТестДолжен_ПроверитьПолучениеПараметровИзИндекса"); - ИменаТестов.Добавить("ТестДолжен_ПроверитьВыгрузкуПараметровВКласс"); - ИменаТестов.Добавить("ТестДолжен_ПроверитьПоискИЧтениеФайлаПараметров"); - - Возврат ИменаТестов; - -КонецФункции - +&Тест Процедура ТестДолжен_ПроверитьПолучениеПараметровИзИндекса() Экспорт ТестовыеСлучаи = Новый Массив; @@ -68,6 +54,7 @@ КонецПроцедуры +&Тест Процедура ТестДолжен_ПроверитьВыгрузкуПараметровВКласс() Экспорт МенеджерПараметров = Новый МенеджерПараметров(); @@ -106,6 +93,7 @@ КонецПроцедуры +&Тест Процедура ТестДолжен_ПроверитьПоискИЧтениеФайлаПараметров() Экспорт МенеджерПараметров = Новый МенеджерПараметров(); @@ -148,6 +136,79 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_ПроверитьПоискИЧтениеНесколькихФайловПараметров() Экспорт + + ПарсерJSON = Новый ПарсерJSON; + + МенеджерПараметров = Новый МенеджерПараметров(); + + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + + СтруктураПараметров = Новый Структура("version, ПараметрСтрока, ПараметрЧисло, ПараметрМассив, ПараметрСтруктура, ПараметрСоответствие", + "1.0", + "ПростоСтрока", + 10, + ПолучитьНовыйМассив("Элемент1, Элемент2"), + Новый Структура("Строка, Число, Массив, Структура, Соответствие", + "ПростоСтрока", + 10, + ПолучитьНовыйМассив("Элемент1, Элемент2"), + Новый Структура("Строка, Строка2", "ЗначениеСтруктуры", "ЗначениеСтруктуры2"), + ПолучитьСоответствие("КлючВнутри1, КлючВнутри2", "Значение1, Значение2") + ), + ПолучитьСоответствие("Ключ1, Ключ2", "Значение1, Значение2") + ); + + ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров); + + ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки); + + ТестовоеИмя = "config"; + ТестовоеРасширение = ".json"; + + КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); + + МенеджерПараметров.АвтоНастройка(ТестовоеИмя); + + СтруктураПараметров = Новый Структура("version, ПараметрСтрока, ПараметрЧисло, ПараметрМассив, ПараметрСтруктура, ПараметрСоответствие", + "1.0", + "ПростоСтрока", + 10, + ПолучитьНовыйМассив("Элемент3"), + Новый Структура("Строка, Число, Массив, Структура, Соответствие", + "ПростоСтрока", + 10, + ПолучитьНовыйМассив("Элемент3"), + Новый Структура("Строка, Строка2", "ЗначениеСтруктуры", "ЗначениеСтруктуры2"), + ПолучитьСоответствие("КлючВнутри1, КлючВнутри2", "Значение1, Значение2") + ), + ПолучитьСоответствие("Ключ1, Ключ2", "Значение1, Значение2") + ); + + ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров); + + ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки); + + ТестовоеИмя = "config2"; + ТестовоеРасширение = ".json"; + + КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); + + МенеджерПараметров.АвтоНастройка(ТестовоеИмя); + + НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла(); + НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог); + МенеджерПараметров.Прочитать(); + + Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрМассив[0], МенеджерПараметров.Параметр("ПараметрМассив.0"), "Результат должен совпадать с ожиданиями."); + Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Массив[0], МенеджерПараметров.Параметр("ПараметрСтруктура.Массив.0"), "Результат должен совпадать с ожиданиями."); + Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Соответствие["КлючВнутри1"], МенеджерПараметров.Параметр("ПараметрСтруктура.Соответствие.КлючВнутри1"), "Результат должен совпадать с ожиданиями."); + + ВременныеФайлы.Удалить(); + +КонецПроцедуры + Функция ПолучитьНовыйМассив(ЗначенияМассив) Массив = Новый Массив(); diff --git "a/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" index 8ccd0bc..4e65981 100644 --- "a/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" +++ "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" @@ -6,7 +6,7 @@ // Дано - УстановитьПеременнуюСреды("TestConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + УстановитьПеременнуюСреды("Test__Configor_Env", "ТестЗначение", РасположениеПеременнойСреды.Процесс); // Когда @@ -18,7 +18,7 @@ // Тогда - Ожидаем.Что(МенеджерПараметров.Параметр("TestConfigorEnv")).Равно("ТестЗначение"); + Ожидаем.Что(МенеджерПараметров.Параметр("Test_Configor.Env")).Равно("ТестЗначение"); КонецПроцедуры @@ -27,18 +27,18 @@ // Дано - УстановитьПеременнуюСреды("Test_ConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + УстановитьПеременнуюСреды("Test_Configor__Env", "ТестЗначение", РасположениеПеременнойСреды.Процесс); // Когда МенеджерПараметров = Новый МенеджерПараметров(); - МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test_")); + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test.")); МенеджерПараметров.Прочитать(); // Тогда - Ожидаем.Что(МенеджерПараметров.Параметр("ConfigorEnv")).Равно("ТестЗначение"); + Ожидаем.Что(МенеджерПараметров.Параметр("Configor_Env")).Равно("ТестЗначение"); КонецПроцедуры