diff --git a/.gitignore b/.gitignore index a10eb2b..43dd314 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,13 @@ oscript_modules/ src/cmd/oscript\.cfg ovm*.exe + +temp/ +exec.log +*.dll + +coverage/ + +junit-bdd\.xml + +\.sonar/ diff --git a/.travis.yml b/.travis.yml index c62daf5..01768a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,12 @@ before_install: - oscript install: - - sudo oscript /usr/share/oscript/lib/opm/src/opm.os install -l + - sudo opm install -l + - sudo opm install -l 1bdd + - oscript -make src/cmd/ovm.os ovm.exe + - echo "mono ./ovm.exe ""$@""" > ovm + - chmod +x ./ovm + - cp /usr/share/oscript/bin/ScriptEngine.HostedScript.dll ScriptEngine.HostedScript.dll cache: directories: diff --git a/.vscode/settings.json b/.vscode/settings.json index 17bd6b8..b5dc0a4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,6 @@ { - "language-1c-bsl.linterEntryPoint": "src/ovm.os" + "language-1c-bsl.linterEntryPoint": "src/cmd/ovm.os", + "gherkin-autocomplete.featureLibraries": [ + "./oscript_modules/1bdd/features/lib" + ] } \ No newline at end of file diff --git a/README.md b/README.md index c1bf306..314dbfd 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,170 @@ [![Quality Gate](https://sonar.silverbulleters.org/api/badges/gate?key=sonar-opensource-add-ovm)](https://sonar.silverbulleters.org/dashboard?id=sonar-opensource-add-ovm) [![Tech Debt](https://sonar.silverbulleters.org/api/badges/measure?key=sonar-opensource-add-ovm&metric=sqale_debt_ratio)](https://sonar.silverbulleters.org/dashboard?id=sonar-opensource-add-ovm) +## Цель + +ovm - утилита, предназначенная для установки, обновления и переключения между различными версиями OneScript. Вдохновение черпается из nvm (node.js version manager) + +## Пререквизиты + +* Установленный `.Net Framework >=4.5.2` либо `Mono >=4.6` +* Работающий интернет + +## Установка + +### Windows + +* Скачать `ovm.exe` со страницы [страницы релизов GitHub](https://github.com/silverbulleters/ovm/releases) +* По желанию прописать путь к ovm.exe в переменной окружения `PATH` + +Если на машине установлен OneScript из msi и/или путь к установленному OneScript прописан в `PATH`, то перед началом использования `ovm` необходимо один раз в консоли с административными правами выполнить команду `ovm migrate`, после чего **перезапустить консоль**. + +### Linux + +* Скачать `ovm.exe` и `ScriptEngine.HostedScript.dll` со страницы [страницы релизов GitHub](https://github.com/silverbulleters/ovm/releases) +* Файлы должны располагаться в одной папке +* Для быстрого использования приложения можно создать sh-файл со следующим содержанием: + +```sh +mono path/to/ovm.exe "$@" +``` + +и добавить его в `$PATH` (например, в `~/.local/share/bin`) + +## Поддержка различных терминалов + +Для каждого из терминалов активация ovm выглядит по-разному. После выполнения первичной активации в большинстве случаев необходимо переоткрыть текущий терминал (это надо сделать один раз). Для перечисленных ниже терминалов действия по активации происходят **автоматически**. + +### cmd (Windows) + +При выполнении команды `ovm migrate`: +создается запись в реестре по адресу `HKCU\Software\Microsoft\Command Processor\Autorun` следующего содержания: + +```cmd +set PATH=%OVM_OSCRIPTBIN%;%PATH% +``` + +### powershell (Windows) + +При выполнении команды `ovm migrate`: +создается файл (либо добавляется в существующий) по адресу `%USERPROFILE%\Documents\WindowsPowerShell\profile.ps1` со следующим содержанием: + +```powershell +set PATH=$OVM_OSCRIPTBIN;$PATH +``` + +### sh (*nix) + +При первичной активации версии OneScript: +создается файл (либо добавляется в существующий) по адресу `$HOME/.profile` со следующим содержанием: + +```sh +export $HOME/.local/share/ovm/current/bin:$PATH +``` + +### bash (*nix) + +При первичной активации версии OneScript: +создается файл (либо добавляется в существующий) по адресу `$HOME/.bashrc` со следующим содержанием: + +```bash +export $HOME/.local/share/ovm/current/bin:$PATH +``` + +### Другие терминалы + +Автоматическая активация ovm в других терминалах не гарантируется. Чаще всего она будет делаться по аналогии (в конфигурационных файлах), либо в настройках самого терминала. + +Для `ConEmu` активация производится через `Settings` -> `Startup` -> `Environment`. В метод установки PATH необходимо добавить путь к %OVM_OSCRIPTBIN% перед текущим `%PATH%`. Например, `set PATH=%OVM_OSCRIPTBIN%;%PATH%` + +## Использование + +ovm - утилита командной строки, основанная на библиотеке [cli](https://github.com/khorevaa/cli). Утилита содержит несколько команд с различными аргументами и опциями. Каждая команда имеет длинное имя и короткий алиас. Каждый аргумент или опция могут быть установлены из переменных окружения либо указаны непосредственно в командной строке. Более подробно - в справке по библиотеке [cli](https://github.com/khorevaa/cli). + +### Установка OneScript + +Установка OneScript производится в пользовательский каталог, не захламляя общее системное пространство. + +```sh +ovm install dev # Установить последнюю ночную сборку +ovm install dev stable 1.0.19 # Установить стабильную, ночную сборки и версию 1.0.19 + +ovm use --install dev # Активировать ночную сборку и установить, если ее нет +``` + +### Активация OneScript + +Для запуска `oscript` и прочих утилит без указания путей к ним необходимо произвести активацию версии OneScript. При этом в каталоге данных `ovm` создастся специальная символическая ссылка `current`, ведущая на активированную версию. + +```sh +ovm use dev # Активировать ранее установленную версию dev (ночную сборку) +ovm use --install dev # установить (если ее нет) и активировать версию dev +``` + +### Удаление OneScript + +```sh +ovm delete 1.0.19 # Удалить установленную версию 1.0.19 +``` + +### Вывод установленных версий OneScript + +```sh +$ ovm ls # Вывод установленных версий + +1.0.19 -> 1.0.19.105 (C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19) +current -> 1.0.20.160 (C:\Users\NikitaGryzlov\AppData\Local\ovm\current) +dev -> 1.0.20.160 (C:\Users\NikitaGryzlov\AppData\Local\ovm\dev) +``` + +```sh +$ ovm ls --remote # Вывод версий, доступных к установке с сайта + +1.0.19 (http://oscript.io/downloads/archive/1_0_19) +1.0.18 (http://oscript.io/downloads/archive/1_0_18) +``` + +```sh +$ ovm ls --all # Вывод всех версий - установленных и доступных + +1.0.18 -> 1.0.18.101 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.18 -> http://oscript.io/downloads/archive/1_0_18 +1.0.19 -> 1.0.19.105 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19 -> http://oscript.io/downloads/archive/1_0_19 +current -> 1.0.20.160 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\current -> unknown +dev -> 1.0.20.160 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\dev -> http://oscript.io/downloads +stable -> unknown -> not installed -> http://oscript.io/downloads +``` + +### Запуск приложений в окружении конкретной версии + +ovm позволяет запускать приложения в окружении конкретной установленной версии OneScript. При этом происходит доустановка переменной окружения `PATH` к каталогу указанной версии. + +```sh +$ ovm run 1.0.19 oscript -version # Выполнение команды oscript -version в окружении 1.0.19 + +1.0.19.105 +``` + +```sh +$ ovm run 1.0.19 where oscript # Вывод сторонней команды where в окружении 1.0.19 + +C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe # Путь к 1.0.19 указывается раньше, чем путь к current, благодаря запуску ovm run +C:\Users\NikitaGryzlov\AppData\Local\ovm\current\bin\oscript.exe +``` + +### Получение пути к исполняемому файлу oscript + +```sh +$ ovm which 1.0.19 + +C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe +``` + +## Вывод команды ovm + + ``` Приложение: ovm - OneScript Version Manager + OneScript Version Manager v1.0.0 Строка запуска: ovm [OPTIONS] КОМАНДА [аргументы...] @@ -13,12 +174,13 @@ -v, --version показать версию и выйти Доступные команды: - install, i Установка OneScript указанной версии + install, i Установить OneScript указанных версий use, u Использовать OneScript указанной версии - uninstall, delete, d Удаление OneScript указанных версий - list, ls Вывести список установленных версий - run, r Запустить исполняемый файл в окружении указанной версии + uninstall, delete, d Удалить OneScript указанных версий + list, ls Вывести список установленных и/или доступных версий OneScript + run, r Запустить исполняемый файл в окружении указанной версии OneScript which, w Вывести путь к установленной версии OneScript + migrate Поместить установленный системный OneScript под контроль ovm. Только для Windows Для вывода справки по доступным командам наберите: ovm КОМАНДА --help ``` diff --git a/features/integration.feature b/features/integration.feature new file mode 100644 index 0000000..914ed62 --- /dev/null +++ b/features/integration.feature @@ -0,0 +1,43 @@ +#language: ru + +Функциональность: Интеграционный сценарий + +Как Пользователь ovm +Я хочу быть уверен, что оно в принципе работает +Чтобы начать применять ovm в жизни + +Контекст: + Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" + + +Сценарий: Вывод справки + Когда Я выполняю команду "ovm" + Тогда я вижу в консоли вывод "OneScript Version Manager" + И я вижу в консоли вывод "Строка запуска: ovm [OPTIONS] КОМАНДА [аргументы...]" + +Сценарий: Вывод версии + Когда Я выполняю команду "ovm -v" + Тогда я вижу в консоли строку подобно "\d+\.\d+\.\d+" + +Сценарий: Установка версии + Когда Я выполняю команду "ovm install stable" + Тогда я вижу в консоли вывод "Установка OneScript stable..." + И я вижу в консоли вывод "Установка OneScript stable завершена" + И я вижу в консоли вывод "ovm use stable" + + Когда Я выполняю команду "ovm ls" + Тогда я вижу в консоли строку подобно "stable -> .*" + +Сценарий: Использование версии + Допустим Я выполняю команду "ovm install stable" + Когда Я выполняю команду "ovm use stable" + Тогда я вижу в консоли вывод "OneScript stable активирован" + +Сценарий: Проверка использования версии + Когда Я выполняю команду "ovm ls" + И Я Показываю вывод команды + Тогда я вижу в консоли строку подобно "current -> .*" + И Я выполняю команду "which oscript" + И я вижу в консоли строку подобно ".*oscript$" + И Я выполняю команду "which opm" + И я вижу в консоли строку подобно ".*opm$" diff --git a/features/step_definitions/integration.os b/features/step_definitions/integration.os new file mode 100644 index 0000000..5dd75d3 --- /dev/null +++ b/features/step_definitions/integration.os @@ -0,0 +1,31 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ЯУстанавливаюПеременнойСредыЗначение"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + +//Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" +Процедура ЯУстанавливаюПеременнойСредыЗначение(Знач ИмяПеременной, Знач ЗначениеПеременной) Экспорт + УстановитьПеременнуюСреды(ИмяПеременной, ЗначениеПеременной); +КонецПроцедуры diff --git a/junit-bdd.xml b/junit-bdd.xml new file mode 100644 index 0000000..551d5c9 --- /dev/null +++ b/junit-bdd.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties index 5130bd5..adfc1d2 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -15,4 +15,4 @@ sonar.sources=./src # Encoding of the source code. Default is default system encoding sonar.sourceEncoding=UTF-8 -# sonar.coverageReportPaths=coverage/genericCoverage.xml +sonar.coverageReportPaths=coverage/genericCoverage.xml diff --git a/src/cmd/ovm.os b/src/cmd/ovm.os index 1e28728..f8ba176 100644 --- a/src/cmd/ovm.os +++ b/src/cmd/ovm.os @@ -8,16 +8,16 @@ Процедура ВыполнитьПриложение() - КонсольноеПриложение = Новый КонсольноеПриложение(ПараметрыПриложения.ИмяПриложения(), "OneScript Version Manager"); + КонсольноеПриложение = Новый КонсольноеПриложение(ПараметрыПриложения.ИмяПриложения(), "OneScript Version Manager v" + ПараметрыПриложения.Версия()); КонсольноеПриложение.Версия("v version", ПараметрыПриложения.Версия()); - КонсольноеПриложение.ДобавитьКоманду("install i", "Установка OneScript указанной версии", Новый КомандаInstall()); + КонсольноеПриложение.ДобавитьКоманду("install i", "Установить OneScript указанных версий", Новый КомандаInstall()); КонсольноеПриложение.ДобавитьКоманду("use u", "Использовать OneScript указанной версии", Новый КомандаUse()); - КонсольноеПриложение.ДобавитьКоманду("uninstall delete d", "Удаление OneScript указанных версий", Новый КомандаUninstall()); - КонсольноеПриложение.ДобавитьКоманду("list ls", "Вывести список установленных версий", Новый КомандаList()); - КонсольноеПриложение.ДобавитьКоманду("run r", "Запустить исполняемый файл в окружении указанной версии", Новый КомандаRun()); + КонсольноеПриложение.ДобавитьКоманду("uninstall delete d", "Удалить OneScript указанных версий", Новый КомандаUninstall()); + КонсольноеПриложение.ДобавитьКоманду("list ls", "Вывести список установленных и/или доступных версий OneScript", Новый КомандаList()); + КонсольноеПриложение.ДобавитьКоманду("run r", "Запустить исполняемый файл в окружении указанной версии OneScript", Новый КомандаRun()); КонсольноеПриложение.ДобавитьКоманду("which w", "Вывести путь к установленной версии OneScript", Новый КомандаWhich()); - КонсольноеПриложение.ДобавитьКоманду("migrate", "Поместить установленный OneScript под контроль ovm", Новый КомандаMigrate()); + КонсольноеПриложение.ДобавитьКоманду("migrate", "Поместить установленный системный OneScript под контроль ovm. Только для Windows", Новый КомандаMigrate()); КонсольноеПриложение.Запустить(АргументыКоманднойСтроки); diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os" index 3c79b9f..4398be0 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Install.os" @@ -3,8 +3,8 @@ Перем Лог; Процедура ОписаниеКоманды(Команда) Экспорт - - Команда.Аргумент("VERSION", , "Устанавливаемая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev") + + Команда.Аргумент("VERSION", , "Устанавливаемая версия (версии) OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev. Может быть передано несколько значений") .ТМассивСтрок() .ВОкружении("OVM_INSTALL_VERSION"); Команда.Спек = "VERSION..."; diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os" index 778cbf3..308bf46 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Run.os" @@ -13,7 +13,7 @@ .ВОкружении("OVM_RUN_APP");; КомандаПриложения - .Аргумент("ARGS", "", "Аргументы, передаваемые приложению.").ТМассивСтрок() + .Аргумент("ARGS", "", "Аргументы, передаваемые приложению").ТМассивСтрок() .ВОкружении("OVM_RUN_ARGS");; // TODO: Убрать, после реализации https://github.com/khorevaa/cli/issues/10 diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os" index 5544b3f..241dd11 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Uninstall.os" @@ -12,7 +12,7 @@ .ВОкружении("OVM_UNINSTALL_ALL"); КомандаПриложения - .Аргумент("VERSION", , "Удаляемая версия OneScript (возвможна передача нескольких значений). Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev") + .Аргумент("VERSION", , "Удаляемая версия (версии) OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev. Может быть передано несколько значений") .ВОкружении("OVM_UNINSTALL_VERSION") .ТМассивСтрок(); diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os" index dddc0ab..6a19c2f 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Which.os" @@ -6,7 +6,7 @@ Процедура ОписаниеКоманды(КомандаПриложения) Экспорт КомандаПриложения - .Аргумент("VERSION", , "Искомая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev") + .Аргумент("VERSION", "current", "Искомая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev") .ВОкружении("OVM_WHICH_VERSION") .ТСтрока(); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272OneScript.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272OneScript.os" index ad2edec..5073602 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272OneScript.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\321\211\320\270\320\272OneScript.os" @@ -80,7 +80,8 @@ ТекстСкрипта = "#!/bin/sh |dirpath=`dirname $0` - |mono $dirpath/oscript.exe ""$@"""; + |mono $dirpath/oscript.exe ""$@"" + |"; ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); @@ -88,13 +89,16 @@ ТекстСкрипта = "#!/bin/sh |dirpath=`dirname $0` - |oscript ""$dirpath/../lib/opm/src/opm.os"" ""$@"""; + |oscript ""$dirpath/../lib/opm/src/opm.os"" ""$@"" + |"; + + ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); КонецПроцедуры Процедура ДобавитьShСкрипт(Знач ПутьКСкрипту, Знач ТекстСкрипта) - Лог.Информация("Создание sh-скрипта..."); + Лог.Информация("Создание sh-скрипта %1...", Новый Файл(ПутьКСкрипту).ИмяБезРасширения); Лог.Отладка("Путь с sh-скрипту: %1", ПутьКСкрипту); diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" index 3a41a4e..55d0328 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213OVM.os" @@ -6,7 +6,15 @@ Функция КаталогУстановкиПоУмолчанию() Экспорт - Возврат ОбъединитьПути(СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), "ovm"); + КаталогУстановкиПоУмолчанию = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH"); + Если НЕ ЗначениеЗаполнено(КаталогУстановкиПоУмолчанию) Тогда + КаталогУстановкиПоУмолчанию = ОбъединитьПути( + СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), + "ovm" + ); + КонецЕсли; + + Возврат КаталогУстановкиПоУмолчанию; КонецФункции diff --git a/tasks/coverage.os b/tasks/coverage.os new file mode 100644 index 0000000..1100268 --- /dev/null +++ b/tasks/coverage.os @@ -0,0 +1,76 @@ +#Использовать 1commands +#Использовать asserts +#Использовать fs +#Использовать json + +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + +ФС.ОбеспечитьПустойКаталог("coverage"); +ПутьКСтат = "coverage/stat.json"; + +Команда = Новый Команда; +Команда.УстановитьКоманду("oscript"); +Если НЕ ЭтоWindows Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); +КонецЕсли; +Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); +Команда.ДобавитьПараметр("tasks/test.os"); +Команда.ПоказыватьВыводНемедленно(Истина); + +Попытка + КодВозврата = Команда.Исполнить(); +Исключение +КонецПопытки; + +Файл_Стат = Новый Файл(ПутьКСтат); +Ожидаем.Что(Файл_Стат.Существует(), СтрШаблон("Файл <%1> с результатами покрытия не существует!", Файл_Стат.ПолноеИмя)).ЭтоИстина(); + +ЧтениеТекста = Новый ЧтениеТекста(ПутьКСтат, КодировкаТекста.UTF8); + +СтрокаJSON = ЧтениеТекста.Прочитать(); +ЧтениеТекста.Закрыть(); + +Парсер = Новый ПарсерJSON(); +ДанныеПокрытия = Парсер.ПрочитатьJSON(СтрокаJSON); + +ЗаписьXML = Новый ЗаписьXML; +ЗаписьXML.ОткрытьФайл("coverage/genericCoverage.xml"); +ЗаписьXML.ЗаписатьОбъявлениеXML(); +ЗаписьXML.ЗаписатьНачалоЭлемента("coverage"); +ЗаписьXML.ЗаписатьАтрибут("version", "1"); + +Для Каждого Файл Из ДанныеПокрытия Цикл + + ДанныеФайла = Файл.Значение; + + ЗаписьXML.ЗаписатьНачалоЭлемента("file"); + ЗаписьXML.ЗаписатьАтрибут("path", ДанныеФайла.Получить("#path")); + + Для Каждого КлючИЗначение Из ДанныеФайла Цикл + + Если КлючИЗначение.Ключ = "#path" Тогда + Продолжить; + КонецЕсли; + + ДанныеПроцедуры = КлючИЗначение.Значение; + Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл + + ЗаписьXML.ЗаписатьНачалоЭлемента("lineToCover"); + + ЗаписьXML.ЗаписатьАтрибут("lineNumber", ДанныеСтроки.Ключ); + Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0; + ЗаписьXML.ЗаписатьАтрибут("covered", Формат(Покрыто, "БИ=true; БЛ=false")); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover + КонецЦикла + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // file + +КонецЦикла; + +ЗаписьXML.ЗаписатьКонецЭлемента(); // coverage +ЗаписьXML.Закрыть(); + +ЗавершитьРаботу(КодВозврата); diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg new file mode 100644 index 0000000..4101683 --- /dev/null +++ b/tasks/oscript.cfg @@ -0,0 +1 @@ +lib.additional=../oscript_modules diff --git a/tasks/test.os b/tasks/test.os new file mode 100644 index 0000000..88e7ccc --- /dev/null +++ b/tasks/test.os @@ -0,0 +1,17 @@ +#Использовать 1bdd + +КаталогФич = ОбъединитьПути(".", "features"); + +Файл_КаталогФич = Новый Файл(КаталогФич); + +ИсполнительБДД = Новый ИсполнительБДД; +РезультатВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); +ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения); + +ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; +ГенераторОтчетаJUnit.Сформировать(РезультатВыполнения, ИтоговыйРезультатВыполнения, "junit-bdd.xml"); + +Сообщить(ИтоговыйРезультатВыполнения); +Если ИтоговыйРезультатВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался Тогда + ВызватьИсключение 1; +КонецЕсли; diff --git a/travis.sh b/travis.sh index 54e5dc8..4f32eee 100755 --- a/travis.sh +++ b/travis.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e -#opm run coverage +oscript tasks/coverage.os temp=`cat src/cmd/Модули/ПараметрыПриложения.os | grep "Версия = " | sed 's|[^"]*"||' | sed -r 's/".+//'` version=${temp##*|}