Skip to content

Commit d3e8377

Browse files
committed
Finish 0.9.9
2 parents ecc8048 + ee01e4e commit d3e8377

File tree

51 files changed

+2988
-1960
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2988
-1960
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
*.ospx
22
tests.xml
3+
coverage/*
4+
5+
tests-reports/*

.travis.yml

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,85 @@
11
sudo: required
2-
3-
dist: trusty
2+
language: generic
43

54
notifications:
65
email: false
6+
env:
7+
global:
8+
- CHANNEL=dev
9+
- PACKAGE_NAME=cli
10+
matrix:
11+
- OSCRIPT_VERSION=1_0_20
12+
- OSCRIPT_VERSION=night-build
13+
matrix:
14+
allow_failures:
15+
- env: OSCRIPT_VERSION=night-build
16+
17+
services:
18+
- docker
19+
20+
addons:
21+
sonarqube: true
722

8-
before_install:
9-
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
10-
- echo "deb http://download.mono-project.com/repo/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/mono-official.list
11-
- sudo apt-get update
12-
- sudo apt-get install mono-complete mono-devel
13-
- wget -O os.deb http://oscript.io/downloads/1_0_18/onescript-engine_1.0.18_all.deb
14-
- sudo dpkg -i *.deb; sudo apt install -f
15-
- sudo opm install opm@0.12.1
23+
jdk:
24+
- oraclejdk8
25+
26+
before_install:
27+
# Load cached docker images
28+
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
29+
30+
before_script:
31+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
32+
- chmod +x ./cc-test-reporter
33+
- ./cc-test-reporter before-build
34+
35+
after_script:
36+
- ./cc-test-reporter after-build --prefix "/home/travis/build/khorevaa/cli/coverage/" --exit-code $TRAVIS_TEST_RESULT
37+
38+
before_cache:
39+
# Save tagged docker images
40+
- >
41+
mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}'
42+
| xargs -n 2 -t sh -c 'test -e $HOME/docker/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.tar.gz'
1643
1744
install:
18-
- sudo opm install 1testrunner
19-
- sudo opm install 1bdd
20-
- sudo opm install
45+
- docker pull evilbeaver/onescript:1.0.19
2146

22-
env:
23-
global:
24-
- CHANNEL=dev
47+
script:
48+
- docker version
49+
- docker run -it -e OSCRIPT_VERSION=$OSCRIPT_VERSION -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; sh /work_dir/travis-ci.sh; exit' | tee /tmp/test.log
50+
- grep 'Результат прогона тестов <Да>' /tmp/test.log
51+
after_success:
52+
# - bash <(curl -s https://codecov.io/bash)
53+
# - ./sonar-qube.sh
2554

2655
cache:
2756
directories:
2857
- '$HOME/.m2/repository'
2958
- '$HOME/.sonar/cache'
59+
- '$HOME/docker'
3060
jobs:
3161
include:
32-
- stage: Тестирование
33-
script: opm test
3462
- stage: Сборка и публикация github & hub.oscript.io
3563
script: skip
3664
before_deploy:
37-
- opm build ./
65+
- docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm build ./ ; exit'
3866
deploy:
3967
- provider: releases
4068
api_key: "$GITHUB_OAUTH_TOKEN"
4169
file_glob: true
42-
file: cli*.ospx
70+
file: $PACKAGE_NAME*.ospx
4371
skip_cleanup: true
4472
on:
4573
branch: master
4674
tags: true
4775
- provider: script
4876
skip_cleanup: true
49-
script: opm push --token $GITHUB_OAUTH_TOKEN --channel dev --file ./cli-*.ospx;
77+
script: docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel dev --file ./$PACKAGE_NAME-*.ospx; exit'
5078
on:
5179
branch: develop
5280
- provider: script
5381
skip_cleanup: true
54-
script: opm push --token $GITHUB_OAUTH_TOKEN --channel stable --file ./cli-*.ospx;
82+
script: docker run -it -v $(pwd):/work_dir evilbeaver/onescript:1.0.19 sh -c 'cd /work_dir; opm push --token $GITHUB_OAUTH_TOKEN --channel stable --file ./$PACKAGE_NAME-*.ospx; exit'
5583
on:
5684
branch: master
5785
tags: true

.vscode/launch.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
3+
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
4+
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "Отладка 1Script",
9+
"type": "oscript",
10+
"request": "launch",
11+
"program": "${file}",
12+
"args": [],
13+
"cwd": "${workspaceRoot}",
14+
"runtimeExecutable": "/usr/bin/oscript",
15+
"debugPort": 2801,
16+
"protocol": "internal"
17+
}
18+
]
19+
}

ISSUE_TEMPLATE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Просто создавайте запросы на измнения или ошибки!
1+
Просто создавайте запросы на изменения или ошибки!

README.md

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# cli
1+
# `C`_ommand_ `L`_ine_ `I`_nterface_ для OScript
22

33
[![Stars](https://img.shields.io/github/stars/khorevaa/cli.svg?label=Github%20%E2%98%85&a)](https://github.com/khorevaa/cli/stargazers)
44
[![Release](https://img.shields.io/github/tag/khorevaa/cli.svg?label=Last%20release&a)](https://github.com/khorevaa/cli/releases)
@@ -7,6 +7,7 @@
77
[![Build Status](https://travis-ci.org/khorevaa/cli.svg?branch=master)](https://travis-ci.org/khorevaa/cli)
88
[![Coverage Status](https://coveralls.io/repos/github/khorevaa/cli/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/cli?branch=master)
99

10+
Короткое название библиотеки `cli`
1011

1112
Данная библиотека для языка OScript, позволяет создавать консольные приложения с разбором и проверкой аргументов.
1213

@@ -52,7 +53,7 @@
5253
КонецПопытки;
5354
```
5455

55-
### Пример приложения с несколькими командами:
56+
### Пример приложения с несколькими командами
5657

5758
```bsl
5859
#Использовать cli
@@ -84,6 +85,57 @@
8485
КонецПопытки;
8586
```
8687

88+
### Пример приложения с вложенными командами
89+
90+
```bsl
91+
#Использовать cli
92+
93+
///////////////////////////////////////////////////////////////////////////////
94+
95+
Процедура ВыполнитьПриложение()
96+
97+
Приложение = Новый КонсольноеПриложение("cli", "Помощник генерации приложения на основании шаблона cli");
98+
Приложение.Версия("v version","1.0.0");
99+
100+
Приложение.ДобавитьКоманду("i init", "Инициализация структуры нового приложения", Новый КомандаInit);
101+
Приложение.ДобавитьКоманду("g generate", "Генерация элементов структуры приложения", Новый КомандаGenerate);
102+
103+
Приложение.Запустить(АргументыКоманднойСтроки);
104+
105+
КонецПроцедуры // ВыполнениеКоманды()
106+
107+
///////////////////////////////////////////////////////
108+
109+
Попытка
110+
111+
ВыполнитьПриложение();
112+
113+
Исключение
114+
115+
Сообщить(ОписаниеОшибки());
116+
117+
КонецПопытки;
118+
119+
```
120+
Класс `КомандаGenerate`
121+
Для добавления подкоманды в любую команду используются методы `ДобавитьПодкоманду` или `ДобавитьКоманду`
122+
123+
```bsl
124+
125+
Процедура ОписаниеКоманды(Команда) Экспорт
126+
127+
// Метод <ДобавитьПодкоманду>
128+
Команда.ДобавитьПодкоманду("c command", "Генерация дополнительной вложенной команды", Новый КомандаGenerateCommand);
129+
130+
// Метод <ДобавитьКоманду>
131+
Команда.ДобавитьКоманду("o option", "Генерация опции для команды", Новый КомандаGeneratOption);
132+
133+
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
134+
135+
КонецПроцедуры
136+
137+
```
138+
87139
## Мотивация
88140

89141
Для PR в cmdline слишком большие изменения в API, т.е. обеспечить совместимость очень трудоемко.
@@ -116,6 +168,10 @@
116168
$ opm install -f <ПутьКФайлу>
117169
```
118170

171+
Либо, скачать библиотеку с помощью opm:
172+
173+
opm install cli
174+
119175
## Базовые принципы
120176

121177
При создании приложения необходимо указать имя приложения и описание:
@@ -124,35 +180,52 @@ $ opm install -f <ПутьКФайлу>
124180
Приложение = Новый КонсольноеПриложение("cli", "Помощник генерации приложения на основании шаблона cli");
125181
```
126182

127-
Для установки основной функции выполнения приложения необходимо создать класс, или сам модуль должен реализовать экспортную процедуру:
183+
Каждый возможный вариант выполнения - это "Команда". Команды могут создаваться явно, кроме того, само Приложение содержит в себе корневую (Основную) команду.
184+
185+
Каждая команда реализуется в виде отдельного класса. Каждый такой класс обязан иметь экспортную процедуру
186+
128187
```bsl
129188
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
130189
КонецПроцедуры
131190
```
191+
192+
Для установки основной функции выполнения приложения в приложении надо установить основное действие. В простейшем случае основным действием может выступать сам стартовый сценарий:
193+
132194
Передать данный класс через процедуру:
133195
```bsl
134196
Приложение.УстановитьОсновноеДействие(ЭтотОбъект)
135197
```
136198

199+
### Встроенная команда "Версия"
137200

138201
Для добавления отображения версии через опции: ```-v, --version``` надо добавить строчку:
139202

140203
```bsl
141204
Приложение.Версия("v version", "1.2.3");
142205
```
143206

207+
Это позволит запускать приложение с ключом ``v`` или ``--version``:
208+
209+
my-app --version
210+
211+
### Запуск парсера аргументов и приложения в целом
212+
144213
Для запуска приложения необходимо добавить строчку:
145214

146215
```bsl
147216
Приложение.Запустить(АргументыКоманднойСтроки);
148217
```
149218

219+
Этот вызов является "точкой входа" в консольное приложение. В общем случае, после него уже не идет никакого дополнительного кода. Парсер анализирует аргументы и запускает команды автоматически.
220+
150221
## Параметры команд/приложения
151222

152223
Все параметры разделяются на два типа:
153224
* Опция
154225
* Аргумент
155226

227+
В общем случае, Опции имеют имена, аргументы являются позиционными. Кроме того, по умолчанию указание опций необязательно, а аргументов - обязательно. Это можно переопределить, но дефолтное поведение именно такое. Аргумент - обязателен, опция - нет.
228+
156229
## Опция
157230

158231
Опция может быть следующих простых типов:
@@ -346,7 +419,7 @@ cli поддерживает автоматическую инициализац
346419

347420
## Строка использования приложения (спек)
348421

349-
Синтаксис спек базируется на POSIX.
422+
Синтаксис спек базируется на POSIX. Спек является грамматикой парсера аргументов и определяет порядок следования аргументов и опций в командной строке, а также вариативность параметров. Спек формируется либо вручную через указание в поле `Спек`, либо автоматически в момент вызова выполнения приложения / или команды.
350423

351424
### Опции
352425

@@ -375,7 +448,7 @@ cli поддерживает автоматическую инициализац
375448

376449
Пример добавления аргументов в команду:
377450

378-
```go
451+
```bsl
379452
Команда.Аргумент("SRC", ...);
380453
Команда.Аргумент("DST", ...);
381454
```
@@ -388,6 +461,8 @@ cli позволяет произвольно настраивать поряд
388461
Команда.Спек = "-f -g NAME -h PATH";
389462
```
390463

464+
В примере выше задана грамматика: в командой строке могут идти сначала опции -f и -g, затем аргумент NAME, затем опция -h, затем аргумент PATH.
465+
391466
## Необязательность
392467

393468
Для того, чтобы сделать аргументы или опции необязательными, их необходимо заключить в `[...]`:

appveyor.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
version: 0.9.8-{build}
2+
pull_requests:
3+
do_not_increment_build_number: true
4+
max_jobs: 1
5+
init:
6+
- ps: Set-WinSystemLocale ru-RU
7+
8+
#environment:
9+
# oscript: C:\Program Files (x86)\OneScript\bin\oscript.exe
10+
11+
install:
12+
- cmd: >-
13+
@echo on
14+
# git submodule update --init --recursive
15+
set
16+
17+
curl -o %temp%\oscript-setup.exe http://oscript.io/downloads/latest/exe
18+
19+
%temp%\oscript-setup.exe /silent /log="%temp%\oscript-setup.log" /saveinf="%temp%\oscript-setup-settings.txt"
20+
21+
set OSCRIPT=%ProgramFiles(x86)%\OneScript
22+
23+
dir "%OSCRIPT%\bin"
24+
dir "%OSCRIPT%\lib"
25+
26+
rem SET PATH=%CD%\engine\bin;%PATH%
27+
28+
SET PATH=%OSCRIPT%\bin;%PATH%
29+
30+
where oscript
31+
32+
oscript -version
33+
34+
chcp 65001
35+
36+
opm install opm
37+
38+
opm install 1testrunner
39+
40+
opm install 1bdd
41+
42+
opm install coverage
43+
44+
45+
opm install
46+
47+
opm list
48+
# to disable automatic builds
49+
build: off
50+
test_script:
51+
- cmd: >-
52+
53+
opm run coverage
54+
55+
pushd %APPVEYOR_BUILD_FOLDER%
56+
57+
after_test:
58+
- ps: # upload results to AppVeyor
59+
- ps: Write-Host "Загружаю результаты тестов на CI"
60+
- ps: $wc = New-Object 'System.Net.WebClient'
61+
- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests-reports\tests.xml))
62+
artifacts:
63+
- path: tests-reports\tests.xml

package-loader.os

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)