1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-24 19:49:22 +02:00

Merge branch 'main' into pr/24

This commit is contained in:
Anton
2024-06-09 17:30:11 +03:00
2139 changed files with 146672 additions and 10152 deletions

View File

@@ -13,13 +13,14 @@ jobs:
- uses: actions/checkout@v4
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
version: 1.9.0
- name: Установить cmdline, asserts и osparser
run: |
opm install cmdline
opm install asserts
opm install osparser
opm install coloratos
- name: Сформировать список методов ОПИ -> CLI
run: oscript ./.github/workflows/os/cli_parse.os
@@ -33,30 +34,30 @@ jobs:
- name: Собрать и установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
- name: Собрать бинарник
run: |
cd ./cli
cd ./src/ru/cli
oscript -make core/Classes/Приложение.os oint
- name: Собрать exe
run: |
cd ./cli
cd ./src/ru/cli
oscript -make core/Classes/Приложение.os oint.exe
- name: Записать артефакт
uses: actions/upload-artifact@v4
with:
name: oint
path: ./cli/oint
path: ./src/ru/cli/oint
- name: Создать каталог deb-пакета
run: |
mkdir -p .debpkg/usr/bin
cp ./cli/oint .debpkg/usr/bin/oint
cp ./src/ru/cli/oint .debpkg/usr/bin/oint
chmod +x .debpkg/usr/bin/oint
- name: Собрать deb-пакет
@@ -65,9 +66,9 @@ jobs:
package: oint
package_root: .debpkg
maintainer: Anton Titovets <bayselonarrend@gmail.com>
version: '1.9.0' # refs/tags/v*.*.*
version: '1.10.0' # refs/tags/v*.*.*
arch: 'all'
depends: 'mono-runtime, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
depends: 'mono-devel, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
desc: 'OInt CLI - приложение для работы с API различных онлайн-сервисов из командной строки'
- uses: actions/upload-artifact@v3
@@ -80,7 +81,7 @@ jobs:
run: |
mkdir -p .rpmpkg/usr/bin
mkdir -p .rpmpkg/usr/share/oint/bin
cp ./cli/oint .rpmpkg/usr/share/oint/bin/oint
cp ./src/ru/cli/oint .rpmpkg/usr/share/oint/bin/oint
echo 'mono /usr/share/oint/bin/oint "$@"' > .rpmpkg/usr/bin/oint
chmod +x .rpmpkg/usr/bin/oint
@@ -91,11 +92,11 @@ jobs:
package: oint
package_root: .rpmpkg
maintainer: Anton Titovets <bayselonarrend@gmail.com>
version: '1.9.0'
version: '1.10.0'
arch: 'x86_64'
desc: 'OInt CLI - приложение для работы с API различных онлайн-сервисов из командной строки'
requires: |
mono-core
mono-devel
Requires: mono-locale-extras
- uses: actions/upload-artifact@v4

117
.github/workflows/cli_draft_en.yml vendored Normal file
View File

@@ -0,0 +1,117 @@
name: CLI | Добавить пакеты в Draft (EN)
on:
workflow_dispatch:
jobs:
Build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
- name: Установить cmdline, asserts и osparser
run: |
opm install cmdline
opm install asserts
opm install osparser
opm install coloratos
- name: Сформировать список методов ОПИ -> CLI
run: oscript ./.github/workflows/os/cli_parse.os
- name: Записать измененный список методов CLI
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: Vitaly the Alpaca (bot)
commit_user_email: vitaly.the.alpaca@gmail.com
commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
commit_message: Обновление зашифрованных данных по результатам тестов (workflow)
- name: Собрать и установить OInt
run: |
cd ./src/en/OInt
opm build
opm install *.ospx
- name: Собрать бинарник
run: |
cd ./src/en/cli
oscript -make core/Classes/Приложение.os oint
- name: Собрать exe
run: |
cd ./src/en/cli
oscript -make core/Classes/Приложение.os oint.exe
- name: Записать артефакт
uses: actions/upload-artifact@v4
with:
name: oint
path: ./src/en/cli/oint
- name: Создать каталог deb-пакета
run: |
mkdir -p .debpkg/usr/bin
cp ./src/en/cli/oint .debpkg/usr/bin/oint
chmod +x .debpkg/usr/bin/oint
- name: Собрать deb-пакет
uses: jiro4989/build-deb-action@v3
with:
package: oint
package_root: .debpkg
maintainer: Anton Titovets <bayselonarrend@gmail.com>
version: '1.10.0' # refs/tags/v*.*.*
arch: 'all'
depends: 'mono-devel, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
desc: 'OInt CLI - CLI toolkit for integrating with APIs of popular online services'
- uses: actions/upload-artifact@v3
with:
name: oint-deb
path: |
./*.deb
- name: Создать каталог rpm-пакета
run: |
mkdir -p .rpmpkg/usr/bin
mkdir -p .rpmpkg/usr/share/oint/bin
cp ./src/en/cli/oint .rpmpkg/usr/share/oint/bin/oint
echo 'mono /usr/share/oint/bin/oint "$@"' > .rpmpkg/usr/bin/oint
chmod +x .rpmpkg/usr/bin/oint
- name: Собрать rpm-пакет
uses: jiro4989/build-rpm-action@v2
with:
summary: 'OInt CLI - CLI toolkit for integrating with APIs of popular online services. Mono-runtime with .NET Framework 4.8 support required'
package: oint
package_root: .rpmpkg
maintainer: Anton Titovets <bayselonarrend@gmail.com>
version: '1.10.0'
arch: 'x86_64'
desc: 'OInt CLI - CLI toolkit for integrating with APIs of popular online services'
requires: |
mono-devel
Requires: mono-locale-extras
- uses: actions/upload-artifact@v4
with:
name: oint-rpm
path: |
./*.rpm
!./*-debuginfo-*.rpm
- name: Добавить DEB
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload draft ./*.deb
- name: Добавить RPM
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload draft ./*.rpm

View File

@@ -29,13 +29,14 @@ jobs:
- uses: actions/checkout@v4
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
version: 1.9.0
- name: Установить cmdline, asserts и osparser
run: |
opm install cmdline
opm install asserts
opm install osparser
opm install coloratos
- name: Сформировать список методов ОПИ -> CLI
run: oscript ./.github/workflows/os/cli_parse.os
@@ -49,30 +50,30 @@ jobs:
- name: Собрать и установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
- name: Собрать бинарник
run: |
cd ./cli
cd ./src/ru/cli
oscript -make core/Classes/Приложение.os oint
- name: Собрать exe
run: |
cd ./cli
cd ./src/ru/cli
oscript -make core/Classes/Приложение.os oint.exe
- name: Записать артефакт
uses: actions/upload-artifact@v4
with:
name: oint
path: ./cli/oint
path: ./src/ru/cli/oint
- name: Создать каталог deb-пакета
run: |
mkdir -p .debpkg/usr/bin
cp ./cli/oint .debpkg/usr/bin/oint
cp ./src/ru/cli/oint .debpkg/usr/bin/oint
chmod +x .debpkg/usr/bin/oint
- name: Собрать deb-пакет
@@ -81,9 +82,9 @@ jobs:
package: oint
package_root: .debpkg
maintainer: Anton Titovets <bayselonarrend@gmail.com>
version: '1.9.0' # refs/tags/v*.*.*
version: '1.10.0' # refs/tags/v*.*.*
arch: 'all'
depends: 'mono-runtime, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
depends: 'mono-devel, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
desc: 'OInt CLI - приложение для работы с API различных онлайн-сервисов из командной строки'
- uses: actions/upload-artifact@v3
@@ -96,7 +97,7 @@ jobs:
run: |
mkdir -p .rpmpkg/usr/bin
mkdir -p .rpmpkg/usr/share/oint/bin
cp ./cli/oint .rpmpkg/usr/share/oint/bin/oint
cp ./src/ru/cli/oint .rpmpkg/usr/share/oint/bin/oint
echo 'mono /usr/share/oint/bin/oint "$@"' > .rpmpkg/usr/bin/oint
chmod +x .rpmpkg/usr/bin/oint
@@ -107,11 +108,11 @@ jobs:
package: oint
package_root: .rpmpkg
maintainer: Anton Titovets <bayselonarrend@gmail.com>
version: '1.9.0'
version: '1.10.0'
arch: 'x86_64'
desc: 'OInt CLI - приложение для работы с API различных онлайн-сервисов из командной строки'
requires: |
mono-core
mono-devel
Requires: mono-locale-extras
- uses: actions/upload-artifact@v4
@@ -188,6 +189,16 @@ jobs:
- name: Выполнить СкачатьФайл
if: ${{ cancelled() }} == false
run: |
./oint telegram СкачатьФайл --debug --test \
--token "${{ env.json_Telegram_Token }}" \
--fileid "" \
- name: Выполнить ОтправитьТекстовоеСообщение
if: ${{ cancelled() }} == false
run: |
@@ -343,6 +354,17 @@ jobs:
- name: Выполнить СформироватьКлавиатуруПоМассивуКнопок
if: ${{ cancelled() }} == false
run: |
./oint telegram СформироватьКлавиатуруПоМассивуКнопок --debug --test \
--buttons "['Кнопка1','Кнопка2','Кнопка3']" \
--under true \
--column false \
- name: Выполнить Бан
if: ${{ cancelled() }} == false
run: |
@@ -517,27 +539,6 @@ jobs:
--forum "${{ env.json_Telegram_ForumID }}" \
--topic "${{ env.json_Telegram_TopicID }}" \
- name: Выполнить СформироватьКлавиатуруПоМассивуКнопок
if: ${{ cancelled() }} == false
run: |
./oint telegram СформироватьКлавиатуруПоМассивуКнопок --debug --test \
--buttons "['Кнопка1','Кнопка2','Кнопка3']" \
--under true \
--column false \
- name: Выполнить СкачатьФайл
if: ${{ cancelled() }} == false
run: |
./oint telegram СкачатьФайл --debug --test \
--token "${{ env.json_Telegram_Token }}" \
--fileid "" \
Testing-vk:
runs-on: ubuntu-latest
needs: [Decode, Build]
@@ -2879,6 +2880,329 @@ jobs:
--cells "" \
--sheetname "" \
Testing-dropbox:
runs-on: ubuntu-latest
needs: [Decode, Build]
steps:
- name: Получить тестовые данные из кэша
uses: actions/cache/restore@v3
with:
path: ./data.json
key: test-data
- name: Скачать артефакт с исполняемым файлом
uses: actions/download-artifact@v4
with:
name: oint
- name: JSON в переменные
uses: rgarcia-phi/json-to-variables@v1.1.0
with:
filename: 'data.json'
masked: true
- name: chmod для OInt
run: chmod +x ./oint
- name: Выполнить ПолучитьСсылкуАвторизации
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьСсылкуАвторизации --debug --test \
--appkey "" \
- name: Выполнить ПолучитьТокен
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьТокен --debug --test \
--appkey "" \
--appsecret "" \
--code "" \
- name: Выполнить ОбновитьТокен
if: ${{ cancelled() }} == false
run: |
./oint dropbox ОбновитьТокен --debug --test \
--appkey "" \
--appsecret "" \
--refresh "" \
- name: Выполнить ПолучитьИнформациюОбАккаунте
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьИнформациюОбАккаунте --debug --test \
--token "" \
--account "" \
- name: Выполнить ПолучитьДанныеИспользованияПространства
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьДанныеИспользованияПространства --debug --test \
--token "" \
- name: Выполнить ПолучитьИнформациюОбОбъекте
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьИнформациюОбОбъекте --debug --test \
--token "" \
--path "" \
--detail "" \
- name: Выполнить ПолучитьСписокФайловПапки
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьСписокФайловПапки --debug --test \
--token "" \
--path "" \
--detail "" \
--cursor "" \
- name: Выполнить ПолучитьПревью
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьПревью --debug --test \
--token "" \
--path "" \
- name: Выполнить ЗагрузитьФайл
if: ${{ cancelled() }} == false
run: |
./oint dropbox ЗагрузитьФайл --debug --test \
--token "" \
--file "" \
--path "" \
--overwrite "" \
- name: Выполнить ЗагрузитьФайлПоURL
if: ${{ cancelled() }} == false
run: |
./oint dropbox ЗагрузитьФайлПоURL --debug --test \
--token "" \
--url "" \
--path "" \
- name: Выполнить ПолучитьСтатусЗагрузкиПоURL
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьСтатусЗагрузкиПоURL --debug --test \
--token "" \
--job "" \
- name: Выполнить УдалитьОбъект
if: ${{ cancelled() }} == false
run: |
./oint dropbox УдалитьОбъект --debug --test \
--token "" \
--path "" \
--permanently "" \
- name: Выполнить КопироватьОбъект
if: ${{ cancelled() }} == false
run: |
./oint dropbox КопироватьОбъект --debug --test \
--token "" \
--form "" \
--to "" \
- name: Выполнить ПереместитьОбъект
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПереместитьОбъект --debug --test \
--token "" \
--form "" \
--to "" \
- name: Выполнить СоздатьПапку
if: ${{ cancelled() }} == false
run: |
./oint dropbox СоздатьПапку --debug --test \
--token "" \
--path "" \
- name: Выполнить СкачатьФайл
if: ${{ cancelled() }} == false
run: |
./oint dropbox СкачатьФайл --debug --test \
--token "" \
--path "" \
- name: Выполнить СкачатьПапку
if: ${{ cancelled() }} == false
run: |
./oint dropbox СкачатьПапку --debug --test \
--token "" \
--path "" \
- name: Выполнить ПолучитьСписокВерсийОбъекта
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьСписокВерсийОбъекта --debug --test \
--token "" \
--path "" \
--amount "" \
- name: Выполнить ВосстановитьОбъектКВерсии
if: ${{ cancelled() }} == false
run: |
./oint dropbox ВосстановитьОбъектКВерсии --debug --test \
--token "" \
--path "" \
--rev "" \
- name: Выполнить ПолучитьСписокТегов
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьСписокТегов --debug --test \
--token "" \
--paths "" \
- name: Выполнить ДобавитьТег
if: ${{ cancelled() }} == false
run: |
./oint dropbox ДобавитьТег --debug --test \
--token "" \
--path "" \
--tag "" \
- name: Выполнить УдалитьТег
if: ${{ cancelled() }} == false
run: |
./oint dropbox УдалитьТег --debug --test \
--token "" \
--path "" \
--tag "" \
- name: Выполнить ОпубликоватьПапку
if: ${{ cancelled() }} == false
run: |
./oint dropbox ОпубликоватьПапку --debug --test \
--token "" \
--path "" \
- name: Выполнить ОтменитьПубликациюПапки
if: ${{ cancelled() }} == false
run: |
./oint dropbox ОтменитьПубликациюПапки --debug --test \
--token "" \
--folder "" \
- name: Выполнить ДобавитьПользователейКФайлу
if: ${{ cancelled() }} == false
run: |
./oint dropbox ДобавитьПользователейКФайлу --debug --test \
--token "" \
--fileid "" \
--emails "" \
--readonly "" \
- name: Выполнить ДобавитьПользователейКПапке
if: ${{ cancelled() }} == false
run: |
./oint dropbox ДобавитьПользователейКПапке --debug --test \
--token "" \
--folder "" \
--emails "" \
--readonly "" \
- name: Выполнить ПолучитьСтатусАсинхронногоИзменения
if: ${{ cancelled() }} == false
run: |
./oint dropbox ПолучитьСтатусАсинхронногоИзменения --debug --test \
--token "" \
--job "" \
- name: Выполнить ОтменитьПубликациюФайла
if: ${{ cancelled() }} == false
run: |
./oint dropbox ОтменитьПубликациюФайла --debug --test \
--token "" \
--fileid "" \
Clear-Cache:
runs-on: ubuntu-latest
needs: [Testing-telegram, Testing-vk, Testing-viber]

3218
.github/workflows/cli_test_en.yml vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -32,6 +32,9 @@ jobs:
- name: Обновить Workflow тестирования CLI
run: oscript ./.github/workflows/os/cli_testmaker.os
- name: Обновить Workflow тестирования CLI (EN)
run: oscript ./.github/workflows/os/cli_testmaker_en.os
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: Vitaly the Alpaca (bot)

47
.github/workflows/docs_deploy_en.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: Документация | Развернуть на Neocities (английская версия)
on:
workflow_dispatch:
concurrency:
group: deploy-to-neocities
cancel-in-progress: true
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
- name: Перевести контент страниц
run: oscript ./.github/workflows/os/docs_pagetranslate.os
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Установка зависимостей
run: |
cd ./docs/docusaurus
npm install
- name: Сборка
run: |
cp -r ./docs/en/md ./docs/docusaurus/docs
cd ./docs/docusaurus
yarn build
- name: Развертывание на neocities
uses: jonchang/deploy-neocities@e557d8b4aa935cd3e1a437c038bb043c9b4064f6
with:
key: ${{ secrets.NEOCITIES_EN_API_TOKEN }}
dir: ./docs/docusaurus/build
clean: false

40
.github/workflows/docs_deploy_ru.yml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: Документация | Развернуть на Neocities (русская версия)
on:
workflow_dispatch:
concurrency:
group: deploy-to-neocities
cancel-in-progress: true
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Установка зависимостей
run: |
cd ./docs/docusaurus
npm install
- name: Сборка
run: |
cp -r ./docs/ru/md ./docs/docusaurus/docs
cd ./docs/docusaurus
yarn build
- name: Развертывание на neocities
uses: jonchang/deploy-neocities@e557d8b4aa935cd3e1a437c038bb043c9b4064f6
with:
key: ${{ secrets.NEOCITIES_API_TOKEN }}
dir: ./docs/docusaurus/build
clean: false

47
.github/workflows/docs_examples.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: Документация | Распарсить тесты в примеры кода
# Controls when the workflow will run
on:
workflow_dispatch:
jobs:
Convert:
runs-on: ubuntu-latest
permissions:
actions: write
contents: write
steps:
- uses: actions/checkout@v2
with:
token: ${{secrets.TOKEN}}
- name: Расшифровать тестовые данные
run: gpg --quiet --batch --yes --decrypt --passphrase="$ENC_JSON" --output ./data.json ./data.json.gpg
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
- name: Установить osparser
run: |
opm install osparser
- name: Выполнить скрипт парсинга тестов
run: oscript ./.github/workflows/os/docs_examples.os
- name: Удалить расшифрованный файл
continue-on-error: false
run: rm -f ./data.json
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: Vitaly the Alpaca (bot)
commit_user_email: vitaly.the.alpaca@gmail.com
commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
commit_message: Создание примеров кода документации на основе тестов

40
.github/workflows/docs_md.yml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: Документация | Создать MD страницы с документацией
# Controls when the workflow will run
on:
workflow_dispatch:
jobs:
Convert:
runs-on: ubuntu-latest
permissions:
actions: write
contents: write
steps:
- uses: actions/checkout@v2
with:
token: ${{secrets.TOKEN}}
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
- name: Установить osparser и cmdline
run: |
opm install osparser
opm install cmdline
- name: Выполнить скрипт парсинга тестов
run: oscript ./.github/workflows/os/docs_main.os
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: Vitaly the Alpaca (bot)
commit_user_email: vitaly.the.alpaca@gmail.com
commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
commit_message: Создание MD файлов документации

View File

@@ -1,9 +1,9 @@
name: OINT | Конвертация OPI -> OInt
name: OPI | Конвертация OPI -> OInt -> CLI
# Controls when the workflow will run
on:
workflow_dispatch:
on:
[workflow_dispatch]
jobs:
Convert:
@@ -22,11 +22,31 @@ jobs:
with:
version: 1.9.0
- name: Установить зависимости
run: |
opm install cmdline
opm install asserts
opm install osparser
opm install coloratos
- name: Выполнить скрипт преобразования OPI -> OInt
run: oscript ./.github/workflows/os/convert.os
- name: Обновить словари
run: oscript ./.github/workflows/os/oint_dictionary.os
- name: Выполнить скрипт локализации
run: oscript ./.github/workflows/os/opi_translate.os
- name: Выполнить скрипт парсинга CLI
run: oscript ./.github/workflows/os/cli_parse.os
- name: Обновить Workflow тестирования OInt
run: oscript ./.github/workflows/os/oint_testmaker.os
- name: Обновить Workflow тестирования OInt (EN)
run: oscript ./.github/workflows/os/oint_testmaker_en.os
- uses: stefanzweifel/git-auto-commit-action@v5
with:

46
.github/workflows/oint_coverage.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: OINT | Определить покрытие
on:
workflow_dispatch:
jobs:
Convert:
runs-on: ubuntu-latest
permissions:
actions: write
contents: write
steps:
- uses: actions/checkout@v2
with:
token: ${{secrets.TOKEN}}
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.0
- name: Установить 1commands, coverage и fs
run: |
opm install 1commands
opm install coverage
opm install fs
- name: Установить OInt
run: |
cd ./src/ru/OInt
opm build
opm install *.ospx
- name: Выполнить скрипт определения покрытия
run: oscript ./src/ru/OInt/coverage/Modules/Coverage_ОпределениеПокрытия.os
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: Vitaly the Alpaca (bot)
commit_user_email: vitaly.the.alpaca@gmail.com
commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
commit_message: Создание MD файлов документации

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Airtable:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,26 +81,26 @@ jobs:
- name: Создать/Изменить базу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьБазу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьБазу"
- name: Создать/Изменить таблицу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьТаблицу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьТаблицу"
- name: Создать/Изменить поле
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьПоле"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьПоле"
- name: Создать/Удалить записи
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьУдалитьЗаписи"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "АТ_СоздатьУдалитьЗаписи"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: Airtable
path: ./test_logs
key: logs-Airtable
path: ./docs/results/Airtable
- name: Записать измененные данные
@@ -140,6 +140,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Airtable
uses: actions/cache/restore@v3
with:
key: logs-Airtable
path: ./docs/results/Airtable
- name: Очистка логов Airtable
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Airtable"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Dropbox:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,18 +81,42 @@ jobs:
- name: Получить/Обновить токен
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ПолучитьОбновитьТокен"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ПолучитьОбновитьТокен"
- name: Загрузить файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ЗагрузитьФайл"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ЗагрузитьФайл"
- name: Загрузить файл по URL
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ЗагрузитьФайлПоURL"
- name: Создать каталог
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_СоздатьКаталог"
- name: Создать/Удалить тег
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_СоздатьУдалитьТег"
- name: Получить данные аккаунта
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ПолучитьАккаунт"
- name: Работа с доступами
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_РаботаСДоступами"
- name: Получить список файлов папки
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ДропБокс_ПолучитьСписокФайловПапки"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: Dropbox
path: ./test_logs
key: logs-Dropbox
path: ./docs/results/Dropbox
- name: Записать измененные данные
@@ -132,6 +156,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Dropbox
uses: actions/cache/restore@v3
with:
key: logs-Dropbox
path: ./docs/results/Dropbox
- name: Очистка логов Dropbox
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Dropbox"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-GoogleCalendar:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,26 +81,26 @@ jobs:
- name: Получить список календарей
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГК_ПолучитьСписокКалендарей"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГК_ПолучитьСписокКалендарей"
- name: Создать/Удалить календарь
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГК_СоздатьУдалитьКалендарь"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГК_СоздатьУдалитьКалендарь"
- name: Создать/Удалить событие
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГК_СоздатьУдалитьСобытие"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГК_СоздатьУдалитьСобытие"
- name: Получить список событий
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГК_ПолучитьСписокСобытий"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГК_ПолучитьСписокСобытий"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: GoogleCalendar
path: ./test_logs
key: logs-GoogleCalendar
path: ./docs/results/GoogleCalendar
- name: Записать измененные данные
@@ -140,6 +140,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи GoogleCalendar
uses: actions/cache/restore@v3
with:
key: logs-GoogleCalendar
path: ./docs/results/GoogleCalendar
- name: Очистка логов GoogleCalendar
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-GoogleCalendar"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-GoogleDrive:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,26 +81,26 @@ jobs:
- name: Получить список каталогов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГД_ПолучитьСписокКаталогов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГД_ПолучитьСписокКаталогов"
- name: Загрузить/Удалить Файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГД_ЗагрузитьУдалитьФайл"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГД_ЗагрузитьУдалитьФайл"
- name: Создать/Удалить кооментарий
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГД_СоздатьУдалитьКомментарий"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГД_СоздатьУдалитьКомментарий"
- name: Создать/Удалить каталог
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГД_СоздатьКаталог"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГД_СоздатьКаталог"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: GoogleDrive
path: ./test_logs
key: logs-GoogleDrive
path: ./docs/results/GoogleDrive
- name: Записать измененные данные
@@ -140,6 +140,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи GoogleDrive
uses: actions/cache/restore@v3
with:
key: logs-GoogleDrive
path: ./docs/results/GoogleDrive
- name: Очистка логов GoogleDrive
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-GoogleDrive"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-GoogleSheets:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,22 +81,22 @@ jobs:
- name: Создать таблицу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_СоздатьТаблицу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_СоздатьТаблицу"
- name: Получить таблицу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_ПолучитьТаблицу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_ПолучитьТаблицу"
- name: Заполнить/Очистить ячейки
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_ЗаполнитьОчиститьЯчейки"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_ЗаполнитьОчиститьЯчейки"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: GoogleSheets
path: ./test_logs
key: logs-GoogleSheets
path: ./docs/results/GoogleSheets
- name: Записать измененные данные
@@ -136,6 +136,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи GoogleSheets
uses: actions/cache/restore@v3
with:
key: logs-GoogleSheets
path: ./docs/results/GoogleSheets
- name: Очистка логов GoogleSheets
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-GoogleSheets"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-GoogleWorkspace:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,15 +81,23 @@ jobs:
- name: Получить ссылку авторизации
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГВ_ПолучитьСсылкуАвторизации"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГВ_ПолучитьСсылкуАвторизации"
- name: Получить токен
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГВ_ПолучитьТокен"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГВ_ПолучитьТокен"
- name: Обновить токен
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГВ_ОбновитьТокен"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ГВ_ОбновитьТокен"
- name: Записать логи
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
key: logs-GoogleWorkspace
path: ./docs/results/GoogleWorkspace
- name: Записать измененные данные
if: ${{ cancelled() }} == false
@@ -99,13 +107,6 @@ jobs:
path: ./data.json
- name: Записать логи
uses: actions/upload-artifact@v4
with:
name: GoogleWorkspace
path: ./test_logs
- name: Записать измененные данные
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
@@ -143,6 +144,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи GoogleWorkspace
uses: actions/cache/restore@v3
with:
key: logs-GoogleWorkspace
path: ./docs/results/GoogleWorkspace
- name: Очистка логов GoogleWorkspace
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-GoogleWorkspace"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Notion:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,46 +81,46 @@ jobs:
- name: Создать страницу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьСтраницу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьСтраницу"
- name: Создать/Изменить базу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьИзменитьБазу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьИзменитьБазу"
- name: Получить информацию о странице
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьИнформациюОСтранице"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьИнформациюОСтранице"
- name: Получить информацию о базе
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьИнформациюОБазе"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьИнформациюОБазе"
- name: Создать страницу в базу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьСтраницуВБазу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьСтраницуВБазу"
- name: Изменить свойства страницы
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ИзменитьСвойстваСтраницы"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ИзменитьСвойстваСтраницы"
- name: Создать/Удалить блок
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьУдалитьБлок"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьУдалитьБлок"
- name: Получить пользователей
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьПользователей"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьПользователей"
- name: Получить данные пользователя
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьДанныеПользователя"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьДанныеПользователя"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: Notion
path: ./test_logs
key: logs-Notion
path: ./docs/results/Notion
- name: Записать измененные данные
@@ -160,6 +160,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Notion
uses: actions/cache/restore@v3
with:
key: logs-Notion
path: ./docs/results/Notion
- name: Очистка логов Notion
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Notion"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Slack:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,62 +81,62 @@ jobs:
- name: Получить информацию о боте
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьИнформациюОБоте"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьИнформациюОБоте"
- name: Получить список пользователей
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокПользователей"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокПользователей"
- name: Получить список областей
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокОбластей"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокОбластей"
- name: Отправить/Удалить сообщение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОтправитьУдалитьСообщение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОтправитьУдалитьСообщение"
- name: Отправить/Удалить эфемерное
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОтправитьУдалитьЭфемерное"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОтправитьУдалитьЭфемерное"
- name: Получить отложенные сообщения
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьОтложенныеСообщения"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьОтложенныеСообщения"
- name: Создать/Архивировать канал
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_СоздатьАрхивироватьКанал"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_СоздатьАрхивироватьКанал"
- name: Получить список каналов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокКаналов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокКаналов"
- name: Открыть/Закрыть диалог
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОткрытьЗакрытьДиалог"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОткрытьЗакрытьДиалог"
- name: Получить список файлов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокФайлов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокФайлов"
- name: Загрузить/Удалить файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ЗагрузитьУдалитьФайл"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ЗагрузитьУдалитьФайл"
- name: Получить список внеш. файлов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокВФ"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокВФ"
- name: Загрузить/Удалить внеш. файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ЗагрузитьУдалитьВФ"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ЗагрузитьУдалитьВФ"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: Slack
path: ./test_logs
key: logs-Slack
path: ./docs/results/Slack
- name: Записать измененные данные
@@ -176,6 +176,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Slack
uses: actions/cache/restore@v3
with:
key: logs-Slack
path: ./docs/results/Slack
- name: Очистка логов Slack
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Slack"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Telegram:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,98 +81,98 @@ jobs:
- name: Получить информацию бота
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьИнформациюБота"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьИнформациюБота"
- name: Получить обновления
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьОбновления"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьОбновления"
- name: Установить Webhook
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_УстановитьWebhook"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_УстановитьWebhook"
- name: Отправить текстовое сообщение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьТекстовоеСообщение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьТекстовоеСообщение"
- name: Отправить картинку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьКартинку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьКартинку"
- name: Отправить видео
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьВидео"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьВидео"
- name: Отправить аудио
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьАудио"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьАудио"
- name: Отправить документ
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьДокумент"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьДокумент"
- name: Отправить гифку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьГифку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьГифку"
- name: Отправить медиагруппу
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьМедиагруппу"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьМедиагруппу"
- name: Отправить местоположение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьМестоположение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьМестоположение"
- name: Отправить контакт
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьКонтакт"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьКонтакт"
- name: Отправить опрос
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьОпрос"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ОтправитьОпрос"
- name: Переслать сообщение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПереслатьСообщение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПереслатьСообщение"
- name: Бан/Разбан
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_БанРазбан"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_БанРазбан"
- name: Создать ссылку-приглашение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СоздатьСсылкуПриглашение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СоздатьСсылкуПриглашение"
- name: Закрепить/Открепить сообщение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ЗакрепитьОткрепитьСообщение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ЗакрепитьОткрепитьСообщение"
- name: Получить число участников
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьЧислоУчастников"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьЧислоУчастников"
- name: Получить список аватаров форума
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьСписокАватаровФорума"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ПолучитьСписокАватаровФорума"
- name: Создать/Удалить тему форума
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СоздатьУдалитьТемуФорума"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СоздатьУдалитьТемуФорума"
- name: Изменить имя главной темы
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ИзменитьИмяГлавнойТемы"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_ИзменитьИмяГлавнойТемы"
- name: Скрыть/Показать главную тему
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СкрытьПоказатьГлавнуюТему"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Телеграм_СкрытьПоказатьГлавнуюТему"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: Telegram
path: ./test_logs
key: logs-Telegram
path: ./docs/results/Telegram
- name: Записать измененные данные
@@ -212,6 +212,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Telegram
uses: actions/cache/restore@v3
with:
key: logs-Telegram
path: ./docs/results/Telegram
- name: Очистка логов Telegram
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Telegram"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Twitter:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,31 +81,39 @@ jobs:
- name: Получить ссылку авторизации
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_ПолучитьСсылкуАвторизации"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_ПолучитьСсылкуАвторизации"
- name: Обновить токен
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_ОбновитьТокен"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_ОбновитьТокен"
- name: Текстовый твит
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТекстовыйТвит"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТекстовыйТвит"
- name: Твит с картинкой
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСКартинкой"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСКартинкой"
- name: Твит с видео
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСВидео"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСВидео"
- name: Твит с гиф
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСГиф"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСГиф"
- name: Твит с опросом
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСОпросом"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Твиттер_СоздатьТвитСОпросом"
- name: Записать логи
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
key: logs-Twitter
path: ./docs/results/Twitter
- name: Записать измененные данные
if: ${{ cancelled() }} == false
@@ -115,13 +123,6 @@ jobs:
path: ./data.json
- name: Записать логи
uses: actions/upload-artifact@v4
with:
name: Twitter
path: ./test_logs
- name: Записать измененные данные
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
@@ -159,6 +160,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Twitter
uses: actions/cache/restore@v3
with:
key: logs-Twitter
path: ./docs/results/Twitter
- name: Очистка логов Twitter
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Twitter"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-VK:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,90 +81,90 @@ jobs:
- name: Создать ссылку получения токена
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьСсылкуТокена"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьСсылкуТокена"
- name: Создать/Удалить пост
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьУдалитьПост"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьУдалитьПост"
- name: Создать/Удалить составной пост
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьСоставнойПост"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьСоставнойПост"
- name: Создать опрос
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьОпрос"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьОпрос"
- name: Добавить/Удалить картинку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СохранитьУдалитьКартинку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СохранитьУдалитьКартинку"
- name: Создать историю
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьИсторию"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьИсторию"
- name: Действия с обсуждениями
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_МетодыОбсуждений"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_МетодыОбсуждений"
- name: Лайк/Репост/Комментарий
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ЛайкРепостКоммент"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ЛайкРепостКоммент"
- name: Получить статистику
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСтатистику"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСтатистику"
- name: Получить статистику постов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСтатистикуПостов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСтатистикуПостов"
- name: Создать рекламную кампанию
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьРекламнуюКампанию"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьРекламнуюКампанию"
- name: Отправить сообщение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ОтправитьСообщение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ОтправитьСообщение"
- name: Получить категории товаров
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьКатегорииТоваров"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьКатегорииТоваров"
- name: Создать товар и подборку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьТоварПодборку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьТоварПодборку"
- name: Создать товар со свойствами
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьТоварСоСвойствами"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_СоздатьТоварСоСвойствами"
- name: Получить список товаров
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокТоваров"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокТоваров"
- name: Получить список подборок
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокПодборок"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокПодборок"
- name: Получить список свойств
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокСвойств"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокСвойств"
- name: Получить список заказов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокЗаказов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ПолучитьСписокЗаказов"
- name: Загрузить видео
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ЗагрузитьВидео"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ВК_ЗагрузитьВидео"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: VK
path: ./test_logs
key: logs-VK
path: ./docs/results/VK
- name: Записать измененные данные
@@ -204,6 +204,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи VK
uses: actions/cache/restore@v3
with:
key: logs-VK
path: ./docs/results/VK
- name: Очистка логов VK
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-VK"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-Viber:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,46 +81,46 @@ jobs:
- name: Получить информацию канала
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ПолучитьИнформациюОКанале"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ПолучитьИнформациюОКанале"
- name: Получить данные пользователя
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ПолучитьДанныеПользователя"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ПолучитьДанныеПользователя"
- name: Получить онлайн пользователей
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ПолучитьОнлайнПользователей"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ПолучитьОнлайнПользователей"
- name: Отправить текстовое сообщение
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьТекстовоеСообщение"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьТекстовоеСообщение"
- name: Отправить картинку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьКартинку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьКартинку"
- name: Отправить файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьФайл"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьФайл"
- name: Отправить контакт
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьКонтакт"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьКонтакт"
- name: Отправить локацию
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьЛокацию"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьЛокацию"
- name: Отправить ссылку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьСсылку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Вайбер_ОтправитьСсылку"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: Viber
path: ./test_logs
key: logs-Viber
path: ./docs/results/Viber
- name: Записать измененные данные
@@ -160,6 +160,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи Viber
uses: actions/cache/restore@v3
with:
key: logs-Viber
path: ./docs/results/Viber
- name: Очистка логов Viber
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Viber"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@@ -39,7 +39,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -47,7 +47,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: oint
path: ./OInt/*.ospx
path: ./src/ru/OInt/*.ospx
Testing-YandexDisk:
@@ -73,7 +73,7 @@ jobs:
- name: Установить OInt
run: |
cd ./OInt
cd ./src/ru/OInt
opm build
opm install *.ospx
@@ -81,50 +81,50 @@ jobs:
- name: Получить информацию о диске
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьИнформациюОДиске"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьИнформациюОДиске"
- name: Создать папку
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_СоздатьПапку"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_СоздатьПапку"
- name: Загрузить по URL и получить
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект"
- name: Загрузить/Удалить файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ЗагрузитьУдалитьФайл"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ЗагрузитьУдалитьФайл"
- name: Создать копию объекта
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_СоздатьКопиюОбъекта"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_СоздатьКопиюОбъекта"
- name: Получить ссылку на скачивание
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьСсылкуНаСкачивание"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьСсылкуНаСкачивание"
- name: Получить список файлов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьСписокФайлов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьСписокФайлов"
- name: Переместить объект
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПереместитьОбъект"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПереместитьОбъект"
- name: Действия с публичными объектами
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ДействияПубличныхОбъектов"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ДействияПубличныхОбъектов"
- name: Получить список опубликованных
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьСписокОпубликованных"
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "ЯДиск_ПолучитьСписокОпубликованных"
- name: Записать логи
uses: actions/upload-artifact@v4
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
name: YandexDisk
path: ./test_logs
key: logs-YandexDisk
path: ./docs/results/YandexDisk
- name: Записать измененные данные
@@ -164,6 +164,23 @@ jobs:
env:
ENC_JSON: ${{ secrets.ENC_JSON }}
- name: Получить логи YandexDisk
uses: actions/cache/restore@v3
with:
key: logs-YandexDisk
path: ./docs/results/YandexDisk
- name: Очистка логов YandexDisk
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-YandexDisk"
- name: Записать данные
uses: stefanzweifel/git-auto-commit-action@v5
with:

File diff suppressed because it is too large Load Diff

1291
.github/workflows/oint_test_full_en.yml vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +1,63 @@
#Использовать osparser
Перем ФайлСоставаОПИ;
Перем КаталогСписковСотава;
Перем МодульСоставаОПИ;
Перем СоответствиеМодулейКоманд;
Перем ТекущийМодуль;
Перем ТаблицаОписанийПараметров;
Перем ОбщийМассивМодулей;
Перем ТекущийФайлСостава;
Процедура ПриСозданииОбъекта()
МодульСоставаОПИ = Новый ТекстовыйДокумент();
ФайлСоставаОПИ = "./cli/data/Modules/СоставБиблиотеки.os";
СписокЯзыков = НайтиФайлы("./src/", "*");
ЗаписатьФункциюОпределенияВерсии();
ЗаписатьФункциюОпределенияКоманд();
ЗаписатьФункциюОпределенияМетодов();
МодульСоставаОПИ.Записать(ФайлСоставаОПИ);
Для Каждого Язык Из СписокЯзыков Цикл
ТекущийЯзык = Язык.ИмяБезРасширения;
Если Не ТекущийЯзык = "ru" Тогда
СоздатьОснову(ТекущийЯзык);
КонецЕсли;
МодульСоставаОПИ = Новый ТекстовыйДокумент();
ФайлСоставаОПИ = "./src/" + ТекущийЯзык + "/cli/data/Classes/СоставБиблиотеки.os";
КаталогСписковСотава = "./src/" + ТекущийЯзык + "/cli/data/Classes/internal/Classes/";
ЗаписатьНачалоФайла();
ЗаписатьФункциюОпределенияВерсии();
ЗаписатьФункциюОпределенияКоманд(ТекущийЯзык);
ЗаписатьВспомогательныеФункции();
МодульСоставаОПИ.Записать(ФайлСоставаОПИ);
ЗаполнитьТаблицыСостава();
ВыолнитьДополнительныйПеревод(ТекущийЯзык);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьОснову(ТекущийЯзык)
ПутьCLI = "./src/" + ТекущийЯзык + "/cli";
ПапкаCLI = Новый Файл(ПутьCLI);
Если ПапкаCLI.Существует() Тогда
УдалитьФайлы(ПапкаCLI.ПолноеИмя);
КонецЕсли;
ПутьОригинала = "./src/ru/cli";
ПапкаОригинала = Новый Файл(ПутьОригинала);
СкопироватьФайлы(ПапкаОригинала.ПолноеИмя, ПапкаCLI.ПолноеИмя);
КонецПроцедуры
Процедура ЗаписатьНачалоФайла()
МодульСоставаОПИ.ДобавитьСтроку("#Использовать ""./internal""");
МодульСоставаОПИ.ДобавитьСтроку("");
КонецПроцедуры
Процедура ЗаписатьФункциюОпределенияВерсии()
@@ -29,12 +70,12 @@
КонецПроцедуры
Процедура ЗаписатьФункциюОпределенияКоманд()
Процедура ЗаписатьФункциюОпределенияКоманд(ТекущийЯзык)
МодульСоставаОПИ.ДобавитьСтроку("Функция ПолучитьСоответствиеКомандМодулей() Экспорт");
МодульСоставаОПИ.ДобавитьСтроку("СоответствиеКомандМодулей = Новый Соответствие();");
ОпределитьСоответствиеМодулейКоманд();
ОпределитьСоответствиеМодулейКоманд(ТекущийЯзык);
Для Каждого КомандаМодуля Из СоответствиеМодулейКоманд Цикл
МодульСоставаОПИ.ДобавитьСтроку("СоответствиеКомандМодулей.Вставить("""
@@ -50,35 +91,41 @@
КонецПроцедуры
Процедура ЗаписатьФункциюОпределенияМетодов()
МодульСоставаОПИ.ДобавитьСтроку("Функция ПолучитьСостав() Экспорт
Процедура ЗаписатьВспомогательныеФункции()
МодульСоставаОПИ.ДобавитьСтроку("
|
| ТаблицаСостава = Новый ТаблицаЗначений();
| ТаблицаСостава.Колонки.Добавить(""Библиотека"");
| ТаблицаСостава.Колонки.Добавить(""Модуль"");
| ТаблицаСостава.Колонки.Добавить(""Метод"");
| ТаблицаСостава.Колонки.Добавить(""МетодПоиска"");
| ТаблицаСостава.Колонки.Добавить(""Параметр"");
| ТаблицаСостава.Колонки.Добавить(""Описание"");
| ТаблицаСостава.Колонки.Добавить(""ОписаниеМетода"");
|Функция ПолучитьСостав(Знач Команда) Экспорт
| ТекущийСостав = Новый(Команда);
| Возврат ТекущийСостав.ПолучитьСостав();
|КонецФункции
|
|Функция ПолучитьПолныйСостав() Экспорт
|
| ОбщаяТаблица = Неопределено;
|
| Для Каждого Команда Из ПолучитьСоответствиеКомандМодулей() Цикл
|
| ТекущаяТаблица = ПолучитьСостав(Команда.Ключ);
|
| Если ОбщаяТаблица = Неопределено Тогда
| ОбщаяТаблица = ТекущаяТаблица;
| Иначе
| Для Каждого СтрокаТаблицы Из ТекущаяТаблица Цикл
| ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы);
| КонецЦикла;
| КонецЕсли;
|
| КонецЦикла;
|
| Возврат ОбщаяТаблица;
|
|КонецФункции
|");
ТаблицаОписанийПараметров = Новый ТаблицаЗначений;
ТаблицаОписанийПараметров.Колонки.Добавить("Имя");
ТаблицаОписанийПараметров.Колонки.Добавить("Типы");
ТаблицаОписанийПараметров.Колонки.Добавить("Описание");
ТаблицаОписанийПараметров.Колонки.Добавить("ЗначениеПоУмолчанию");
ЗаполнитьТаблицуСостава();
МодульСоставаОПИ.ДобавитьСтроку(" Возврат ТаблицаСостава;");
МодульСоставаОПИ.ДобавитьСтроку("КонецФункции");
МодульСоставаОПИ.ДобавитьСтроку(Символы.ПС);
КонецПроцедуры
Процедура ЗаполнитьТаблицуСостава()
Процедура ЗаполнитьТаблицыСостава()
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
@@ -94,25 +141,70 @@
Процедура РазобратьМодуль(Модуль)
ЗаписатьНачалоСоставаБиблиотеки();
Парсер = Новый ПарсерВстроенногоЯзыка;
ДокументМодуля = Новый ТекстовыйДокумент;
ДокументМодуля.Прочитать(Модуль.ПолноеИмя);
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
ТекущаяОбласть = "Основные методы";
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
Если Метод.Тип = "ИнструкцияПрепроцессораОбласть" Тогда
ТекущаяОбласть = Синонимайзер(Метод.Имя);
КонецЕсли;
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
ТаблицаОписанийПараметров.Очистить();
РазобратьКомментарийМетода(ДокументМодуля, Метод, Модуль);
РазобратьКомментарийМетода(ДокументМодуля, Метод, Модуль, ТекущаяОбласть);
КонецЕсли;
КонецЦикла;
Команда = СоответствиеМодулейКоманд[Модуль.ИмяБезРасширения];
ЗаписатьОкончаниеСоставаБиблиотеки(Команда);
КонецПроцедуры
Процедура РазобратьКомментарийМетода(ТекстовыйДокумент, Метод, Модуль)
Процедура ЗаписатьНачалоСоставаБиблиотеки()
ТекущийФайлСостава = Новый ТекстовыйДокумент();
ТекущийФайлСостава.ДобавитьСтроку("Функция ПолучитьСостав() Экспорт
|
| ТаблицаСостава = Новый ТаблицаЗначений();
| ТаблицаСостава.Колонки.Добавить(""Библиотека"");
| ТаблицаСостава.Колонки.Добавить(""Модуль"");
| ТаблицаСостава.Колонки.Добавить(""Метод"");
| ТаблицаСостава.Колонки.Добавить(""МетодПоиска"");
| ТаблицаСостава.Колонки.Добавить(""Параметр"");
| ТаблицаСостава.Колонки.Добавить(""Описание"");
| ТаблицаСостава.Колонки.Добавить(""ОписаниеМетода"");
| ТаблицаСостава.Колонки.Добавить(""Область"");
|");
ТаблицаОписанийПараметров = Новый ТаблицаЗначений;
ТаблицаОписанийПараметров.Колонки.Добавить("Имя");
ТаблицаОписанийПараметров.Колонки.Добавить("Типы");
ТаблицаОписанийПараметров.Колонки.Добавить("Описание");
ТаблицаОписанийПараметров.Колонки.Добавить("ЗначениеПоУмолчанию");
КонецПроцедуры
Процедура ЗаписатьОкончаниеСоставаБиблиотеки(Библиотека)
ТекущийФайлСостава.ДобавитьСтроку(" Возврат ТаблицаСостава;");
ТекущийФайлСостава.ДобавитьСтроку("КонецФункции");
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
ТекущийФайлСостава.Записать(КаталогСписковСотава + Библиотека + ".os");
КонецПроцедуры
Процедура РазобратьКомментарийМетода(ТекстовыйДокумент, Метод, Модуль, Область)
НомерСтроки = Метод.Начало.НомерСтроки;
ИмяМетода = Метод.Сигнатура.Имя;
@@ -136,7 +228,7 @@
Для Каждого СтрокаПараметра Из ТаблицаОписанийПараметров Цикл
ЗаписатьСозданиеПараметраСостава(СтрокаПараметра, ИмяМетода, СокрЛП(ОписаниеМетода));
ЗаписатьСозданиеПараметраСостава(СтрокаПараметра, ИмяМетода, Область, СокрЛП(ОписаниеМетода));
ОписаниеМетода = "";
КонецЦикла;
@@ -194,11 +286,11 @@
+ СтрокаКомментария;
КонецЕсли;
Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Тогда
Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Или СтрНайти(СтрокаКомментария, "Parameters:") > 0 Тогда
ЗаписыватьПараметры = Истина;
ЗаписыватьОписание = Ложь;
ИначеЕсли СтрНайти(СтрокаКомментария, "Возвращаемое значение:") > 0 Тогда
ИначеЕсли СтрНайти(СтрокаКомментария, "Возвращаемое значение:") > 0 Или СтрНайти(СтрокаКомментария, "Returns:") > 0 Тогда
Прервать;
ИначеЕсли ЗаписыватьПараметры = Истина
@@ -539,7 +631,7 @@
КонецЕсли;
КонецПроцедуры
Процедура ЗаписатьСозданиеПараметраСостава(СтрокаПараметра, ИмяМетода, ОписаниеМетода = "")
Процедура ЗаписатьСозданиеПараметраСостава(СтрокаПараметра, ИмяМетода, Область, ОписаниеМетода = "")
Имя = СтрокаПараметра["Имя"];
Описание = СтрокаПараметра["Описание"];
@@ -550,31 +642,32 @@
Описание = Описание + " (необяз. по ум. - " + Значение + ")";
КонецЕсли;
МодульСоставаОПИ.ДобавитьСтроку(Символы.ПС);
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока = ТаблицаСостава.Добавить();");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Библиотека = """ + Библиотека + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Модуль = """ + ТекущийМодуль + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Метод = """ + ИмяМетода + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.МетодПоиска = """ + вРег(ИмяМетода) + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Параметр = """ + Имя + """;");
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.Описание = """ + Описание + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока = ТаблицаСостава.Добавить();");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Библиотека = """ + Библиотека + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Модуль = """ + ТекущийМодуль + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Метод = """ + ИмяМетода + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.МетодПоиска = """ + вРег(ИмяМетода) + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Параметр = """ + Имя + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Описание = """ + Описание + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.Область = """ + Область + """;");
Если ЗначениеЗаполнено(ОписаниеМетода) Тогда
МодульСоставаОПИ.ДобавитьСтроку(" НоваяСтрока.ОписаниеМетода = """ + ОписаниеМетода + """;");
ТекущийФайлСостава.ДобавитьСтроку(" НоваяСтрока.ОписаниеМетода = """ + ОписаниеМетода + """;");
КонецЕсли;
МодульСоставаОПИ.ДобавитьСтроку(Символы.ПС);
ТекущийФайлСостава.ДобавитьСтроку(Символы.ПС);
КонецПроцедуры
Процедура ОпределитьСоответствиеМодулейКоманд()
Процедура ОпределитьСоответствиеМодулейКоманд(ТекущийЯзык)
СоответствиеМодулейКоманд = Новый Соответствие();
ОбщийМассивМодулей = Новый Массив;
ФайлыМодулей = НайтиФайлы("./", "*.os", Истина);
ФайлыМодулей = НайтиФайлы("./src/" + ТекущийЯзык + "/", "*.os", Истина);
Для Каждого Модуль Из ФайлыМодулей Цикл
@@ -595,7 +688,7 @@
КомандаCLI = "";
ДокументМодуля = Новый ТекстовыйДокумент();
Признак = "// Команда CLI: ";
Признак = "// CLI: ";
ДокументМодуля.Прочитать(ПутьКМодулю);
Для Н = 1 По ДокументМодуля.КоличествоСтрок() Цикл
@@ -621,7 +714,7 @@
Функция ПолучитьВерсиюПакета()
Версия = "";
Packagedef = "./OInt/packagedef";
Packagedef = "./src/ru/OInt/packagedef";
Признак = ".Версия(""";
ТекстФайла = Новый ТекстовыйДокумент();
@@ -641,4 +734,189 @@
КонецФункции
Функция Синонимайзер(ИмяРеквизита)
Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
ДлинаСтроки = СтрДлина(ИмяРеквизита);
Для ъ=2 По ДлинаСтроки Цикл
Символ = Сред(ИмяРеквизита, ъ, 1);
ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
Прописная = Символ = ВРег(Символ);
ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
СледПрописная = СледСимвол = ВРег(СледСимвол);
// Варианты:
Если НЕ ПредПрописная И Прописная Тогда
Синоним = Синоним + " " + Символ;
ИначеЕсли Прописная И НЕ СледПрописная Тогда
Синоним = Синоним + " " + Символ;
Иначе
Синоним = Синоним + Символ;
Конецесли;
КонецЦикла;
Синоним = ВРег(Лев(Синоним,1)) + нРег(Сред(Синоним,2));
Возврат Синоним;
КонецФункции
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если Файл.ЭтоКаталог() Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ВыолнитьДополнительныйПеревод(ТекущийЯзык)
ПутьСловаря = "./service/dictionaries/" + ТекущийЯзык + "_cli.json";
ФайлСловаря = Новый Файл(ПутьСловаря);
Если Не ФайлСловаря.Существует() Тогда
Возврат;
КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьСловаря);
ДанныеПревода = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ТЗСловаря = Новый ТаблицаЗначений();
ТЗСловаря.Колонки.Добавить("Ключ");
ТЗСловаря.Колонки.Добавить("Значение");
ТЗСловаря.Колонки.Добавить("Длина");
Для Каждого Элемент Из ДанныеПревода Цикл
НоваяСтрока = ТЗСловаря.Добавить();
НоваяСтрока.Ключ = Элемент.Ключ;
НоваяСтрока.Значение = Элемент.Значение;
НоваяСтрока.Длина = СтрДлина(Элемент.Ключ);
КонецЦикла;
ТЗСловаря.Сортировать("Длина УБЫВ");
МассивМодулейДляПеревода = Новый Массив;
МассивМодулейДляПеревода.Добавить("./src/" + ТекущийЯзык + "/cli/core/Classes/Приложение.os");
МассивМодулейДляПеревода.Добавить("./src/" + ТекущийЯзык + "/cli/help/Modules/Справка.os");
Для Каждого ПереводимыйМодуль Из МассивМодулейДляПеревода Цикл
ФайлМодуля = Новый Файл(ПереводимыйМодуль);
Если Не ФайлМодуля.Существует() Тогда
Продолжить;
КонецЕсли;
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Прочитать(ФайлМодуля.ПолноеИмя, "UTF-8");
ТекстМодуля = ТекстовыйДокумент.ПолучитьТекст();
Для Каждого Элемент Из ТЗСловаря Цикл
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
КонецЦикла;
ТекстовыйДокумент.УстановитьТекст(ТекстМодуля);
ТекстовыйДокумент.Записать(ФайлМодуля.ПолноеИмя);
КонецЦикла;
ВыолнитьПереводОписаний(ТекущийЯзык);
КонецПроцедуры
Процедура ВыолнитьПереводОписаний(ТекущийЯзык)
ПутьСловаря = "./service/dictionaries/" + ТекущийЯзык + ".json";
ФайлСловаря = Новый Файл(ПутьСловаря);
Если Не ФайлСловаря.Существует() Тогда
Возврат;
КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьСловаря);
ДанныеПревода = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ТЗСловаря = Новый ТаблицаЗначений();
ТЗСловаря.Колонки.Добавить("Ключ");
ТЗСловаря.Колонки.Добавить("Значение");
ТЗСловаря.Колонки.Добавить("Длина");
Для Каждого Элемент Из ДанныеПревода Цикл
НоваяСтрока = ТЗСловаря.Добавить();
НоваяСтрока.Ключ = Элемент.Ключ;
НоваяСтрока.Значение = Элемент.Значение;
НоваяСтрока.Длина = СтрДлина(Элемент.Ключ);
КонецЦикла;
ТЗСловаря.Сортировать("Длина УБЫВ");
МассивМодулейДляПеревода = НайтиФайлы("./src/" + ТекущийЯзык + "/cli/data/Classes/internal", "*", Истина);
МассивМодулейДляПеревода.Добавить(Новый Файл("./src/" + ТекущийЯзык + "/cli/tools/Modules/Утилиты.os"));
Для Каждого ПереводимыйМодуль Из МассивМодулейДляПеревода Цикл
ФайлМодуля = Новый Файл(ПереводимыйМодуль.ПолноеИмя);
Если Не ФайлМодуля.Существует() Или ФайлМодуля.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Прочитать(ФайлМодуля.ПолноеИмя, "UTF-8");
ТекстМодуля = ТекстовыйДокумент.ПолучитьТекст();
Для Каждого Элемент Из ТЗСловаря Цикл
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
КонецЦикла;
СоответствиеСлужебныхКлючей = Новый Структура();
СоответствиеСлужебныхКлючей.Вставить("MethodDescription" ,"ОписаниеМетода");
СоответствиеСлужебныхКлючей.Вставить("SearchMethod" ,"МетодПоиска");
СоответствиеСлужебныхКлючей.Вставить("Description" ,"Описание");
СоответствиеСлужебныхКлючей.Вставить("Library" ,"Библиотека");
СоответствиеСлужебныхКлючей.Вставить("Parameter" ,"Параметр");
СоответствиеСлужебныхКлючей.Вставить("Region" ,"Область");
СоответствиеСлужебныхКлючей.Вставить("Module" ,"Модуль");
СоответствиеСлужебныхКлючей.Вставить("Method" ,"Метод");
СоответствиеСлужебныхКлючей.Вставить("ConcatBinaryData" , "ConcatenateBinaryData");
СоответствиеСлужебныхКлючей.Вставить("GetTestList" , "ПолучитьСписокТестов");
СоответствиеСлужебныхКлючей.Вставить("Exists" , "Exist");
СоответствиеСлужебныхКлючей.Вставить("SetBodyFromBinaryData", "SetBodyFromBinary");
СоответствиеСлужебныхКлючей.Вставить("GetBodyAsBinaryData" , "ПолучитьТелоКакДвоичныеДанные");
СоответствиеСлужебныхКлючей.Вставить("FileCopy" , "CopyFile");
Для Каждого СлужебныйКлюч Из СоответствиеСлужебныхКлючей Цикл
ТекстМодуля = СтрЗаменить(ТекстМодуля, "." + СлужебныйКлюч.Ключ, "." + СлужебныйКлюч.Значение);
ТекстМодуля = СтрЗаменить(ТекстМодуля, "(""" + СлужебныйКлюч.Ключ + """)", "(""" + СлужебныйКлюч.Значение + """)");
ТекстМодуля = СтрЗаменить(ТекстМодуля, СлужебныйКлюч.Ключ + "(", СлужебныйКлюч.Значение + "(");
КонецЦикла;
ТекстМодуля = СтрЗаменить(ТекстМодуля, "GetComposition", "ПолучитьСостав");
ТекстовыйДокумент.УстановитьТекст(ТекстМодуля);
ТекстовыйДокумент.Записать(ФайлМодуля.ПолноеИмя);
КонецЦикла;
КонецПроцедуры
ПриСозданииОбъекта();

View File

@@ -1,4 +1,4 @@
#Использовать "../../../cli/data"
#Использовать "../../../src/ru/cli/data"
Перем СоответствияПараметровЗначениям;
Перем СоответствияПараметровПредобработкам;
@@ -12,9 +12,10 @@
СоответствияПараметровЗначениям = Новый Соответствие();
СоответствияПараметровПредобработкам = Новый Соответствие();
ТекущийСоставБиблиотеки = Новый СоставБиблиотеки();
ТаблицаПараметров = СоставБиблиотеки.ПолучитьСостав();
Версия = СоставБиблиотеки.ПолучитьВерсию();
ТаблицаПараметров = ТекущийСоставБиблиотеки.ПолучитьПолныйСостав();
Версия = ТекущийСоставБиблиотеки.ПолучитьВерсию();
ДобавитьСоответствияTelegram();
ДобавитьСоответствияVK();
@@ -102,13 +103,14 @@
| - uses: actions/checkout@v4
| - uses: otymko/setup-onescript@v1.4
| with:
| version: " + Версия + "
| version: 1.9.0
|
| - name: Установить cmdline, asserts и osparser
| run: |
| opm install cmdline
| opm install asserts
| opm install osparser
| opm install coloratos
| - name: Сформировать список методов ОПИ -> CLI
| run: oscript ./.github/workflows/os/cli_parse.os
|
@@ -122,30 +124,30 @@
|
| - name: Собрать и установить OInt
| run: |
| cd ./OInt
| cd ./src/ru/OInt
| opm build
| opm install *.ospx
|
| - name: Собрать бинарник
| run: |
| cd ./cli
| cd ./src/ru/cli
| oscript -make core/Classes/Приложение.os oint
|
| - name: Собрать exe
| run: |
| cd ./cli
| cd ./src/ru/cli
| oscript -make core/Classes/Приложение.os oint.exe
|
| - name: Записать артефакт
| uses: actions/upload-artifact@v4
| with:
| name: oint
| path: ./cli/oint
| path: ./src/ru/cli/oint
|
| - name: Создать каталог deb-пакета
| run: |
| mkdir -p .debpkg/usr/bin
| cp ./cli/oint .debpkg/usr/bin/oint
| cp ./src/ru/cli/oint .debpkg/usr/bin/oint
| chmod +x .debpkg/usr/bin/oint
|
| - name: Собрать deb-пакет
@@ -156,7 +158,7 @@
| maintainer: Anton Titovets <bayselonarrend@gmail.com>
| version: '" + Версия + "' # refs/tags/v*.*.*
| arch: 'all'
| depends: 'mono-runtime, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
| depends: 'mono-devel, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
| desc: 'OInt CLI - приложение для работы с API различных онлайн-сервисов из командной строки'
|
| - uses: actions/upload-artifact@v3
@@ -169,7 +171,7 @@
| run: |
| mkdir -p .rpmpkg/usr/bin
| mkdir -p .rpmpkg/usr/share/oint/bin
| cp ./cli/oint .rpmpkg/usr/share/oint/bin/oint
| cp ./src/ru/cli/oint .rpmpkg/usr/share/oint/bin/oint
| echo 'mono /usr/share/oint/bin/oint ""$@""' > .rpmpkg/usr/bin/oint
| chmod +x .rpmpkg/usr/bin/oint
|
@@ -184,7 +186,7 @@
| arch: 'x86_64'
| desc: 'OInt CLI - приложение для работы с API различных онлайн-сервисов из командной строки'
| requires: |
| mono-core
| mono-devel
| Requires: mono-locale-extras
|
| - uses: actions/upload-artifact@v4
@@ -478,6 +480,7 @@
СоответствияПараметровЗначениям.Вставить("gcalendar", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("gdrive", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("gsheets", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("dropbox", СоответствиеПЗ);
КонецПроцедуры

530
.github/workflows/os/cli_testmaker_en.os vendored Normal file
View File

@@ -0,0 +1,530 @@
#Использовать "../../../src/en/cli/data"
Перем СоответствияПараметровЗначениям;
Перем СоответствияПараметровПредобработкам;
Перем Версия;
Перем ТекущийФайл;
Перем ТаблицаПараметров;
#Область Основа
Процедура ПриСозданииОбъекта()
СоответствияПараметровЗначениям = Новый Соответствие();
СоответствияПараметровПредобработкам = Новый Соответствие();
ТекущийСоставБиблиотеки = Новый СоставБиблиотеки();
ТаблицаПараметров = ТекущийСоставБиблиотеки.ПолучитьПолныйСостав();
Версия = ТекущийСоставБиблиотеки.ПолучитьВерсию();
ДобавитьСоответствияTelegram();
ДобавитьСоответствияVK();
ДобавитьСоответствияViber();
ДобавитьСоответствияОбщие();
СоздатьОсновнойФайл();
СоздатьФайлДрафта();
КонецПроцедуры
Процедура СоздатьОсновнойФайл()
ТекущийФайл = Новый ТекстовыйДокумент();
СообщитьНачалоФайлаПроцесса();
СообщитьСборку();
СформироватьЗапуск();
СообщитьОкончаниеФайлаПроцесса();
ТекущийФайл.Записать("./.github/workflows/cli_test_en.yml");
КонецПроцедуры
Процедура СоздатьФайлДрафта()
ТекущийФайл = Новый ТекстовыйДокумент();
ТекущийФайл.ДобавитьСтроку(
"name: CLI | Добавить пакеты в Draft (EN)
|
|on:
| workflow_dispatch:
|
|jobs:");
СообщитьСборку();
СообщитьЗаписьВДрафт();
ТекущийФайл.Записать("./.github/workflows/cli_draft_en.yml");
КонецПроцедуры
#КонецОбласти
#Область ФормированиеФайлов
Процедура СообщитьНачалоФайлаПроцесса()
ТекущийФайл.ДобавитьСтроку(
"name: CLI | Сборка и тестирование (EN)
|
|on:
| workflow_dispatch:
|
|jobs:
| Decode:
| runs-on: ubuntu-latest
| steps:
|
| - uses: actions/checkout@v4
|
| - name: Расшифровать тестовые данные
| run: gpg --quiet --batch --yes --decrypt --passphrase=""$ENC_JSON"" --output ./data.json ./data.json.gpg
| env:
| ENC_JSON: ${{ secrets.ENC_JSON }}
|
| - name: Кэшировать данные
| uses: actions/cache/save@v3
| with:
| path: ./data.json
| key: test-data
|");
КонецПроцедуры
Процедура СообщитьСборку()
ТекущийФайл.ДобавитьСтроку("
| Build:
| runs-on: ubuntu-latest
| permissions:
| contents: write
| steps:
| - uses: actions/checkout@v4
| - uses: otymko/setup-onescript@v1.4
| with:
| version: 1.9.0
|
| - name: Установить cmdline, asserts и osparser
| run: |
| opm install cmdline
| opm install asserts
| opm install osparser
| opm install coloratos
| - name: Сформировать список методов ОПИ -> CLI
| run: oscript ./.github/workflows/os/cli_parse.os
|
| - name: Записать измененный список методов CLI
| uses: stefanzweifel/git-auto-commit-action@v5
| with:
| commit_user_name: Vitaly the Alpaca (bot)
| commit_user_email: vitaly.the.alpaca@gmail.com
| commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
| commit_message: Обновление зашифрованных данных по результатам тестов (workflow)
|
| - name: Собрать и установить OInt
| run: |
| cd ./src/en/OInt
| opm build
| opm install *.ospx
|
| - name: Собрать бинарник
| run: |
| cd ./src/en/cli
| oscript -make core/Classes/Приложение.os oint
|
| - name: Собрать exe
| run: |
| cd ./src/en/cli
| oscript -make core/Classes/Приложение.os oint.exe
|
| - name: Записать артефакт
| uses: actions/upload-artifact@v4
| with:
| name: oint
| path: ./src/en/cli/oint
|
| - name: Создать каталог deb-пакета
| run: |
| mkdir -p .debpkg/usr/bin
| cp ./src/en/cli/oint .debpkg/usr/bin/oint
| chmod +x .debpkg/usr/bin/oint
|
| - name: Собрать deb-пакет
| uses: jiro4989/build-deb-action@v3
| with:
| package: oint
| package_root: .debpkg
| maintainer: Anton Titovets <bayselonarrend@gmail.com>
| version: '" + Версия + "' # refs/tags/v*.*.*
| arch: 'all'
| depends: 'mono-devel, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all'
| desc: 'OInt CLI - CLI toolkit for integrating with APIs of popular online services'
|
| - uses: actions/upload-artifact@v3
| with:
| name: oint-deb
| path: |
| ./*.deb
|
| - name: Создать каталог rpm-пакета
| run: |
| mkdir -p .rpmpkg/usr/bin
| mkdir -p .rpmpkg/usr/share/oint/bin
| cp ./src/en/cli/oint .rpmpkg/usr/share/oint/bin/oint
| echo 'mono /usr/share/oint/bin/oint ""$@""' > .rpmpkg/usr/bin/oint
| chmod +x .rpmpkg/usr/bin/oint
|
| - name: Собрать rpm-пакет
| uses: jiro4989/build-rpm-action@v2
| with:
| summary: 'OInt CLI - CLI toolkit for integrating with APIs of popular online services. Mono-runtime with .NET Framework 4.8 support required'
| package: oint
| package_root: .rpmpkg
| maintainer: Anton Titovets <bayselonarrend@gmail.com>
| version: '" + Версия + "'
| arch: 'x86_64'
| desc: 'OInt CLI - CLI toolkit for integrating with APIs of popular online services'
| requires: |
| mono-devel
| Requires: mono-locale-extras
|
| - uses: actions/upload-artifact@v4
| with:
| name: oint-rpm
| path: |
| ./*.rpm
| !./*-debuginfo-*.rpm");
КонецПроцедуры
Процедура СформироватьЗапуск()
Для Каждого Вариант Из СоответствияПараметровЗначениям Цикл
Библиотека = Вариант.Ключ;
Если Библиотека = "Общие" Тогда
Продолжить;
КонецЕсли;
ТекстРаботы = "
| Testing-" + Библиотека + ":
| runs-on: ubuntu-latest
| needs: [Decode, Build]
| steps:
|
| - name: Получить тестовые данные из кэша
| uses: actions/cache/restore@v3
| with:
| path: ./data.json
| key: test-data
|
| - name: Скачать артефакт с исполняемым файлом
| uses: actions/download-artifact@v4
| with:
| name: oint
|
| - name: JSON в переменные
| uses: rgarcia-phi/json-to-variables@v1.1.0
| with:
| filename: 'data.json'
| masked: true
|
| - name: chmod для OInt
| run: chmod +x ./oint
|
|";
Отбор = Новый Структура("Библиотека", Библиотека);
СтрокиБиблиотеки = ТаблицаПараметров.НайтиСтроки(Отбор);
ТекущийМетод = "";
Для Каждого СтрокаПараметра Из СтрокиБиблиотеки Цикл
Если ТекущийМетод <> СтрокаПараметра.Метод Тогда
ТекущийМетод = СтрокаПараметра.Метод;
Отбор.Вставить("Метод", ТекущийМетод);
СтрокиМетода = ТаблицаПараметров.НайтиСтроки(Отбор);
ТекстРаботы = ТекстРаботы + Символы.ПС + "
|
| - name: Выполнить " + ТекущийМетод+ "
| if: ${{ cancelled() }} == false
| run: |
| ";
ДобавитьПредобработки(ТекстРаботы, СтрокиМетода, Библиотека);
ТекстРаботы = ТекстРаботы + "
| ./oint " + Библиотека + " " + ТекущийМетод + " --debug --test \" + Символы.ПС;
КонецЕсли;
ТекстРаботы = ТекстРаботы
+ " "
+ СтрокаПараметра.Параметр
+ " "
+ ОпределитьЗначениеПараметра(СтрокаПараметра.Параметр, Библиотека)
+ " \"
+ Символы.ПС;
КонецЦикла;
ТекущийФайл.ДобавитьСтроку(ТекстРаботы);
КонецЦикла;
КонецПроцедуры
Процедура СообщитьОкончаниеФайлаПроцесса()
ТекущийФайл.ДобавитьСтроку("
| Clear-Cache:
| runs-on: ubuntu-latest
| needs: [Testing-telegram, Testing-vk, Testing-viber]
| if: ${{ always() }}
| steps:
| - name: Очистка кэша
| run: |
| curl -L \
| -X DELETE \
| -H ""Accept: application/vnd.github+json"" \
| -H ""Authorization: Bearer ${{ secrets.TOKEN }}"" \
| -H ""X-GitHub-Api-Version: 2022-11-28"" \
| ""https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data""");
КонецПроцедуры
Процедура СообщитьЗаписьВДрафт()
ТекущийФайл.ДобавитьСтроку("
| - name: Добавить DEB
| env:
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
| run: gh release upload draft ./*.deb
|
| - name: Добавить RPM
| env:
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
| run: gh release upload draft ./*.rpm");
КонецПроцедуры
#КонецОбласти
#Область ОбработкиТестов
Процедура ДобавитьСоответствияTelegram()
СоответствиеПЗ = Новый Соответствие();
СоответствиеПЗ.Вставить("token" , "${{ env.json_Telegram_Token }}");
СоответствиеПЗ.Вставить("url" , "${{ env.json_Telegram_URL }}");
СоответствиеПЗ.Вставить("chat" , "${{ env.json_Telegram_ChannelID }}");
СоответствиеПЗ.Вставить("media" , "mediagroup.json");
СоответствиеПЗ.Вставить("anonymous", "true");
СоответствиеПЗ.Вставить("message" , "${{ env.json_Telegram_ChannelMessageID }}");
СоответствиеПЗ.Вставить("to" , "${{ env.json_Telegram_ChatID }}");
СоответствиеПЗ.Вставить("from" , "${{ env.json_Telegram_ChannelID }}");
СоответствиеПЗ.Вставить("user" , "${{ env.json_Telegram_ChatID }}");
СоответствиеПЗ.Вставить("expire" , "1");
СоответствиеПЗ.Вставить("limit" , "1");
СоответствиеПЗ.Вставить("forum" , "${{ env.json_Telegram_ForumID }}");
СоответствиеПЗ.Вставить("icon" , "5350444672789519765 ");
СоответствиеПЗ.Вставить("topic" , "${{ env.json_Telegram_TopicID }}");
СоответствиеПЗ.Вставить("under" , "true");
СоответствиеПЗ.Вставить("column" , "false");
СоответствияПараметровЗначениям.Вставить("telegram", СоответствиеПЗ);
СоответствиеПредобработок = Новый Соответствие();
Предобработка = "
| echo "" {
| \""${{ env.json_Picture }}\"" : \""photo\"",
| \""${{ env.json_Picture2 }}\"" : \""photo\""
| } "" > mediagroup.json
|";
СоответствиеПредобработок.Вставить("media", Предобработка);
СоответствияПараметровПредобработкам.Вставить("telegram", СоответствиеПредобработок);
КонецПроцедуры
Процедура ДобавитьСоответствияVK()
СоответствиеПЗ = Новый Соответствие();
СоответствиеПЗ.Вставить("app" , "${{ env.json_VK_AppID }}");
СоответствиеПЗ.Вставить("pictures" , "['${{ env.json_Picture }}', '${{ env.json_Picture2 }}']");
СоответствиеПЗ.Вставить("ad" , "false");
СоответствиеПЗ.Вставить("url" , "https://github.com/Bayselonarrend/OpenIntegrations");
СоответствиеПЗ.Вставить("auth" , "auth.json");
СоответствиеПЗ.Вставить("post" , "1159");
СоответствиеПЗ.Вставить("album" , "303733811");
СоответствиеПЗ.Вставить("pictureid" , "1");
СоответствиеПЗ.Вставить("topic" , "1");
СоответствиеПЗ.Вставить("remove" , "false");
СоответствиеПЗ.Вставить("wall" , "-${{ env.json_VK_GroupID }}");
СоответствиеПЗ.Вставить("from" , "-${{ env.json_VK_GroupID }}");
СоответствиеПЗ.Вставить("to" , "-${{ env.json_VK_GroupID }}");
СоответствиеПЗ.Вставить("user" , "${{ env.json_VK_UserID }}");
СоответствиеПЗ.Вставить("ct" , "${{ env.json_VK_CommunityToken }}");
СоответствиеПЗ.Вставить("keyboard" , "");
СоответствиеПЗ.Вставить("cabinet" , "${{ env.json_VK_AdsCabinetID }}");
СоответствиеПЗ.Вставить("campaign" , "1");
СоответствиеПЗ.Вставить("limit" , "1");
СоответствиеПЗ.Вставить("category" , "1");
СоответствиеПЗ.Вставить("adv" , "1");
СоответствиеПЗ.Вставить("sel" , "1");
СоответствиеПЗ.Вставить("items" , "['1111111','2222222']");
СоответствиеПЗ.Вставить("product" , "product.json");
СоответствиеПЗ.Вставить("item" , "1");
СоответствиеПЗ.Вставить("sellgroup" , "1");
СоответствиеПЗ.Вставить("sels" , "['1111111','2222222']");
СоответствиеПЗ.Вставить("posts" , "['1111111','2222222']");
СоответствиеПЗ.Вставить("main" , "false");
СоответствиеПЗ.Вставить("hidden" , "false");
СоответствиеПЗ.Вставить("prop" , "1");
СоответствиеПЗ.Вставить("option" , "1");
СоответствиеПЗ.Вставить("value" , "Тест");
СоответствияПараметровЗначениям.Вставить("vk", СоответствиеПЗ);
СоответствиеПредобработок = Новый Соответствие();
Предобработка = "
| echo "" {
| \""access_token\"": \""${{ env.json_VK_Token }}\"",
| \""from_group\"" : \""1\"",
| \""owner_id\"" : \""-${{ env.json_VK_GroupID }}\"",
| \""v\"" : \""5.131\"",
| \""app_id\"" : \""${{ env.json_VK_AppID }}\"",
| \""group_id\"" : \""${{ env.json_VK_GroupID }}\""
| } "" > auth.json
|";
СоответствиеПредобработок.Вставить("auth", Предобработка);
Предобработка = "
| echo "" {
| \""Имя\"" : \""Тест\"",
| \""Описание\"" : \""Тест\"",
| \""Категория\"" : \""20173\"",
| \""Цена\"" : \""1\"",
| \""СтараяЦена\"" : \""2\"",
| \""ДополнительныеФото\"" : [],
| \""ЗначенияСвойств\"" : [],
| \""ГлавныйВГруппе\"" : false,
| \""Ширина\"" : \""1\"",
| \""Высота\"" : \""1\"",
| \""Глубина\"" : \""1\"",
| \""Вес\"" : \""1\"",
| \""SKU\"" : \""12345\"",
| \""ДоступныйОстаток\"" : \""1\""
| } "" > product.json
|";
СоответствиеПредобработок.Вставить("product", Предобработка);
СоответствияПараметровПредобработкам.Вставить("vk", СоответствиеПредобработок);
КонецПроцедуры
Процедура ДобавитьСоответствияViber()
СоответствиеПЗ = Новый Соответствие();
СоответствиеПЗ.Вставить("token" , "${{ env.json_Viber_Token }}");
СоответствиеПЗ.Вставить("user" , "${{ env.json_Viber_UserID }}");
СоответствиеПЗ.Вставить("chat" , "${{ env.json_Telegram_ChannelID }}");
СоответствиеПЗ.Вставить("ischannel", "true");
СоответствияПараметровЗначениям.Вставить("viber", СоответствиеПЗ);
КонецПроцедуры
Процедура ДобавитьСоответствияОбщие()
СоответствиеПЗ = Новый Соответствие();
СоответствиеПЗ.Вставить("lat" , "48.87373649724122");
СоответствиеПЗ.Вставить("long" , "48.87373649724122");
СоответствиеПЗ.Вставить("text" , "Тестовый текст");
СоответствиеПЗ.Вставить("picture" , "${{ env.json_Picture }}");
СоответствиеПЗ.Вставить("video" , "${{ env.json_Video }}");
СоответствиеПЗ.Вставить("gif" , "${{ env.json_GIF }}");
СоответствиеПЗ.Вставить("audio" , "${{ env.json_Audio }}");
СоответствиеПЗ.Вставить("doc" , "${{ env.json_Document }}");
СоответствиеПЗ.Вставить("name" , "Петр");
СоответствиеПЗ.Вставить("surname" , "Петров");
СоответствиеПЗ.Вставить("phone" , "+123456789");
СоответствиеПЗ.Вставить("question" , "Да или нет?");
СоответствиеПЗ.Вставить("options" , "['Да', 'Нет', 'Затрудняюсь ответить']");
СоответствиеПЗ.Вставить("description", "Тестовое описание");
СоответствиеПЗ.Вставить("buttons" , "['Кнопка1','Кнопка2','Кнопка3']");
СоответствиеПЗ.Вставить("title" , "Тест");
СоответствиеПЗ.Вставить("datefrom" , "2024-02-30T23:50:08+03:00");
СоответствиеПЗ.Вставить("dateto" , "2024-03-30T23:50:08+03:00");
СоответствиеПЗ.Вставить("ext" , ".txt");
СоответствиеПЗ.Вставить("size" , "10");
СоответствияПараметровЗначениям.Вставить("Общие", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("twitter", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("notion", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("yandex", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("yadisk", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("google", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("gcalendar", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("gdrive", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("gsheets", СоответствиеПЗ);
СоответствияПараметровЗначениям.Вставить("dropbox", СоответствиеПЗ);
КонецПроцедуры
Функция ОпределитьЗначениеПараметра(Знач Параметр, Знач Библиотека)
СоответствиеБиблиотеки = СоответствияПараметровЗначениям[Библиотека];
Значение = СоответствиеБиблиотеки[СтрЗаменить(Параметр, "-", "")];
Если Не ЗначениеЗаполнено(Значение) Тогда
СоответствиеОбщее = СоответствияПараметровЗначениям["Общие"];
Значение = СоответствиеОбщее[СтрЗаменить(Параметр, "-", "")];
КонецЕсли;
Если Не вРег(Значение) = "TRUE" И Не вРег(Значение) = "FALSE" Тогда
Значение = """" + Значение + """";
КонецЕсли;
Возврат Значение;
КонецФункции
Процедура ДобавитьПредобработки(ТекстРаботы, Знач СтрокиБиблиотеки, Знач Библиотека)
Предобработки = СоответствияПараметровПредобработкам[Библиотека];
ТекстПредобработки = "";
Если ЗначениеЗаполнено(Предобработки) Тогда
Для Каждого Параметр Из СтрокиБиблиотеки Цикл
ТекущаяОбработка = Предобработки[СтрЗаменить(Параметр.Параметр, "-", "")];
Если ЗначениеЗаполнено(ТекущаяОбработка) Тогда
ТекстПредобработки = ТекстПредобработки + ТекущаяОбработка + Символы.ПС;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ТекстРаботы = ТекстРаботы + ТекстПредобработки;
КонецПроцедуры
#КонецОбласти

View File

@@ -1,8 +1,8 @@
Функция ПолучитьСопоставлениеФайлов()
Сопоставление = Новый Соответствие();
ФайлыМодулей = НайтиФайлы("./", "*.bsl", Истина);
Признак = "// Расположение OS: ";
ФайлыМодулей = НайтиФайлы("./src/ru/", "*.bsl", Истина);
Признак = "// OneScript: ";
Для Каждого Файл Из ФайлыМодулей Цикл
@@ -22,6 +22,7 @@
ПутьOS = СтрЗаменить(ТекущаяСтрока, Признак, "");
ПутьOS = СокрЛП(ПутьOS);
ПутьOS = СтрЗаменить(ПутьOS, "./", "./src/ru/");
Сопоставление.Вставить(ТекущийФайл, ПутьOS);
КонецЕсли;
@@ -154,8 +155,8 @@
Процедура ОбновитьНомерВерсии()
ПутьПД = "./OInt/packagedef";
ПутьКФ = "./OPI/src/Configuration/Configuration.mdo";
ПутьПД = "./src/ru/OInt/packagedef";
ПутьКФ = "./src/ru/OPI/src/Configuration/Configuration.mdo";
Версия = "";
ЧтениеДанныхКонфигурации = Новый ЧтениеXML();
@@ -196,7 +197,7 @@
ТекущийМодуль = Модуль.Значение;
ФайлМодуля = Новый Файл(ТекущийМодуль);
ПутьМодуля = СтрЗаменить(ТекущийМодуль, "./OInt/", "");
ПутьМодуля = СтрЗаменить(ТекущийМодуль, "./src/ru/OInt/", "");
Бибилотека = ФайлМодуля.ИмяБезРасширения;
Если Бибилотека = "OPI_Тесты" Тогда
@@ -209,7 +210,7 @@
КонецЦикла;
Документ.ДобавитьСтроку("</package-def>");
Документ.Записать("./OInt/lib.config");
Документ.Записать("./src/ru/OInt/lib.config");
КонецПроцедуры

222
.github/workflows/os/docs_examples.os vendored Normal file
View File

@@ -0,0 +1,222 @@
#Использовать osparser
#использовать "../../../src/ru/OInt/tools/"
Перем МодульТестов;
Перем Парсер;
Перем ОбластьТестов;
Перем КаталогСохранения;
Перем КаталогЗаписиЗначений;
Перем ТекущаяСтруктураЗначений;
Процедура ПриСозданииОбъекта()
ПутьКТестам = "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os";
ОбластьТестов = "АтомарныеТесты";
КаталогСохранения = "./docs/ru/examples/";
КаталогЗаписиЗначений = "./docs/ru/data/";
Парсер = Новый ПарсерВстроенногоЯзыка;
МодульТестов = Новый ТекстовыйДокумент();
МодульТестов.Прочитать(ПутьКТестам);
Начало = 0;
Окончание = 0;
ПолучитьГраницыОбластиТестов(Начало, Окончание);
ДокументАтомарныхТестов = Новый ТекстовыйДокумент();
Для Н = Начало По Окончание Цикл
ДокументАтомарныхТестов.ДобавитьСтроку(МодульТестов.ПолучитьСтроку(Н));
КонецЦикла;
МодульТестов = ДокументАтомарныхТестов;
РазобратьТесты();
КонецПроцедуры
Процедура ПолучитьГраницыОбластиТестов(Начало, Окончание)
ТекстМодуля = МодульТестов.ПолучитьТекст();
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
ВложенныеОбласти = 0;
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораОбласть" Тогда
Если Объявление.Имя = ОбластьТестов Тогда
Начало = Объявление.Начало.НомерСтроки;
КонецЕсли;
Если ЗначениеЗаполнено(Начало) Тогда
ВложенныеОбласти = ВложенныеОбласти + 1;
КонецЕсли;
КонецЕсли;
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораКонецОбласти" И ЗначениеЗаполнено(Начало) Тогда
Если ВложенныеОбласти = 0 Тогда
Окончание = Объявление.Начало.НомерСтроки;
Прервать;
Иначе
ВложенныеОбласти = ВложенныеОбласти - 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьТесты()
ТекстМодуля = МодульТестов.ПолучитьТекст();
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
Если Строка(Объявление.Тип) = "ОбъявлениеМетода" Тогда
РазобратьМетод(Объявление.Начало.НомерСтроки, Объявление.Сигнатура.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьМетод(НомерСтроки, Имя)
РазбитоеИмя = СтрРазделить(Имя, "_", Ложь);
Если РазбитоеИмя.Количество() <> 2 Тогда
Сообщить("Метод " + Имя + " был найден но не обработан", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки + 1);
ТекстПримера = "";
ТекущаяСтруктураЗначений = Новый Структура();
ПрошлаяПустая = Ложь;
Пока СтрНайти(ТекстТекущейСтроки, "END") = 0 И СтрНайти(ТекстТекущейСтроки, "КонецПроцедуры") = 0 Цикл
ТекущаяПустая = Ложь;
Если Не ЗначениеЗаполнено(СокрЛП(ТекстТекущейСтроки)) Тогда
ТекущаяПустая = Истина;
КонецЕсли;
Если СтрНайти(ТекстТекущейСтроки, "SKIP") = 0
И СтрНайти(ТекстТекущейСтроки, "ЗаписатьЛог") = 0 Тогда
Если Не (ТекущаяПустая И ПрошлаяПустая) Тогда
ТекстПримера = ТекстПримера + Символы.ПС + ПреобразоватьТекст(ТекстТекущейСтроки);
КонецЕсли;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки);
ПрошлаяПустая = ТекущаяПустая;
КонецЦикла;
Каталог = КаталогСохранения + РазбитоеИмя[0];
ОбъектКаталога = Новый Файл(Каталог);
Если Не ОбъектКаталога.Существует() Тогда
СоздатьКаталог(Каталог);
КонецЕсли;
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.Таб, " ");
ТекстПримера = " " + СокрЛП(ТекстПримера);
ТекстПримера = СтрЗаменить(ТекстПримера, " " + Символы.ПС + " " + Символы.ПС, Символы.ПС);
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.ПС + " " + Символы.ПС, Символы.ПС);
ПутьПримера = Каталог + "/" + РазбитоеИмя[1] + ".txt";
ОбъектПримера = Новый Файл(ПутьПримера);
Если Не ОбъектПримера.Существует() Тогда
ФайлПримера = Новый ТекстовыйДокумент();
ФайлПримера.УстановитьТекст(ТекстПримера);
ФайлПримера.Записать();
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяСтруктураЗначений) Тогда
КаталогЗначений = КаталогЗаписиЗначений + РазбитоеИмя[0];
ОбъектКаталога = Новый Файл(КаталогЗначений);
Если Не ОбъектКаталога.Существует() Тогда
СоздатьКаталог(КаталогЗначений);
КонецЕсли;
ПутьДанных = КаталогЗначений + "/" + РазбитоеИмя[1] + ".json";
ФайлДанных = Новый Файл(ПутьДанных);
Если Не ФайлДанных.Существует() Тогда
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл(ПутьДанных, , , Новый ПараметрыЗаписиJSON());
ЗаписатьJSON(ЗаписьJSON, ТекущаяСтруктураЗначений);
ЗаписьJSON.Закрыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПреобразоватьТекст(Текст)
Если СтрНайти(Текст, "ПараметрыФункции") Тогда
РазбитоеЗначение = СтрРазделить(Текст, "=", Ложь);
ИмяПараметра = ОпределитьИмяПараметра(Текст);
Значение = OPI_ПолучениеДанныхТестов.ПолучитьПараметр(ИмяПараметра);
ЗакрытьСекретныеДанные(Значение, ИмяПараметра);
Если РазбитоеЗначение.Количество() = 2 Тогда
ТекущаяСтруктураЗначений.Вставить(СокрЛП(РазбитоеЗначение[0]), Значение);
КонецЕсли;
ОпределениеПараметра = "ПараметрыФункции[""" + ИмяПараметра + """]";
Текст = СтрЗаменить(Текст, ОпределениеПараметра, """" + Строка(Значение) + """");
КонецЕсли;
Возврат Текст;
КонецФункции
Функция ОпределитьИмяПараметра(Текст)
НачалоПараметра = СтрНайти(Текст, "ПараметрыФункции[""") + 18;
КонецПараметра = СтрНайти(Текст, """]");
Имя = Сред(Текст, НачалоПараметра, КонецПараметра - НачалоПараметра);
Возврат Имя;
КонецФункции
Процедура ЗакрытьСекретныеДанные(Значение, ИмяПараметра)
МассивПризнаковСекретов = Новый Массив;
МассивПризнаковСекретов.Добавить("Secret");
МассивПризнаковСекретов.Добавить("Token");
МассивПризнаковСекретов.Добавить("Key");
МассивПризнаковСекретов.Добавить("Refresh");
Для Каждого Признак Из МассивПризнаковСекретов Цикл
Если СтрНайти(нРег(ИмяПараметра), нРег(Признак)) <> 0 Тогда
Значение = Лев(Значение, Цел(СтрДлина(Значение) / 2)) + "...";
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПриСозданииОбъекта();

169
.github/workflows/os/docs_extract.os vendored Normal file
View File

@@ -0,0 +1,169 @@
Процедура ИзвлечениеДанных()
ПутьКДокам = "./docs/ru/md";
ПутьКПримерам = "./docs/ru/examples/";
ПутьКРезультатам = "./docs/ru/results/";
ПутьКДанным = "./docs/ru/data/";
КаталогиБиблиотек = НайтиФайлы(ПутьКДокам, "*", Ложь);
Для Каждого Каталог Из КаталогиБиблиотек Цикл
ФайлыДокументации = НайтиФайлы(Каталог.ПолноеИмя, "*.md", Истина);
ИмяБиблиотеки = Каталог.Имя;
Для Каждого Документ Из ФайлыДокументации Цикл
ТекущийДокумент = Новый ТекстовыйДокумент();
ТекущийДокумент.Прочитать(Документ.ПолноеИмя, "UTF-8");
СоответствиеДанных = Новый Соответствие;
ЗаписьПримера = Ложь;
ЗаписьРезультата = Ложь;
Пример = "";
Результат = "";
ИмяФункции = "";
Для Н = 1 По ТекущийДокумент.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекущийДокумент.ПолучитьСтроку(Н));
Если СтрНачинаетсяС(ТекущаяСтрока, "*Функция ")
Или СтрНачинаетсяС(ТекущаяСтрока, "Функция ") Тогда
ИмяФункции = СтрЗаменить(ТекущаяСтрока, "*Функция ", "");
ИмяФункции = СтрЗаменить(ИмяФункции, "Функция ", "");
ИмяФункции = Лев(ИмяФункции, СтрНайти(ИмяФункции, "(") - 1);
КонецЕсли;
Если СтрНачинаетсяС(ТекущаяСтрока, "```bsl") Тогда
ЗаписьПримера = Истина;
ИначеЕсли СтрНачинаетсяС(ТекущаяСтрока, "```json") Тогда
ЗаписьРезультата = Истина;
ИначеЕсли СтрНачинаетсяС(ТекущаяСтрока, "```") Тогда
ЗаписьРезультата = Ложь;
ЗаписьПримера = Ложь;
Иначе
Если ЗаписьПримера Тогда
Пример = Пример + " " + ТекущаяСтрока + Символы.ПС;
ОпределитьНаличиеДанных(СоответствиеДанных, ТекущаяСтрока);
КонецЕсли;
Если ЗаписьРезультата Тогда
Результат = Результат + " " + ТекущаяСтрока + Символы.ПС;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЗначениеЗаполнено(ИмяФункции) Тогда
Сообщить("Документ без имени функции: " + Документ.ПолноеИмя);
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(СокрЛП(Результат)) Тогда
ПутьБиблиотеки = ПутьКРезультатам + СтрЗаменить(ИмяБиблиотеки, "_", "");
КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);
Если Не КаталогБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьБиблиотеки);
КонецЕсли;
ПутьРезультата = ПутьБиблиотеки + "/" + ИмяФункции + ".log";
ФайлРезультата = Новый Файл(ПутьРезультата);
Если ФайлРезультата.Существует() Тогда
Сообщить("Файл результата существует: " + ПутьРезультата);
Иначе
ДокументРезультата = Новый ТекстовыйДокумент();
ДокументРезультата.УстановитьТекст(Результат);
ДокументРезультата.Записать(ПутьРезультата);
Сообщить("Файл результата записан: " + ПутьРезультата);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СокрЛП(Пример)) Тогда
ПутьБиблиотеки = ПутьКПримерам + СтрЗаменить(ИмяБиблиотеки, "_", "");
КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);
Если Не КаталогБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьБиблиотеки);
КонецЕсли;
ПутьПримера = ПутьБиблиотеки + "/" + ИмяФункции + ".txt";
ФайлПримера = Новый Файл(ПутьПримера);
Если ФайлПримера.Существует() Тогда
Сообщить("Файл примера существует: " + ПутьПримера);
Иначе
ДокументПримера = Новый ТекстовыйДокумент();
ДокументПримера.УстановитьТекст(Пример);
ДокументПримера.Записать(ПутьПримера);
Сообщить("Файл примера записан: " + ПутьПримера);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СоответствиеДанных) Тогда
ПутьБиблиотеки = ПутьКДанным + СтрЗаменить(ИмяБиблиотеки, "_", "");
КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);
Если Не КаталогБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьБиблиотеки);
КонецЕсли;
ПутьДанных = ПутьБиблиотеки + "/" + ИмяФункции + ".json";
ФайлДанных = Новый Файл(ПутьДанных);
Если ФайлДанных.Существует() Тогда
Сообщить("Файл данных существует: " + ПутьДанных);
Иначе
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(ПутьДанных);
ЗаписатьJSON(ЗаписьJSON, СоответствиеДанных);
ЗаписьJSON.Закрыть();
Сообщить("Файл данных записан: " + ПутьДанных);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОпределитьНаличиеДанных(СоответствиеДанных, Знач ТекущаяСтрока)
ОбрабатываемаяСтрока = СокрЛП(ТекущаяСтрока);
Если СтрНайти(ТекущаяСтрока, "=") = 0 Тогда
Возврат;
КонецЕсли;
ЕстьДанные = СтрНайти(ТекущаяСтрока, "Новый") = 0
И СтрНайти(ТекущаяСтрока, "OPI") = 0
И СтрНайти(ТекущаяСтрока, "Запрос.") = 0;
Если ЕстьДанные Тогда
ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока, """", "");
ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока, ";", "");
МассивДанных = СтрРазделить(ОбрабатываемаяСтрока, "=", Ложь);
Если МассивДанных.Количество() = 2 Тогда
СоответствиеДанных.Вставить(СокрЛП(МассивДанных[0]), СокрЛП(МассивДанных[1]));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ИзвлечениеДанных();

View File

@@ -6,23 +6,47 @@
Перем Расположение;
Перем СПодкаталогами;
Перем КаталогДокументации;
Перем КаталогЛокализации;
Перем КаталогЛогов;
Перем КаталогПримеров;
Перем КаталогЗначений;
Перем КаталогCLI;
Перем СписокОбластей;
Перем ТекущаяОбласть;
Перем СчетчикОбласти;
Перем Словарь;
Перем Транслитация;
Перем СчетчикБиблиотеки;
Перем СоответствиеЗаголовков;
Процедура ПриСозданииОбъекта()
Расположение = ".\OInt";
Расположение = "./src/ru/OInt";
СПодкаталогами = Истина;
КаталогДокументации = ".\docs";
КаталогЛогов = ".\test_logs\";
КаталогДокументации = "./docs/ru/md";
КаталогЛокализации = "./docs/en/md";
КаталогЛогов = "./docs/ru/results/";
КаталогПримеров = "./docs/ru/examples/";
КаталогЗначений = "./docs/ru/data/";
КаталогCLI = "./docs/ru/cli/";
ПутьКСловарю = "./service/dictionaries/en.json";
СписокОбластей = Новый СписокЗначений();
ТекущаяОбласть = "";
СчетчикОбласти = 0;
СоответствиеЗаголовков = Новый Соответствие();
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
Словарь = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ПолучитьТаблицуТранслитации();
ПроверитьСоздатьКаталог(КаталогДокументации);
СоздатьФайлыДокументации();
ПеревестиДокументацию();
КонецПроцедуры
@@ -36,6 +60,12 @@
ФайлыМодулей = НайтиФайлы(Расположение, "*.os", СПодкаталогами);
Для Каждого Модуль Из ФайлыМодулей Цикл
Если Модуль.ИмяБезРасширения = "OPI_YandexID"
Или Модуль.ИмяБезРасширения = "OPI_GoogleWorkspace" Тогда
Продолжить;
КонецЕсли;
ОбщийМассивМодулей.Добавить(Модуль);
КонецЦикла;
@@ -58,22 +88,43 @@
Если ТекущаяОбласть <> Область Тогда
ТекущаяОбласть = Область;
СчетчикОбласти = 1;
СчетчикБиблиотеки = СчетчикБиблиотеки + 1;
КонецЕсли;
ТранслитированноеИмя = ТранслитироватьСтроку(СтруктураМетода["Заголовок"]);
СинонимОбласти = Синонимайзер(Область);
ТранслитированнаяОбласть = ТранслитироватьСтроку(СинонимОбласти);
ТранслитированноеИмя = ПеревестиИмя(СтруктураМетода["ИмяМетода"]);
ТранслитированнаяОбласть = ПеревестиИмя(Область);
КаталогБиблиотеки = КаталогДокументации + "\" + СтруктураМетода["Каталог"];
КаталогОбласти = КаталогБиблиотеки + "\" + ТранслитированнаяОбласть;
КаталогКартинок = КаталогОбласти + "\" + "img";
ТранслитированноеИмя = СтрЗаменить(Синонимайзер(ТранслитированноеИмя), " ", "-");
ТранслитированнаяОбласть = СтрЗаменить(Синонимайзер(ТранслитированнаяОбласть), " ", "-");
СинонимОбласти = СтрЗаменить(ТранслитированнаяОбласть, "-", " ");
ЗаголовокОбласти = Синонимайзер(Область);
СоответствиеЗаголовков.Вставить(ЗаголовокОбласти, СинонимОбласти);
ИмяМодуляБезПрефикса = СтрЗаменить(СтруктураМетода["ИмяМодуля"], "OPI_", "");
КаталогБиблиотеки = КаталогДокументации + "/" + СтруктураМетода["Каталог"];
КаталогОбласти = КаталогБиблиотеки + "/" + ТранслитированнаяОбласть;
КаталогКартинок = КаталогОбласти + "/" + "img";
ПутьДанных = КаталогЗначений + ИмяМодуляБезПрефикса + "/" + СтруктураМетода["ИмяМетода"] + ".json";
ФайлДанных = Новый Файл(ПутьДанных);
Если ФайлДанных.Существует() Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьДанных);
СтруктураЗначений = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Иначе
СтруктураЗначений = Новый Соответствие();
КонецЕсли;
ПроверитьСоздатьКаталог(КаталогБиблиотеки);
ПроверитьСоздатьКаталог(КаталогОбласти);
ПроверитьСоздатьКаталог(КаталогКартинок);
СтруктураКатегории = Новый Структура("label,position", СинонимОбласти, "");
ФайлКатегории = КаталогОбласти + "\_category_.json";
СтруктураКатегории = Новый Структура("label,position", ЗаголовокОбласти, Строка(СчетчикБиблиотеки));
ФайлКатегории = КаталогОбласти + "/_category_.json";
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто);
@@ -82,7 +133,7 @@
Запись.Закрыть();
Макет = Новый ТекстовыйДокумент();
Макет.Прочитать(".\.github\workflows\os\template.md", "UTF-8");
Макет.Прочитать("./.github/workflows/os/template.md", "UTF-8");
Макет = Макет.ПолучитьТекст();
@@ -94,26 +145,79 @@
Макет = СтрЗаменить(Макет, "@Результат" , Результат);
ТаблицаПараметров = "";
Вызов1С = СтруктураМетода["ИмяМодуля"] + "." + СтруктураМетода["ИмяМетода"] + "(";
ВызовCLI = "oint " + СтруктураМетода["Команда"] + " " + СтруктураМетода["ИмяМетода"];
Вызов1С = ПолучитьВызов1С(СтруктураМетода["ИмяМодуля"], СтруктураМетода["ИмяМетода"]);
Для каждого ПараметрМетода Из СтруктураМетода["Параметры"] Цикл
ПутьCLI = КаталогCLI + ИмяМодуляБезПрефикса + "/" + СтруктураМетода["ИмяМетода"] + ".txt";
ФайлCLI = Новый Файл(ПутьCLI);
ВызовCLI = "";
Если Не ФайлCLI.Существует() Тогда
ТаблицаПараметров = ТаблицаПараметров + " | "
+ ПараметрМетода.Имя + " | "
+ ПараметрМетода.Опция + " | "
+ ПараметрМетода.Типы + " | "
+ ПараметрМетода.Описание + " |"
+ Символы.ПС;
КаталогТекущиегоCLI = КаталогCLI + ИмяМодуляБезПрефикса;
ФайлКаталога = Новый Файл(КаталогТекущиегоCLI);
Вызов1С = Вызов1С + ПараметрМетода.Имя + ", ";
ВызовCLI = ВызовCLI + " " + ПараметрМетода.Опция + " ";
ВызовCLI = ВызовCLI + "%" + СтрЗаменить(ПараметрМетода.Опция, "-", "") + "%";
Если Не ФайлКаталога.Существует() Тогда
СоздатьКаталог(КаталогТекущиегоCLI);
КонецЕсли;
КонецЦикла;
ВызовCLI = "oint " + СтруктураМетода["Команда"] + " " + СтруктураМетода["ИмяМетода"];
Вызов1С = Лев(Вызов1С, СтрДлина(Вызов1С) - 2);
Вызов1С = Вызов1С + ");";
Для каждого ПараметрМетода Из СтруктураМетода["Параметры"] Цикл
Если Не ЗначениеЗаполнено(ПараметрМетода.Опция) Или Не СтруктураМетода["ЕстьCLI"] Тогда
Сообщить("Метод не имеет опции: " + СтруктураМетода["Заголовок"]);
Возврат;
КонецЕсли;
ТаблицаПараметров = ТаблицаПараметров + " | "
+ ПараметрМетода.Имя + " | "
+ ПараметрМетода.Опция + " | "
+ ПараметрМетода.Типы + " | "
+ ПараметрМетода.Описание + " |"
+ Символы.ПС;
ВызовCLI = ВызовCLI + " " + ПараметрМетода.Опция + " ";
ВызовCLI = ВызовCLI + ОпределитьЗначениеОпции(ПараметрМетода.Опция, СтруктураЗначений[ПараметрМетода.Имя]);
КонецЦикла;
ВызовCLI = СокрЛП(ВызовCLI);
ТекстCLI = Новый ТекстовыйДокумент();
ТекстCLI.УстановитьТекст(ВызовCLI);
ТекстCLI.Записать(ПутьCLI);
Иначе
Для каждого ПараметрМетода Из СтруктураМетода["Параметры"] Цикл
Если Не ЗначениеЗаполнено(ПараметрМетода.Опция) Или Не СтруктураМетода["ЕстьCLI"] Тогда
Сообщить("Метод не имеет опции: " + СтруктураМетода["Заголовок"]);
Возврат;
КонецЕсли;
ТаблицаПараметров = ТаблицаПараметров + " | "
+ ПараметрМетода.Имя + " | "
+ ПараметрМетода.Опция + " | "
+ ПараметрМетода.Типы + " | "
+ ПараметрМетода.Описание + " |"
+ Символы.ПС;
КонецЦикла;
ТекстCLI = Новый ТекстовыйДокумент();
ТекстCLI.Прочитать(ПутьCLI);
Для Н = 1 По ТекстCLI.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекстCLI.ПолучитьСтроку(Н));
Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда
ВызовCLI = ВызовCLI + " " + ТекущаяСтрока + Символы.ПС;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ВызовCLI) Тогда
ВызовCLI = Лев(ВызовCLI, СтрДлина(ВызовCLI) - 1);
КонецЕсли;
КонецЕсли;
Макет = СтрЗаменить(Макет, "@Вызов1С" , Вызов1С);
Макет = СтрЗаменить(Макет, "@ВызовCLI" , ВызовCLI);
@@ -121,7 +225,7 @@
НовыйДокумент = Новый ТекстовыйДокумент();
НовыйДокумент.УстановитьТекст(Макет);
НовыйДокумент.Записать(КаталогОбласти + "\" + ТранслитированноеИмя + ".md");
НовыйДокумент.Записать(КаталогОбласти + "/" + ТранслитированноеИмя + ".md");
СчетчикОбласти = СчетчикОбласти + 1;
@@ -133,6 +237,7 @@
Процедура РазобратьМодуль(ТекущийМодуль, ИмяМодуля)
СчетчикБиблиотеки = 1;
ТекстМодуля = ТекущийМодуль.ПолучитьТекст();
СтруктураОбщихДанных = Новый Структура();
СтруктураОбщихДанных.Вставить("ИмяМодуля", ИмяМодуля);
@@ -164,20 +269,20 @@
Процедура ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль)
Имя = ТекущийМодуль.ПолучитьСтроку(1);
CLI = ТекущийМодуль.ПолучитьСтроку(2);
Имя = ТекущийМодуль.ПолучитьСтроку(2);
CLI = ТекущийМодуль.ПолучитьСтроку(3);
Если СтрНайти(Имя, "Библиотека") = 0 Тогда
Если СтрНайти(Имя, "Lib") = 0 Тогда
Имя = "";
Иначе
Имя = СтрЗаменить(Имя, "// Библиотека:", "");
Имя = СтрЗаменить(Имя, "// Lib:", "");
Имя = СокрЛП(Имя);
КонецЕсли;
Если СтрНайти(CLI, "Команда CLI") = 0 Тогда
Если СтрНайти(CLI, "CLI") = 0 Тогда
CLI = "none";
Иначе
CLI = СтрЗаменить(CLI, "// Команда CLI:", "");
CLI = СтрЗаменить(CLI, "// CLI:", "");
CLI = СокрЛП(CLI);
КонецЕсли;
@@ -353,6 +458,56 @@
#Область Инструменты
Функция ПолучитьВызов1С(Модуль, Метод)
Результат = "";
ИмяКаталога = СтрЗаменить(Модуль, "OPI_", "");
ИмяФайла = Метод + ".txt";
ПутьПримера = КаталогПримеров + ИмяКаталога + "/" + ИмяФайла;
ФайлПримера = Новый Файл(ПутьПримера);
Если ФайлПримера.Существует() Тогда
ТекстПримера = Новый ТекстовыйДокумент();
ТекстПримера.Прочитать(ПутьПримера);
Результат = "";
Для Н = 1 По ТекстПримера.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекстПримера.ПолучитьСтроку(Н));
Результат = Результат + " " + ТекущаяСтрока + Символы.ПС;
КонецЦикла;
Если ЗначениеЗаполнено(Результат) Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1);
Пока СтрНайти(Результат, Символы.ПС + Символы.ПС) <> 0 Цикл
Результат = СтрЗаменить(Результат, Символы.ПС + Символы.ПС, Символы.ПС);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОпределитьЗначениеОпции(Опция, Значение = "")
Если ЗначениеЗаполнено(Значение) Тогда
Опция = """" + Строка(Значение) + """";
Иначе
Опция = "%" + СтрЗаменить(Опция, "-", "") + "%";
КонецЕсли;
Возврат Опция;
КонецФункции
Процедура ПроверитьСоздатьКаталог(Путь)
Каталог = Новый Файл(Путь);
@@ -392,42 +547,6 @@
Функция ТранслитироватьСтроку(Знач Значение)
Значение = нРег(Значение);
Транслитация = Новый Соответствие();
Транслитация.Вставить("а", "a");
Транслитация.Вставить("б", "b");
Транслитация.Вставить("в", "v");
Транслитация.Вставить("г", "g");
Транслитация.Вставить("д", "d");
Транслитация.Вставить("е", "e");
Транслитация.Вставить("ё", "e");
Транслитация.Вставить("ж", "zh");
Транслитация.Вставить("з", "z");
Транслитация.Вставить("и", "i");
Транслитация.Вставить("й", "y");
Транслитация.Вставить("к", "k");
Транслитация.Вставить("л", "l");
Транслитация.Вставить("м", "m");
Транслитация.Вставить("н", "n");
Транслитация.Вставить("о", "o");
Транслитация.Вставить("п", "p");
Транслитация.Вставить("р", "r");
Транслитация.Вставить("с", "s");
Транслитация.Вставить("т", "t");
Транслитация.Вставить("у", "u");
Транслитация.Вставить("ф", "f");
Транслитация.Вставить("х", "h");
Транслитация.Вставить("ц", "ts");
Транслитация.Вставить("ч", "ch");
Транслитация.Вставить("ш", "sh");
Транслитация.Вставить("щ", "sch");
Транслитация.Вставить("ъ", "");
Транслитация.Вставить("ы", "y");
Транслитация.Вставить("ь", "");
Транслитация.Вставить("э", "e");
Транслитация.Вставить("ю", "u");
Транслитация.Вставить("я", "ya");
Транслитация.Вставить(" ", "-");
Для Каждого ЗаменяемыйСимвол Из Транслитация Цикл
Значение = СтрЗаменить(Значение, ЗаменяемыйСимвол.Ключ, ЗаменяемыйСимвол.Значение);
@@ -436,6 +555,21 @@
Значение = ВРег(Лев(Значение,1)) + Сред(Значение,2);
Возврат Значение;
КонецФункции
Функция ПеревестиИмя(Значение)
ПереведенноеИмя = Словарь[Значение];
Если Не ЗначениеЗаполнено(ПереведенноеИмя) Тогда
ПереведенноеИмя = ТранслитироватьСтроку(Значение);
ПереведенноеИмя = СтрЗаменить(ПереведенноеИмя, "(", "");
ПереведенноеИмя = СтрЗаменить(ПереведенноеИмя, ")", "");
ПереведенноеИмя = СтрЗаменить(ПереведенноеИмя, "-", " ");
КонецЕсли;
Возврат ПереведенноеИмя;
КонецФункции
Функция Синонимайзер(ИмяРеквизита)
@@ -478,7 +612,7 @@
Возврат Результат;
КонецЕсли;
ПутьЛога = ПутьКаталогаРаздела + "\" + Метод + ".log";
ПутьЛога = ПутьКаталогаРаздела + "/" + Метод + ".log";
ФайлЛога = Новый Файл(ПутьЛога);
Если Не ФайлЛога.Существует() Тогда
@@ -488,14 +622,205 @@
ДокументЛога = Новый ТекстовыйДокумент();
ДокументЛога.Прочитать(ПутьЛога);
Результат = ДокументЛога.ПолучитьТекст();
Результат = "";
Для Н = 1 По ДокументЛога.КоличествоСтрок() Цикл
ТекущаяСтрока = ДокументЛога.ПолучитьСтроку(Н);
Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда
Результат = Результат + ТекущаяСтрока + Символы.ПС;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Результат) Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1);
КонецЕсли;
Возврат СокрЛП(Результат);
КонецФункции
Процедура ПолучитьТаблицуТранслитации()
Транслитация = Новый Соответствие();
Транслитация.Вставить("а", "a");
Транслитация.Вставить("б", "b");
Транслитация.Вставить("в", "v");
Транслитация.Вставить("г", "g");
Транслитация.Вставить("д", "d");
Транслитация.Вставить("е", "e");
Транслитация.Вставить("ё", "e");
Транслитация.Вставить("ж", "zh");
Транслитация.Вставить("з", "z");
Транслитация.Вставить("и", "i");
Транслитация.Вставить("й", "y");
Транслитация.Вставить("к", "k");
Транслитация.Вставить("л", "l");
Транслитация.Вставить("м", "m");
Транслитация.Вставить("н", "n");
Транслитация.Вставить("о", "o");
Транслитация.Вставить("п", "p");
Транслитация.Вставить("р", "r");
Транслитация.Вставить("с", "s");
Транслитация.Вставить("т", "t");
Транслитация.Вставить("у", "u");
Транслитация.Вставить("ф", "f");
Транслитация.Вставить("х", "h");
Транслитация.Вставить("ц", "ts");
Транслитация.Вставить("ч", "ch");
Транслитация.Вставить("ш", "sh");
Транслитация.Вставить("щ", "sch");
Транслитация.Вставить("ъ", "");
Транслитация.Вставить("ы", "y");
Транслитация.Вставить("ь", "");
Транслитация.Вставить("э", "e");
Транслитация.Вставить("ю", "u");
Транслитация.Вставить("я", "ya");
КонецПроцедуры
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
Если СтрНайти(Файл.ПолноеИмя, "cli") <> 0 Тогда
Продолжить;
КонецЕсли;
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если Файл.ЭтоКаталог() Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
Если Файл.Расширение = ".gif" Или Файл.Расширение = ".png" Тогда
ФайлПриемник = Новый Файл(ПолноеИмяПриемник);
Если ФайлПриемник.Существует() Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Локализация
Процедура ПеревестиДокументацию()
Сообщить("////////////////////////////////////////////////");
Сообщить("");
Сообщить("Начало перевода...");
Сообщить("");
СоответствиеЗаголовков.Вставить("Начало работы", "Getting started");
ФайлКаталогаДокументации = Новый Файл(КаталогДокументации);
ФайлКаталогаЛокализации = Новый Файл(КаталогЛокализации);
//УдалитьФайлы(ФайлКаталогаЛокализации.ПолноеИмя);
СкопироватьФайлы(ФайлКаталогаДокументации.ПолноеИмя, ФайлКаталогаЛокализации.ПолноеИмя);
ТаблицаСловаря = Новый ТаблицаЗначений();
ТаблицаСловаря.Колонки.Добавить("Ключ");
ТаблицаСловаря.Колонки.Добавить("Значение");
ТаблицаСловаря.Колонки.Добавить("Длина");
Для Каждого КлючевоеСлово Из Словарь Цикл
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
КонецЦикла;
ТаблицаСловаря.Сортировать("Длина УБЫВ");
ФайлыЛокализации = НайтиФайлы(ФайлКаталогаЛокализации.ПолноеИмя, "*.md", Истина);
JsonЛокализации = НайтиФайлы(ФайлКаталогаЛокализации.ПолноеИмя, "*.json", Истина);
Для Каждого JSON из JsonЛокализации Цикл
ФайлыЛокализации.Добавить(JSON);
КонецЦикла;
Для Каждого Файл Из ФайлыЛокализации Цикл
Если Файл.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Если Файл.Имя = "_category_.json" Тогда
ФайлКатегории = Файл.ПолноеИмя;
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ФайлКатегории);
СтруктураКатегории = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ЛокализированныйЗаголовок = СоответствиеЗаголовков[СтруктураКатегории["label"]];
Если ЗначениеЗаполнено(ЛокализированныйЗаголовок) Тогда
СтруктураКатегории.Вставить("label", ЛокализированныйЗаголовок);
КонецЕсли;
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто);
Запись.ОткрытьФайл(ФайлКатегории, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, СтруктураКатегории);
Запись.Закрыть();
Иначе
ТекущийДокумент = Новый ТекстовыйДокумент();
ТекущийДокумент.Прочитать(Файл.ПолноеИмя, "UTF-8");
ТекстДокумента = ТекущийДокумент.ПолучитьТекст();
Для Каждого Слово Из ТаблицаСловаря Цикл
ТекстДокумента = СтрЗаменить(ТекстДокумента, Слово.Ключ, Слово.Значение);
КонецЦикла;
Пока СтрНайти(ТекстДокумента, " ") <> 0 Цикл
ТекстДокумента = СтрЗаменить(ТекстДокумента, " ", " ");
КонецЦикла;
ТекстДокумента = СтрЗаменить(ТекстДокумента, " ,", ",");
ТекущийДокумент.УстановитьТекст(ТекстДокумента);
ТекущийДокумент.Записать(Файл.ПолноеИмя);
КонецЕсли;
Для Каждого Буква Из Транслитация Цикл
Если СтрНайти(ТекстДокумента, Буква.Ключ) <> 0 Тогда
Сообщить("Ошибка перевода | " + Файл.ПолноеИмя);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить("Перевод завершен!");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
ПриСозданииОбъекта();
//ПриСозданииОбъекта();

View File

@@ -0,0 +1,50 @@
ПутьКСловарю = "./service/dictionaries/en.json";
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
Словарь = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ТаблицаСловаря = Новый ТаблицаЗначений();
ТаблицаСловаря.Колонки.Добавить("Ключ");
ТаблицаСловаря.Колонки.Добавить("Значение");
ТаблицаСловаря.Колонки.Добавить("Длина");
Для Каждого КлючевоеСлово Из Словарь Цикл
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
КонецЦикла;
ТаблицаСловаря.Сортировать("Длина УБЫВ");
ПутьДокозавра = "./docs/docusaurus/";
МассивФайлов = Новый Массив;
МассивФайлов.Добавить(Новый Файл(ПутьДокозавра + "src/components/HomepageFeatures/index.js"));
МассивФайлов.Добавить(Новый Файл(ПутьДокозавра + "src/pages/index.js"));
МассивФайлов.Добавить(Новый Файл(ПутьДокозавра + "docusaurus.config.js"));
Для Каждого Файл Из МассивФайлов Цикл
ТекущийПуть = Файл.ПолноеИмя;
ТекущийДокумент = Новый ТекстовыйДокумент();
ТекущийДокумент.Прочитать(ТекущийПуть, "UTF-8");
ТекущийТекст = ТекущийДокумент.ПолучитьТекст();
Для Каждого Слово Из ТаблицаСловаря Цикл
ТекущийТекст = СтрЗаменить(ТекущийТекст, Слово.Ключ, Слово.Значение);
КонецЦикла;
ТекущийТекст = СтрЗаменить(ТекущийТекст, "English version", "Документация на русском языке");
ТекущийТекст = СтрЗаменить(ТекущийТекст, "href: 'https://en.openintegrations.dev'", "href: 'https://openintegrations.dev'");
ТекущийТекст = СтрЗаменить(ТекущийТекст, "defaultLocale: 'ru',", "defaultLocale: 'en',");
ТекущийТекст = СтрЗаменить(ТекущийТекст, "locales: ['ru'],", "locales: ['en'],");
ТекущийТекст = СтрЗаменить(ТекущийТекст, "url: 'https://openintegrations.dev',", "url: 'https://en.openintegrations.dev',");
ТекущийДокумент.УстановитьТекст(ТекущийТекст);
ТекущийДокумент.Записать(Файл.ПолноеИмя);
КонецЦикла;

334
.github/workflows/os/oint_dictionary.os vendored Normal file
View File

@@ -0,0 +1,334 @@
Перем СписокЯзыков;
Перем ОбщийМассивСлов;
Перем Алфавит;
Перем МассивСимволов;
Процедура ПолучитьСписокЯзыков() Экспорт
СписокЯзыков = Новый Массив();
СписокЯзыков.Добавить("en");
КонецПроцедуры
Процедура СоздатьСловари()
ПолучитьСписокЯзыков();
ПолучитьАлфавит();
ПолучитьМассивСимволов();
Для Каждого Язык Из СписокЯзыков Цикл
СоздатьСловарь(Язык);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьСловарь(Знач Язык)
ФайлыМодулей = НайтиФайлы("./src/ru/", "*", Истина);
СписокСлов = Новый СписокЗначений();
Для Каждого Модуль Из ФайлыМодулей Цикл
Если Модуль.ЭтоКаталог() Или Не Модуль.Существует() Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(Модуль.ПолноеИмя, "cli\data") <> 0 Или СтрНайти(Модуль.ПолноеИмя, "cli/data") <> 0 Тогда
Продолжить;
КонецЕсли;
ПолучитьМассивСловОригинала(Модуль.ПолноеИмя, СписокСлов);
КонецЦикла;
МассивМодулейДляПеревода = Новый Массив;
МассивМодулейДляПеревода.Добавить(Новый Файл("./src/ru/cli/tools/Modules/Утилиты.os"));
Для Каждого ФайлУтилит Из МассивМодулейДляПеревода Цикл
ПолучитьМассивСловОригинала(ФайлУтилит.ПолноеИмя, СписокСлов);
КонецЦикла;
ПутьСловаря = "./service/dictionaries/" + Язык + ".json";
ФайлСловаря = Новый Файл(ПутьСловаря);
СоответствиеСловаря = Новый Соответствие();
СоответствиеСуществующегоСловаря = Новый Соответствие();
Если ФайлСловаря.Существует() Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьСловаря);
СоответствиеСуществующегоСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
КонецЕсли;
//СписокСлов.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);
Для Каждого Слово Из СписокСлов Цикл
Значение = Слово.Значение;
СоответствиеСловаря.Вставить(Значение, "");
КонецЦикла;
Для Каждого Существующее Из СоответствиеСуществующегоСловаря Цикл
СоответствиеСловаря.Вставить(Существующее.Ключ, Существующее.Значение);
КонецЦикла;
ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря);
КонецПроцедуры
Процедура ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря)
ТекстовыйДок = Новый ТекстовыйДокумент();
ТекстовыйДок.ДобавитьСтроку("{");
ТЗ = Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("Ключ");
ТЗ.Колонки.Добавить("Значение");
ТЗ.Колонки.Добавить("ДлинаКлюча");
ТЗ.Колонки.Добавить("Заполнено");
Для Каждого Элемент Из СоответствиеСловаря Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Ключ = Элемент.Ключ;
НоваяСтрока.Значение = Элемент.Значение;
НоваяСтрока.ДлинаКлюча = СтрДлина(Элемент.Ключ);
НоваяСтрока.Заполнено = ЗначениеЗаполнено(Элемент.Значение);
КонецЦикла;
ТЗ.Сортировать("Заполнено УБЫВ, ДлинаКлюча");
Для Каждого СтрокаТЗ Из ТЗ Цикл
Значение = СтрокаТЗ.Значение;
Значение = СтрЗаменить(Значение, "\", "\\");
Значение = СтрЗаменить(Значение, "/", "\/");
Значение = СтрЗаменить(Значение, """", "\""");
Ключ = СтрокаТЗ.Ключ;
Ключ = СтрЗаменить(Ключ, "\", "\\");
Ключ = СтрЗаменить(Ключ, "/", "\/");
Ключ = СтрЗаменить(Ключ, """", "\""");
ТекстовыйДок.ДобавитьСтроку("""" + Ключ + """: """ + Значение + """,");
КонецЦикла;
ПоследняяСтрока = ТекстовыйДок.ПолучитьСтроку(ТекстовыйДок.КоличествоСтрок());
ПоследняяСтрока = Лев(ПоследняяСтрока, СтрДлина(ПоследняяСтрока) - 1);
ТекстовыйДок.ЗаменитьСтроку(ТекстовыйДок.КоличествоСтрок(), ПоследняяСтрока);
ТекстовыйДок.ДобавитьСтроку("}");
ТекстовыйДок.Записать(ПутьСловаря);
КонецПроцедуры
Процедура ПолучитьМассивСловОригинала(Знач ПутьКФайлу, СписокСлов)
Документ = Новый ТекстовыйДокумент();
Документ.Прочитать(ПутьКФайлу, "UTF-8");
Для Н = 1 По Документ.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(Документ.ПолучитьСтроку(Н));
Если СтрНачинаетсяС(ТекущаяСтрока, "//") Тогда
ТекущаяСтрока = СокрЛП(СтрЗаменить(ТекущаяСтрока, "//", ""));
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " - ", "$");
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Ложь);
Для Г = 0 По МассивСтроки.ВГраница() Цикл
ДобавитьСлово(СписокСлов, МассивСтроки[Г]);
КонецЦикла;
Продолжить;
КонецЕсли;
Если СтрНайти(ТекущаяСтрока, """") <> 0
Или СтрНайти(ТекущаяСтрока, "|") <> 0
Или СтрНайти(ТекущаяСтрока, "<") <> 0
Или СтрНайти(ТекущаяСтрока, ">") <> 0 Тогда
ТекущаяСтрока = " " + ТекущаяСтрока;
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """", "$");
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "|", "$");
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "<", "$");
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ">", "$");
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", """""");
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Истина);
Цельный = Ложь;
Для Каждого Элемент Из МассивСтроки Цикл
Если Не ЗначениеЗаполнено(СокрЛП(Элемент)) Тогда
Продолжить;
КонецЕсли;
Если Цельный Тогда
ДобавитьСлово(СписокСлов, Элемент);
Иначе
РазобратьОбычнуюСтроку(Элемент, СписокСлов);
КонецЕсли;
Цельный = Не Цельный;
КонецЦикла;
Иначе
РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьОбычнуюСтроку(Элемент, СписокСлов)
Для Каждого Символ Из МассивСимволов Цикл
Элемент = СтрЗаменить(Элемент, Символ, "$");
КонецЦикла;
Пока СтрНайти(Элемент, "$$") <> 0 Цикл
Элемент = СтрЗаменить(Элемент, "$$", "$");
КонецЦикла;
МассивЭлемента = СтрРазделить(Элемент, "$", Ложь);
Для Каждого Дробный Из МассивЭлемента Цикл
ДобавитьСлово(СписокСлов, Дробный);
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьСлово(Список, Слово)
Слово = СокрЛП(Слово);
Нормализовано = Ложь;
Пока Не Нормализовано Цикл
ПервыйСимвол = Ложь;
ПоследнийСимвол = Ложь;
Для Каждого Символ Из МассивСимволов Цикл
ПервыйСимвол = СтрНачинаетсяС(Слово, Символ);
ПоследнийСимвол = СтрЗаканчиваетсяНа(Слово, Символ);
Если ПервыйСимвол Или ПоследнийСимвол Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ПервыйСимвол Тогда
Слово = Прав(Слово, СтрДлина(Слово) - 1);
КонецЕсли;
Если ПоследнийСимвол Тогда
Слово = Лев(Слово, СтрДлина(Слово) - 1);
КонецЕсли;
Если Не ПервыйСимвол И Не ПоследнийСимвол Тогда
Нормализовано = Истина;
КонецЕсли;
КонецЦикла;
Слово = СокрЛП(Слово);
Если Не ЗначениеЗаполнено(Слово) Или Не НайтиКириллицу(Слово) Тогда
Возврат;
КонецЕсли;
СуществующееЗначение = Список.НайтиПоЗначению(Слово);
Если СуществующееЗначение = Неопределено Тогда
Список.Добавить(Слово, СтрДлина(Слово));
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьАлфавит()
Алфавит = Новый Массив;
Алфавит.Добавить("а");
Алфавит.Добавить("б");
Алфавит.Добавить("в");
Алфавит.Добавить("г");
Алфавит.Добавить("д");
Алфавит.Добавить("е");
Алфавит.Добавить("ё");
Алфавит.Добавить("ж");
Алфавит.Добавить("з");
Алфавит.Добавить("и");
Алфавит.Добавить("й");
Алфавит.Добавить("к");
Алфавит.Добавить("л");
Алфавит.Добавить("м");
Алфавит.Добавить("н");
Алфавит.Добавить("о");
Алфавит.Добавить("п");
Алфавит.Добавить("р");
Алфавит.Добавить("с");
Алфавит.Добавить("т");
Алфавит.Добавить("у");
Алфавит.Добавить("ф");
Алфавит.Добавить("х");
Алфавит.Добавить("ц");
Алфавит.Добавить("ч");
Алфавит.Добавить("ш");
Алфавит.Добавить("щ");
Алфавит.Добавить("ъ");
Алфавит.Добавить("ы");
Алфавит.Добавить("ь");
Алфавит.Добавить("э");
Алфавит.Добавить("ю");
Алфавит.Добавить("я");
КонецПроцедуры
Процедура ПолучитьМассивСимволов()
МассивСимволов = Новый Массив();
МассивСимволов.Добавить(";");
МассивСимволов.Добавить(".");
МассивСимволов.Добавить(",");
МассивСимволов.Добавить(")");
МассивСимволов.Добавить("(");
МассивСимволов.Добавить("/");
МассивСимволов.Добавить("\");
МассивСимволов.Добавить("[");
МассивСимволов.Добавить("]");
МассивСимволов.Добавить("=");
МассивСимволов.Добавить("+");
МассивСимволов.Добавить("-");
МассивСимволов.Добавить("*");
МассивСимволов.Добавить("#");
МассивСимволов.Добавить(" ");
МассивСимволов.Добавить("""");
КонецПроцедуры
Функция НайтиКириллицу(Знач Слово)
СловоНРег = НРег(Слово);
Для Каждого Буква Из Алфавит Цикл
Если СтрНайти(СловоНРег, Буква) <> 0 Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
СоздатьСловари();

View File

@@ -1,4 +1,4 @@
#Использовать "../../../OInt/tools/"
#Использовать "../../../src/ru/OInt/tools/"
Перем СоответствияПараметровЗначениям;
Перем СоответствияПараметровПредобработкам;
@@ -6,22 +6,26 @@
Перем ТекущийДокумент;
Перем ПутьКФайлам;
Процедура ПриСозданииОбъекта()
МассивВлияющих = Новый Массив;
МассивВлияющих.Добавить("Testing-Twitter");
СписокРабот = "";
ТаблицаТестов = OPI_ПолучениеДанныхТестов.ПолучитьТаблицуТестов();
СписокБиблиотек = OPI_ПолучениеДанныхТестов.ПолучитьСоответствиеРазделовТестирования();
ПутьКФайлам = "./.github/workflows/";
МассивВлияющих = Новый Массив;
Для Каждого Библиотека Из СписокБиблиотек Цикл
МассивВлияющих.Добавить("Testing-" + Библиотека.Ключ);
КонецЦикла;
ТекущийДокумент = Новый ТекстовыйДокумент();
СообщитьНачалоФайлаПроцесса();
СформироватьЗапуск(ТаблицаТестов, СписокБиблиотек);
СообщитьОкончаниеФайлаПроцесса(МассивВлияющих);
СообщитьОкончаниеФайлаПроцесса(МассивВлияющих, СписокБиблиотек);
ТекущийДокумент.Записать(ПутьКФайлам + "oint_test_full.yml");
@@ -30,12 +34,13 @@
ТекущийДокумент = Новый ТекстовыйДокумент();
Библиотека = ТекущаяБиблиотека.Ключ;
СписокРабот = "";
СообщитьНачалоФайлаПроцесса("Тестирование " + Библиотека);
СписокОдной = Новый Соответствие();
Зависимости = СписокБиблиотек[Библиотека];
СписокОдной.Вставить(Библиотека, Зависимости);
СообщитьНачалоФайлаПроцесса("Тестирование " + Библиотека);
СформироватьЗапуск(ТаблицаТестов, СписокОдной);
ТекущийДокумент.ДобавитьСтроку("
@@ -48,7 +53,7 @@
| path: ./data.json
|");
СообщитьОкончаниеФайлаПроцесса("Testing-" + Библиотека);
СообщитьОкончаниеФайлаПроцесса("Testing-" + Библиотека, СписокОдной);
ТекущийДокумент.Записать(ПутьКФайлам + "oint_test_" + Библиотека + ".yml");
@@ -59,7 +64,7 @@
Процедура СформироватьЗапуск(Знач ТаблицаТестов, Знач СписокБиблиотек)
Раннер = "/home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os";
ФайлТестов = "./OInt/tests/Modules/internal/OPI_Тесты.os";
ФайлТестов = "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os";
Для Каждого Библиотека Из СписокБиблиотек Цикл
@@ -94,7 +99,7 @@
|
| - name: Установить OInt
| run: |
| cd ./OInt
| cd ./src/ru/OInt
| opm build
| opm install *.ospx
|
@@ -121,14 +126,6 @@
КонецЦикла;
ТекущийДокумент.ДобавитьСтроку("
|
| - name: Записать логи
| uses: actions/upload-artifact@v4
| with:
| name: " + Раздел + "
| path: ./test_logs");
КонецПроцедуры
Процедура СообщитьНачалоФайлаПроцесса(Знач ИмяРаботы = "Полное тестирование")
@@ -175,7 +172,7 @@
|
| - name: Установить OInt
| run: |
| cd ./OInt
| cd ./src/ru/OInt
| opm build
| opm install *.ospx
|
@@ -183,12 +180,12 @@
| uses: actions/upload-artifact@v4
| with:
| name: oint
| path: ./OInt/*.ospx
| path: ./src/ru/OInt/*.ospx
|");
КонецПроцедуры
Процедура СообщитьОкончаниеФайлаПроцесса(Знач СписокВлияний = "")
Процедура СообщитьОкончаниеФайлаПроцесса(Знач СписокВлияний = "", Знач СписокБиблиотек)
Если ТипЗнч(СписокВлияний) = Тип("Массив") Тогда
СписокВлияний = СтрСоединить(СписокВлияний, ",");
@@ -223,7 +220,35 @@
| gpg --batch --symmetric --cipher-algo AES256 --passphrase=""$ENC_JSON"" data.json
| rm -f ./data.json
| env:
| ENC_JSON: ${{ secrets.ENC_JSON }}
| ENC_JSON: ${{ secrets.ENC_JSON }}");
Для Каждого Библиотека Из СписокБиблиотек Цикл
ТекущаяБиблиотека = Библиотека.Ключ;
ТекущийДокумент.ДобавитьСтроку("
| - name: Получить логи " + ТекущаяБиблиотека + "
| uses: actions/cache/restore@v3
| with:
| key: logs-" + ТекущаяБиблиотека + "
| path: ./docs/results/" + ТекущаяБиблиотека + "
|");
ТекущийДокумент.ДобавитьСтроку("
|
| - name: Очистка логов " + ТекущаяБиблиотека + "
| run: |
| curl -L \
| -X DELETE \
| -H ""Accept: application/vnd.github+json"" \
| -H ""Authorization: Bearer ${{ secrets.TOKEN }}"" \
| -H ""X-GitHub-Api-Version: 2022-11-28"" \
| ""https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-" + ТекущаяБиблиотека + """
|");
КонецЦикла;
ТекущийДокумент.ДобавитьСтроку("
|
| - name: Записать данные
| uses: stefanzweifel/git-auto-commit-action@v5
@@ -273,6 +298,16 @@
Процедура ДополнитьТекстРаботы(Знач Раздел, ТекстРаботы)
ТекстРаботы = ТекстРаботы + "
|
| - name: Записать логи
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: logs-" + Раздел + "
| path: ./docs/results/" + Раздел + "
|";
Если Раздел = "Twitter" Тогда
ТекстРаботы = ТекстРаботы + "
|

View File

@@ -0,0 +1,322 @@
#Использовать "../../../src/en/OInt/tools/"
Перем СоответствияПараметровЗначениям;
Перем СоответствияПараметровПредобработкам;
Перем СписокРабот;
Перем ТекущийДокумент;
Перем ПутьКФайлам;
Процедура ПриСозданииОбъекта()
СписокРабот = "";
ТаблицаТестов = OPI_TestDataRetrieval.GetTestTable();
СписокБиблиотек = OPI_TestDataRetrieval.GetTestingSectionMapping();
ПутьКФайлам = "./.github/workflows/";
МассивВлияющих = Новый Массив;
Для Каждого Библиотека Из СписокБиблиотек Цикл
МассивВлияющих.Добавить("Testing-" + Библиотека.Ключ);
КонецЦикла;
ТекущийДокумент = Новый ТекстовыйДокумент();
СообщитьНачалоФайлаПроцесса();
СформироватьЗапуск(ТаблицаТестов, СписокБиблиотек);
СообщитьОкончаниеФайлаПроцесса(МассивВлияющих, СписокБиблиотек);
ТекущийДокумент.Записать(ПутьКФайлам + "oint_test_full_en.yml");
КонецПроцедуры
Процедура СформироватьЗапуск(Знач ТаблицаТестов, Знач СписокБиблиотек)
Раннер = "/home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os";
ФайлТестов = "./src/en/OInt/tests/Modules/internal/OPI_Tests.os";
Для Каждого Библиотека Из СписокБиблиотек Цикл
Раздел = Библиотека.Ключ;
Зависимости = Библиотека.Значение;
НазваниеРаботы = "Testing-" + Раздел;
СписокРабот = СписокРабот + НазваниеРаботы + ", ";
ТекстРаботы = "
|
| " + НазваниеРаботы + ":
| runs-on: ubuntu-latest
| needs: " + Зависимости + "
| steps:
|
| - uses: actions/checkout@v2
| - uses: otymko/setup-onescript@v1.4
| with:
| version: 1.9.0
|
| - name: Получить тестовые данные из кэша
| uses: actions/cache/restore@v3
| with:
| key: " + КлючКэша(Раздел) + "
| path: ./data.json
|
| - name: Установить asserts и 1testrunner
| run: |
| opm install asserts
| opm install 1testrunner
|
| - name: Установить OInt
| run: |
| cd ./src/en/OInt
| opm build
| opm install *.ospx
|
|";
Отбор = Новый Структура("Section", Раздел);
ТестыТекущегоРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
Для Каждого Тест Из ТестыТекущегоРаздела Цикл
Метод = Тест.Method;
Синоним = Тест.Synonym;
ТекстРаботы = ТекстРаботы + "
|
| - name: " + Синоним + "
| if: ${{ cancelled() }} == false
| run: oscript " + Раннер + " -run " + ФайлТестов + " """ + Метод + """";
КонецЦикла;
ДополнитьТекстРаботы(Раздел, ТекстРаботы);
ТекущийДокумент.ДобавитьСтроку(ТекстРаботы);
КонецЦикла;
КонецПроцедуры
Процедура СообщитьНачалоФайлаПроцесса(Знач ИмяРаботы = "Полное тестирование")
ТекущийДокумент.ДобавитьСтроку(
"
|name: OINT | " + ИмяРаботы + " (EN)
|
|# Controls when the workflow will run
|on:
| workflow_dispatch:
|
|jobs:
|
| Decode:
| runs-on: ubuntu-latest
| if: ${{ always() }}
| steps:
|
| - uses: actions/checkout@v4
|
| - name: Расшифровать тестовые данные
| run: gpg --quiet --batch --yes --decrypt --passphrase=""$ENC_JSON"" --output ./data.json ./data.json.gpg
| env:
| ENC_JSON: ${{ secrets.ENC_JSON }}
| - name: Записать тестовые данные в кэш
| uses: actions/cache/save@v3
| with:
| key: test-data
| path: ./data.json
|
| Build:
| runs-on: ubuntu-latest
| steps:
| - uses: actions/checkout@v4
| - uses: otymko/setup-onescript@v1.4
| with:
| version: 1.9.0
|
| - name: Установить asserts и 1testrunner
| run: |
| opm install asserts
| opm install 1testrunner
|
| - name: Установить OInt
| run: |
| cd ./src/en/OInt
| opm build
| opm install *.ospx
|
| - name: Записать артефакт
| uses: actions/upload-artifact@v4
| with:
| name: oint
| path: ./src/en/OInt/*.ospx
|");
КонецПроцедуры
Процедура СообщитьОкончаниеФайлаПроцесса(Знач СписокВлияний = "", Знач СписокБиблиотек)
Если ТипЗнч(СписокВлияний) = Тип("Массив") Тогда
СписокВлияний = СтрСоединить(СписокВлияний, ",");
КонецЕсли;
ТекущийДокумент.ДобавитьСтроку("
| Encode:
| runs-on: ubuntu-latest
| needs: [" + СписокВлияний + "]
| if: ${{ always() }}
| permissions:
| contents: write
|
| steps:
|
| - uses: actions/checkout@v2
|
| - name: Обновить данные в репозитории
| run: git pull https://github.com/Bayselonarrend/OpenIntegrations
|
| - name: Получить тестовые данные из кэша
| uses: actions/cache/restore@v3
| with:
| key: test-data_new
| path: ./data.json
|
| - name: Зашифровать данные обратно
| continue-on-error: false
|
| run: |
| rm -f ./data.json.gpg
| gpg --batch --symmetric --cipher-algo AES256 --passphrase=""$ENC_JSON"" data.json
| rm -f ./data.json
| env:
| ENC_JSON: ${{ secrets.ENC_JSON }}");
Для Каждого Библиотека Из СписокБиблиотек Цикл
ТекущаяБиблиотека = Библиотека.Ключ;
ТекущийДокумент.ДобавитьСтроку("
| - name: Получить логи " + ТекущаяБиблиотека + "
| uses: actions/cache/restore@v3
| with:
| key: logs-" + ТекущаяБиблиотека + "
| path: ./docs/results/" + ТекущаяБиблиотека + "
|");
ТекущийДокумент.ДобавитьСтроку("
|
| - name: Очистка логов " + ТекущаяБиблиотека + "
| run: |
| curl -L \
| -X DELETE \
| -H ""Accept: application/vnd.github+json"" \
| -H ""Authorization: Bearer ${{ secrets.TOKEN }}"" \
| -H ""X-GitHub-Api-Version: 2022-11-28"" \
| ""https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-" + ТекущаяБиблиотека + """
|");
КонецЦикла;
ТекущийДокумент.ДобавитьСтроку("
|
| - name: Записать данные
| uses: stefanzweifel/git-auto-commit-action@v5
| with:
| commit_user_name: Vitaly the Alpaca (bot)
| commit_user_email: vitaly.the.alpaca@gmail.com
| commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
| commit_message: Обновление зашифрованных данных по результатам тестов (workflow)
|");
ТекущийДокумент.ДобавитьСтроку("
|
| Clear-Cache:
| runs-on: ubuntu-latest
| needs: [" + СписокРабот + "Encode]
| if: ${{ always() }}
| steps:
| - name: Очистка основного кэша
| run: |
| curl -L \
| -X DELETE \
| -H ""Accept: application/vnd.github+json"" \
| -H ""Authorization: Bearer ${{ secrets.TOKEN }}"" \
| -H ""X-GitHub-Api-Version: 2022-11-28"" \
| ""https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data""
|
| - name: Очистка кэша Google
| run: |
| curl -L \
| -X DELETE \
| -H ""Accept: application/vnd.github+json"" \
| -H ""Authorization: Bearer ${{ secrets.TOKEN }}"" \
| -H ""X-GitHub-Api-Version: 2022-11-28"" \
| ""https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data_google""
|
| - name: Очистка кэша Twitter
| run: |
| curl -L \
| -X DELETE \
| -H ""Accept: application/vnd.github+json"" \
| -H ""Authorization: Bearer ${{ secrets.TOKEN }}"" \
| -H ""X-GitHub-Api-Version: 2022-11-28"" \
| ""https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data_new""
|");
КонецПроцедуры
Процедура ДополнитьТекстРаботы(Знач Раздел, ТекстРаботы)
ТекстРаботы = ТекстРаботы + "
|
| - name: Записать логи
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: logs-" + Раздел + "
| path: ./docs/results/" + Раздел + "
|";
Если Раздел = "Twitter" Тогда
ТекстРаботы = ТекстРаботы + "
|
| - name: Записать измененные данные
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: test-data_new
| path: ./data.json
|";
ИначеЕсли Раздел = "GoogleWorkspace" Тогда
ТекстРаботы = ТекстРаботы + "
|
| - name: Записать измененные данные
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: test-data_google
| path: ./data.json
|";
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
Функция КлючКэша(Знач Раздел)
СоответствиеОсобыхРазделов = Новый Соответствие();
СоответствиеОсобыхРазделов.Вставить("GoogleDrive" , "test-data_google");
СоответствиеОсобыхРазделов.Вставить("GoogleCalendar", "test-data_google");
СоответствиеОсобыхРазделов.Вставить("GoogleSheets" , "test-data_google");
Ключ = СоответствиеОсобыхРазделов.Получить(Раздел);
Если Не ЗначениеЗаполнено(Ключ) Тогда
Ключ = "test-data";
КонецЕсли;
Возврат Ключ;
КонецФункции

252
.github/workflows/os/opi_translate.os vendored Normal file
View File

@@ -0,0 +1,252 @@
Перем ТаблицаСловаря;
Перем СоответствиеИсключаемых;
Процедура ПриСозданииОбъекта()
Сообщить("Начало создания локализации...");
КаталогСловарей = "./service/dictionaries";
ФайлыСловарей = НайтиФайлы(КаталогСловарей, "*.json");
СоответствиеИсключаемых = Новый Соответствие();
СоответствиеИсключаемых.Вставить("packagedef", Истина);
ТаблицаСловаря = Новый ТаблицаЗначений();
ТаблицаСловаря.Колонки.Добавить("Ключ");
ТаблицаСловаря.Колонки.Добавить("Значение");
ТаблицаСловаря.Колонки.Добавить("Длина");
ТаблицаСловаря.Колонки.Добавить("ИмяМодуля");
Для Каждого Словарь Из ФайлыСловарей Цикл
Если СтрНайти(Словарь.ИмяБезРасширения, "_") <> 0 Тогда
Продолжить;
КонецЕсли;
СоздатьЛокализацию(Словарь);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьЛокализацию(Знач Словарь)
ПутьКСловарю = Словарь.ПолноеИмя;
Язык = Словарь.ИмяБезРасширения;
Сообщить("Создание локализации " + Язык);
ПолучитьТаблицуСловаря(ПутьКСловарю);
КаталогИсточник = Новый Файл("./src/ru");
КаталогПриемник = Новый Файл("./src/" + Язык + "");
Если КаталогПриемник.Существует() Тогда
УдалитьФайлы(КаталогПриемник.ПолноеИмя);
КонецЕсли;
Сообщить("Копирование Начало");
СкопироватьФайлы(КаталогИсточник.ПолноеИмя, КаталогПриемник.ПолноеИмя);
Сообщить("Копирование Окончание");
Сообщить("Поиск модулей");
ФайлыМодулей = НайтиФайлы("./src/" + Язык + "/", "*", Истина);
Сообщить("Найдено модулей: " + Строка(ФайлыМодулей.Количество()));
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
Если ФайлМодуля.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Сообщить("Перевод модуля " + ФайлМодуля.Имя);
ПеревестиМодуль(ФайлМодуля.ПолноеИмя);
КонецЦикла;
ВсеФайлыЛокализации = НайтиФайлы("./src/" + Язык, "*", Истина);
ОтборИменМодулей = Новый Структура("ИмяМодуля", Истина);
СтрокиИмен = ТаблицаСловаря.НайтиСтроки(ОтборИменМодулей);
УдаляемыеКаталоги = Новый Массив;
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
Если Не ФайлЛокализации.ЭтоКаталог() Или СоответствиеИсключаемых[ФайлЛокализации.Имя] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
НовыйПуть = ТекущийПуть;
Для Каждого Имя Из СтрокиИмен Цикл
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
КонецЦикла;
ФайлНовогоПути = Новый Файл(НовыйПуть);
Если Не ФайлНовогоПути.Существует() Тогда
УдаляемыеКаталоги.Добавить(ТекущийПуть);
СоздатьКаталог(НовыйПуть);
КонецЕсли;
КонецЦикла;
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
Если ФайлЛокализации.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
НовыйПуть = ТекущийПуть;
Для Каждого Имя Из СтрокиИмен Цикл
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
КонецЦикла;
ФайлНовогоПути = Новый Файл(НовыйПуть);
Если Не ФайлНовогоПути.Существует() Тогда
ПереместитьФайл(ТекущийПуть, НовыйПуть);
КонецЕсли;
КонецЦикла;
Для Каждого Каталог Из УдаляемыеКаталоги Цикл
УдалитьФайлы(Каталог);
КонецЦикла;
КонецПроцедуры
Процедура ПеревестиМодуль(ПутьКМодулю)
Если СтрНайти(ПутьКМодулю, "packagedef") <> 0 Тогда
Возврат;
КонецЕсли;
ДокументМодуля = Новый ТекстовыйДокумент();
ДокументМодуля.Прочитать(ПутьКМодулю, "UTF-8");
Для Н = 1 По ДокументМодуля.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ДокументМодуля.ПолучитьСтроку(Н));
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
Продолжить;
КонецЕсли;
Пока СтрНайти(ТекущаяСтрока, " ") <> 0 Цикл
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " ", " ");
КонецЦикла;
ВыводимаяСтрока = СтрЗаменить(ДокументМодуля.ПолучитьСтроку(Н), СокрЛП(ДокументМодуля.ПолучитьСтроку(Н)), ТекущаяСтрока);
ДокументМодуля.ЗаменитьСтроку(Н, ВыводимаяСтрока);
КонецЦикла;
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
Для Каждого Элемент Из ТаблицаСловаря Цикл
ТекущееЗначение = Элемент.Значение;
Пока СтрДлина(ТекущееЗначение) < Элемент.Длина Цикл
ТекущееЗначение = ТекущееЗначение + " ";
КонецЦикла;
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
КонецЦикла;
ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю);
ДокументМодуля.УстановитьТекст(ТекстМодуля);
ДокументМодуля.Записать(ПутьКМодулю);
КонецПроцедуры
Процедура ПолучитьТаблицуСловаря(ПутьКСловарю)
Сообщить("Чтение словаря " + ПутьКСловарю);
ТаблицаСловаря.Очистить();
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
ДанныеСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Для Каждого Элемент Из ДанныеСловаря Цикл
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = Элемент.Ключ;
НоваяСтрокаСловаря.Значение = Элемент.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(Элемент.Ключ);
НоваяСтрокаСловаря.ИмяМодуля = СтрНайти(Элемент.Ключ, "OPI_") <> 0;
КонецЦикла;
ТаблицаСловаря.Сортировать("Длина УБЫВ");
ПутьКСловарюКлючевыхСлов = "./service/dictionaries/en_post.json";
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарюКлючевыхСлов);
СоответствиеКС = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Для Каждого КлючевоеСлово Из СоответствиеКС Цикл
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
НоваяСтрокаСловаря.ИмяМодуля = Ложь;
КонецЦикла;
КонецПроцедуры
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
Сообщить("Каталог источник: " + КаталогИсточник);
Сообщить("Каталог приемника: " + КаталогПриемник);
Сообщить("Создание каталога " + КаталогПриемник);
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
Если СтрНайти(Файл.ПолноеИмя, "cli") <> 0 Тогда
Продолжить;
КонецЕсли;
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если Файл.ЭтоКаталог() Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Сообщить("Создание каталога " + ПолноеИмяПриемник);
Иначе
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
Сообщить("Копирование файла" + ПолноеИмяИсточник + " в " + ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю)
СоответствиеОшибок = Новый Соответствие();
СоответствиеОшибок.Вставить("ConcatBinaryData" , "ConcatenateBinaryData");
СоответствиеОшибок.Вставить("GetTestList" , "ПолучитьСписокТестов");
СоответствиеОшибок.Вставить("Exists" , "Exist");
СоответствиеОшибок.Вставить("SetBodyFromBinaryData", "SetBodyFromBinary");
СоответствиеОшибок.Вставить("GetBodyAsBinaryData" , "ПолучитьТелоКакДвоичныеДанные");
СоответствиеОшибок.Вставить("FileCopy" , "CopyFile");
ФайлМодуля = Новый Файл(ПутьКМодулю);
Если СтрНайти(ФайлМодуля.Имя, ".os") <> 0 Тогда
Для Каждого Ошибка Из СоответствиеОшибок Цикл
ТекстМодуля = СтрЗаменить(ТекстМодуля, Ошибка.Ключ, Ошибка.Значение);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//ПриСозданииОбъекта();

View File

@@ -1,101 +1,203 @@
Репозиторий = "https://github.com/Bayselonarrend/OpenIntegrations";
Версия = "1.9.0";
Режим = "CONFIG";
Перем Репозиторий;
Перем Версия;
Перем Режим;
Перем Файл1С;
Перем ПутьКРепозиторию;
Перем Сервер;
Перем ПутьВыгрузки;
//Локальные данные
Файл1С = """C:\Program Files\1cv8\8.3.18.1208\bin\1cv8.exe""";
ПутьКРепозиторию = "C:\Repos\OPI";
Сервер = "AIONIOTISCORE";
База = "OpenIntegrations";
ПутьВыгрузки = "G:\Мой диск\Проекты\ОПИ\Релизы\" + Версия + "\";
//----------------
Процедура НачалоРаботы()
Репозиторий = "https://github.com/Bayselonarrend/OpenIntegrations";
Версия = "1.10.0";
Режим = "CONFIG";
ПутьКEDT = ПутьКРепозиторию + "\OPI";
ПутьOS = ПутьКРепозиторию + "\OInt";
ПутьCLI = ПутьКРепозиторию + "\cli\core\Classes\Приложение.os";
ПутьISS = ПутьКРепозиторию + "\.github\workflows\main.iss";
//Локальные данные
Файл1С = """C:\Program Files\1cv8\8.3.18.1208\bin\1cv8.exe""";
ПутьКРепозиторию = "C:\Repos\OPI";
Сервер = "AIONIOTISCORE";
ПутьВыгрузки = "G:\Мой диск\Проекты\ОПИ\Релизы\" + Версия + "\";
//----------------
КаталогВыгрузки = Новый Файл(ПутьВыгрузки);
Если КаталогВыгрузки.Существует() Тогда
УдалитьФайлы(ПутьВыгрузки);
КонецЕсли;
МассивЛокализаций = Новый Массив();
СоздатьКаталог(ПутьВыгрузки);
Приостановить(2000);
СтруктураРус = Новый Структура();
СтруктураРус.Вставить("База" , "OpenIntegrations");
СтруктураРус.Вставить("ПутьКEDT", ПутьКРепозиторию + "\src\ru\OPI");
СтруктураРус.Вставить("ПутьOS" , ПутьКРепозиторию + "\src\ru\OInt");
СтруктураРус.Вставить("ПутьCLI" , ПутьКРепозиторию + "\src\ru\cli\core\Classes\Приложение.os");
СтруктураРус.Вставить("ПутьISS" , ПутьКРепозиторию + "\service\iss\ru.iss");
СтруктураРус.Вставить("Префикс" , "ru");
Основа = Файл1С + " " + Режим + " /S " + Сервер + "\" + База + " ";
СтруктураАнг = Новый Структура();
СтруктураАнг.Вставить("База" , "OpenIntegrations_Eng");
СтруктураАнг.Вставить("ПутьКEDT", ПутьКРепозиторию + "\src\en\OPI");
СтруктураАнг.Вставить("ПутьOS" , ПутьКРепозиторию + "\src\en\OInt");
СтруктураАнг.Вставить("ПутьCLI" , ПутьКРепозиторию + "\src\en\cli\core\Classes\Приложение.os");
СтруктураАнг.Вставить("ПутьISS" , ПутьКРепозиторию + "\service\iss\en.iss");
СтруктураАнг.Вставить("Префикс" , "en");
//CFE
ВыгрузкаВФайл = Основа + "/DumpCfg """ + ПутьВыгрузки + "OpenIntegrations_" + Версия + ".cfe" + """ -Extension OpenIntegrations";
ЗапуститьПриложение(ВыгрузкаВФайл, , Истина);
МассивЛокализаций.Добавить(СтруктураРус);
МассивЛокализаций.Добавить(СтруктураАнг);
// XML
ПапкаXML = ПутьВыгрузки + "XML";
КаталогXML = Новый Файл(ПапкаXML);
Если Не КаталогXML.Существует() Тогда
СоздатьКаталог(ПапкаXML);
КонецЕсли;
ВыгрузкаВXML = Основа + "/DumpConfigToFiles """ + ПапкаXML + """ -Extension OpenIntegrations";
ЗапуститьПриложение(ВыгрузкаВXML, , Истина);
ПутьZIP = ПутьВыгрузки + "XML.zip";
ZipXML = Новый ЗаписьZipФайла(ПутьZIP);
ZipXML.Добавить(ПапкаXML + "\*.*" , РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ZipXML.Записать();
ПутьZIP = ПутьВыгрузки + "EDT.zip";
ZipEDT = Новый ЗаписьZipФайла(ПутьZIP);
УдалитьФайлы(ПапкаXML);
//EDT
ZipEDT.Добавить(ПутьКEDT + "\*.*" , РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ZipEDT.Записать();
//OSPX
КонечныйПутьOSPX = ПутьВыгрузки + "oint-" + Версия + ".ospx";
СборкаOS = "opm b -o ""C:/"" """ + ПутьOS + """";
ЗапуститьПриложение(СборкаOS, , Истина);
ПереместитьФайл("C:\oint-" + Версия + ".ospx", КонечныйПутьOSPX);
Приостановить(1000);
ЗапуститьПриложение("opm install -f """ + КонечныйПутьOSPX + """", , Истина);
Приостановить(1000);
//EXE
СборкаEXE = "oscript -make """ + ПутьCLI + """ """ + ПутьВыгрузки + "oint.exe""";
ЗапуститьПриложение(СборкаEXE, , Истина);
//Setup
ТекстISS = Новый ТекстовыйДокумент();
ТекстISS.Прочитать(ПутьISS);
Для Н = 1 По ТекстISS.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекстISS.ПолучитьСтроку(Н));
Если СтрНайти(ТекущаяСтрока, "#define MyAppVersion") Тогда
ТекстISS.ЗаменитьСтроку(Н, "#define MyAppVersion """ + Версия + """");
Прервать;
КаталогВыгрузки = Новый Файл(ПутьВыгрузки);
Если КаталогВыгрузки.Существует() Тогда
УдалитьФайлы(ПутьВыгрузки);
КонецЕсли;
КонецЦикла;
СоздатьКаталог(ПутьВыгрузки);
Приостановить(2000);
ТекстISS.Записать(ПутьISS);
Для Каждого Локализация Из МассивЛокализаций Цикл
СборкаSetup = """C:\Program Files (x86)\Inno Setup 6\Compil32.exe"" /cc """ + ПутьISS + """";
ЗапуститьПриложение(СборкаSetup, , Истина);
СоздатьXML(Локализация);
СоздатьCFE(Локализация);
СоздатьEDT(Локализация);
СоздатьOSPX(Локализация);
СоздатьEXE(Локализация);
СоздатьУстановщик(Локализация);
//Draft
КонецЦикла;
ФайлыРелиза = НайтиФайлы(ПутьВыгрузки, "*", Истина);
//Draft
Для Каждого ФайлРелиза Из ФайлыРелиза Цикл
ЗапуститьПриложение("""C:\Program Files\GitHub CLI\gh.exe"" release delete-asset draft --yes --repo " + Репозиторий + " """ + ФайлРелиза.Имя + """", , Истина);
ЗапуститьПриложение("""C:\Program Files\GitHub CLI\gh.exe"" release upload draft --repo " + Репозиторий + " """ + ФайлРелиза.ПолноеИмя + """", , Истина);
КонецЦикла;
ФайлыРелиза = НайтиФайлы(ПутьВыгрузки, "*", Истина);
Для Каждого ФайлРелиза Из ФайлыРелиза Цикл
ЗапуститьПриложение("""C:\Program Files\GitHub CLI\gh.exe"" release delete-asset draft --yes --repo " + Репозиторий + " """ + ФайлРелиза.Имя + """", , Истина);
ЗапуститьПриложение("""C:\Program Files\GitHub CLI\gh.exe"" release upload draft --repo " + Репозиторий + " """ + ФайлРелиза.ПолноеИмя + """", , Истина);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьCFE(Данные)
База = Данные["База"];
Префикс = Данные["Префикс"];
Основа = Файл1С + " " + Режим + " /S " + Сервер + "\" + База + " ";
//CFE
ВыгрузкаВФайл = Основа
+ "/DumpCfg """
+ ПутьВыгрузки
+ "OpenIntegrations_"
+ Версия
+ "_"
+ Префикс
+ ".cfe"
+ """ -Extension OpenIntegrations";
ЗапуститьПриложение(ВыгрузкаВФайл, , Истина);
КонецПроцедуры
Процедура СоздатьXML(Данные)
Префикс = вРег(Данные["Префикс"]);
База = Данные["База"];
Основа = Файл1С + " " + Режим + " /S " + Сервер + "\" + База + " ";
// XML
ПапкаXML = ПутьВыгрузки + "XML_" + Префикс;
КаталогXML = Новый Файл(ПапкаXML);
Если Не КаталогXML.Существует() Тогда
СоздатьКаталог(ПапкаXML);
КонецЕсли;
ВыгрузкаВXML = Основа + "/DumpConfigToFiles """ + ПапкаXML + """ -Extension OpenIntegrations";
ЗапуститьПриложение(ВыгрузкаВXML, , Истина);
ПутьZIP = ПутьВыгрузки + "XML_" + Префикс + ".zip";
ZipXML = Новый ЗаписьZipФайла(ПутьZIP);
ZipXML.Добавить(ПапкаXML
+ "\*.*" , РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ZipXML.Записать();
УдалитьФайлы(ПапкаXML);
КонецПроцедуры
Процедура СоздатьEDT(Данные)
Префикс = вРег(Данные["Префикс"]);
ПутьКEDT = Данные["ПутьКEDT"];
ПутьZIP = ПутьВыгрузки + "EDT_" + Префикс + ".zip";
ZipEDT = Новый ЗаписьZipФайла(ПутьZIP);
//EDT
ZipEDT.Добавить(ПутьКEDT + "\*.*"
, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ZipEDT.Записать();
КонецПроцедуры
Процедура СоздатьOSPX(Данные)
ПутьOS = Данные["ПутьOS"];
Префикс = Данные["Префикс"];
СтандартноеИмяOSPX = "oint-" + Версия + ".ospx";
ИмяOSPX = "oint-" + Версия + "_" + Префикс + ".ospx";
//OSPX
КонечныйПутьOSPX = ПутьВыгрузки + ИмяOSPX;
СборкаOS = "opm b -o ""C:/"" """ + ПутьOS + """";
ЗапуститьПриложение(СборкаOS, , Истина);
ПереместитьФайл("C:\" + СтандартноеИмяOSPX, КонечныйПутьOSPX);
Приостановить(1000);
ЗапуститьПриложение("opm install -f """ + КонечныйПутьOSPX + """", , Истина);
Приостановить(1000);
КонецПроцедуры
Процедура СоздатьEXE(Данные)
ПутьCLI = Данные["ПутьCLI"];
Префикс = Данные["Префикс"];
//EXE
СборкаEXE = "oscript -make """ + ПутьCLI + """ """ + ПутьВыгрузки + "oint.exe""";
ЗапуститьПриложение(СборкаEXE, , Истина);
КонецПроцедуры
Процедура СоздатьУстановщик(Данные)
ПутьISS = Данные["ПутьISS"];
ПутьCLI = Данные["ПутьCLI"];
Префикс = Данные["Префикс"];
//Setup
ТекстISS = Новый ТекстовыйДокумент();
ТекстISS.Прочитать(ПутьISS);
Для Н = 1 По ТекстISS.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекстISS.ПолучитьСтроку(Н));
Если СтрНайти(ТекущаяСтрока, "#define MyAppVersion") Тогда
ТекстISS.ЗаменитьСтроку(Н, "#define MyAppVersion """ + Версия + """");
Прервать;
КонецЕсли;
КонецЦикла;
ТекстISS.Записать(ПутьISS);
СборкаSetup = """C:\Program Files (x86)\Inno Setup 6\Compil32.exe"" /cc """ + ПутьISS + """";
ЗапуститьПриложение(СборкаSetup, , Истина);
ПереместитьФайл(ПутьВыгрузки + "oint.exe", ПутьВыгрузки + "oint_" + Префикс + ".exe")
КонецПроцедуры
НачалоРаботы();

View File

@@ -12,19 +12,17 @@ sidebar_position: @Счетчик
|-|-|-|-|
@ТаблицаПараметров
Вовзращаемое значение: @ВозвращаемоеЗначение
Возвращаемое значение: @ВозвращаемоеЗначение
```bsl title="Пример кода"
Ответ = @Вызов1С //Соответствие
Ответ = OPI_Инструменты.JSONСтрокой(Ответ); //JSON строка
@Вызов1С
```
```sh title="Пример команд CLI"
```sh title="Пример команды CLI"
@ВызовCLI
@ВызовCLI
```

View File

@@ -21,7 +21,7 @@ jobs:
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
LC_ALL: "ru_RU.UTF-8"
with:
projectBaseDir: ${{ github.workspace }}/OPI
projectBaseDir: ${{ github.workspace }}/src/ru/OPI
args:
-Dsonar.projectKey=OpenIntegrations
-Dsonar.sourceEncoding=UTF-8
@@ -35,7 +35,7 @@ jobs:
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
LC_ALL: "ru_RU.UTF-8"
with:
projectBaseDir: ${{ github.workspace }}/OInt
projectBaseDir: ${{ github.workspace }}/src/ru/OInt
args:
-Dsonar.projectKey=OInt
-Dsonar.sourceEncoding=UTF-8

2
.gitignore vendored
View File

@@ -7,6 +7,6 @@ OInt/coverage/stat.json
data.json
*.exe
test.os
/docs
/test_logs
Поток
/docs/docusaurus/node_modules

103
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,103 @@
# Добро подаловать в правила участия проекта Открытого пакета интеграций!
В этом документе вы можете найти информацию о том, как правильно реализовать и оформить свой вклад в данный проект. Мы всегда рады новым участникам, так что если у вас есть идея, пожелание или, тем более, реализация какой-нибудь классной штуки, которая поможет проекту стать лучше, то обязательно поделитесь ей с нами.
Однако, всем нам будет гораздо проще взаимодействовать друг с другом, если мы заранее оговорим правила и формы данного взаимодействия. И если в случае с Issues неправильная форма может привести разве что к лишним уточняющим вопросам, то незнание структуры и соглашений в работе с кодом с большой долей вероятности приведет к переделкам и отклоненным PR.
Так что, если вы - потенциальный участник, то не стоит относится к этому документу легкомысленно. Несколько минут, потраченные на его прочтение, помогут всем нам сэкономить самый важный ресурс человечества - время.
## Как принять участие в проекте?
Если вы решили стать постоянным участником или даже просто разово помочь проекту ОПИ, то сделать это можно двумя способами:
- Написать Issue о найденом баге или возникшем пожелании
- Реализовать новый или улучшить существующий функционал проекта
Об этих двух вариантах и пойдет речь далее
## Создание Issue
Самый простой способ поучастовать в развитии проекта - написать в [Issues](https://github.com/Bayselonarrend/OpenIntegrations/issues) данного репозитория.
Писать туда можно о чем угодно, но в первую очередь приветствуются сообщения об ошибках, непредвиденном поведении программы и неоптимальностях в её работе. Если вы заметили нечто подобное в процессе работы с ОПИ или даже если у вас есть просто подозрения на этот счет - обязательно напишите. Также приветствуются и предложения о новом или переработке старого функционала: не все подобные предложения принимаются, но точно все обусуждаются
В зависимости от вида информации, которой вы хотите поделиться, в Issues есть разные шаблоны сообщений
![image](https://github.com/Bayselonarrend/OpenIntegrations/assets/105596284/b1be9484-d7b3-4e3b-b678-f369f4e8b98f)
Следование данным шаблонам поможет не забыть указать все нюансы, которые могут быть важны при решении того или иного вопроса, а также, как уже было сказано ранее, избежать лишних распросов с нашей стороны. Ничего особенно плохого в вопросах нет, но несовпадение во времени активности участников диалога по созданному Issue может привести к затягиванию решения проблемы и просрочке дедлайна следующего релиза
## Запросы на слияние
Начнем с простого - запросы на слияние. В создании PR самих по себе нет никаких особо строгих правил: форк -> изменения -> запрос. Все PR рассматриваются и, если отклоняются, то как правило только с комментарием о недоработках.
ОПИ - проект довольно строгий, как буде рассмотрено далее. Так что будет очень хорошо, если запросу на слияние будет предшествовать Issue, где мы вместе обсудим необходимость и способ реализации того или иного нововведения. Теперь перейдем к сложному - к коду
## Работа с кодом
Открытый пакет интеграций - проект с огромным количеством нюансов и соглашений. Вносить свой вклад новичку в него непросто, но этому есть свои причны, о которых сейчас и пойдет речь
Во-первых, ОПИ распространяется в 3-х версиях:
- 1С (OPI)
- OneScript (OInt)
- CLI (OInt CLI)
При этом, напрямую разрабатывается всего одна версия - версия для 1С, и только в эту версию вносятся изменения. В остальные две версии изменения "руками" никогда не вносятся - они создаются автоматически в паплайне на Github Actions. Такой подход позволяет всегда иметь все 3 версии в симметричном и актуальном состоянии, но и рождает некоторые правила и соглашения, без которых ничего работать не будет
> Тут стоит сразу оговорится: ОПИ, как вы уже наверняка знаете, это инструменты для работы с различными API. Так вот создание новых API, т.е. полностью новых модулей для работы с новыми сервисами, в рамках участия в проекте, недопустимо. Не создавайте их - они не будут приняты. <br/><br/>
> Далее из текста будет понятно почему, но если вкратце: автоматизированное тестирование методов для работы с публичными API онлайн-сервисов требует данных и знаний об их работе, чего у меня, как мейнтейнера, не будет, если я не буду хотя бы в теме основы реализованного модуля. Если у вас есть идея создания модуля для нового API - напишите Issues, а там мы вместе подумаем и заложим основу, чтобы я потом мог нормально гонять тесты и понимал, чем этот сервис и этот модуль дышат <br/><br/>
> Проще всего принимаются PR с багфиксами существующих методов - для них большинство описываемых далее соглашений не играют роли, чуть сложнее - новые методы. К последним применимо все описанное далее
Автоматизация выпуска версий основана на двух вещах
- Документирующие комментарии
- Тесты
Документирующие коментарии - важнейшая вещь. На них основаны
- Формирование состава команд CLI версии
- Справка CLI версии
- Автоматическое создание документации для [openintegrations.dev](https://openintegrations.dev)
Рассмотрим типичный докуменитрующий комментарий к одному из методов:
```bsl
// Отправить текстовое сообщение
// Отправляет текстовое сообщение в чат или канал
//
// Параметры:
// Токен - Строка - Токен бота - token
// IDЧата - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat
// Текст - Строка - Текст сообщения - text
// Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок - keyboard - JSON клавиатуры или путь к .json
// Разметка - Строка - Вид обработки текста (HTML, Markdown, MarkdownV2) - parsemode
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
Функция ОтправитьТекстовоеСообщение(Знач Токен
, Знач IDЧата
, Знач Текст
, Знач Клавиатура = ""
, Знач Разметка = "Markdown") Экспорт
...
```
- В первой строке комментария определяется краткое описание функции. Оно используется как заголовок страницы онлайн-документации, в транслитированном виде как её URL и как описание команды в CLI версии
- Во второй строке определяется развернутое описание для онлайн-документации
- Далее идут описания параметров функции, каждое из которых состоит из 4 частей: имени параметра, типов данных, краткого описания и имени опции для CLI версии
- Завершается комментарий типом и описание возвращаемого значения
В целом - это стандартный формат комментария, который формируется в EDT через ПКМ -> Источник -> Генерировать комментарии к методу, за тем лишь исключением, что верхняя часть комментария всегда из двух строк, а к описанию параметров добавляется четвертая секция с именем CLI опции
![image](https://github.com/Bayselonarrend/OpenIntegrations/assets/105596284/318ccd45-88f1-4f09-93a5-00145290d0af)
В документирующих комментариях не допускается:
- Описание параметров длиннее 120 символов
- Описание параметра с переносом на новую строку - один параметр = одна строка
- Использование спецсимволов в именах CLI опций
- Использование слишком длинных имено CLI опции (в идеале - 3-7 символов)
** Продолжение в процессе работы **

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
Media/Dropbox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

BIN
Media/OpenIntegrations.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
Media/cli-light.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
Media/demo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 143 KiB

BIN
Media/docs_eng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
Media/eng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
Media/heartnstar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

BIN
Media/icons.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
Media/main-light.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
Media/pins/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
Media/pins/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
Media/pins/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
Media/pins/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
Media/pins/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
Media/pins/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
Media/pins/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
Media/pins/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 220 KiB

BIN
Media/text.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

View File

@@ -1,294 +0,0 @@
// Расположение OS: ./OInt/core/Modules/OPI_Dropbox.os
// Библиотека: Dropbox
// Команда CLI: dropbox
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript
#Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область Авторизация
// Получить ссылку авторизации
// Генерирует ссылку авторизации для перехода в браузере
//
// Параметры:
// КлючПриложения - Строка - Ключ приложения - appkey
//
// Возвращаемое значение:
// Строка - URL для перехода в браузере
Функция ПолучитьСсылкуАвторизации(Знач КлючПриложения) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючПриложения);
Возврат "https://www.dropbox.com/oauth2/authorize?client_id="
+ КлючПриложения
+ "&response_type=code&token_access_type=offline";
КонецФункции
// Получить токен
// Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации
//
// Параметры:
// КлючПриложения - Строка - Ключ приложения - appkey
// СекретПриложения - Строка - Секрет приложения - appsecret
// Код - Строка - Код со страницы авторизации - code
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ПолучитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач Код) Экспорт
URL = "https://api.dropbox.com/oauth2/token";
ТипДанных = "application/x-www-form-urlencoded; charset=utf-8";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("code" , Код , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("grant_type", "authorization_code", "Строка", Параметры);
СтруктураURL = OPI_Инструменты.РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес, , ТипДанных);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, КлючПриложения, СекретПриложения);
СтрокаПараметров = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
Запрос.УстановитьТелоИзСтроки(Данные);
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ;
КонецФункции
// Обновить токен
// Получает новый токен на основе рефреш токена
//
// Параметры:
// КлючПриложения - Строка - Ключ приложения - appkey
// СекретПриложения - Строка - Секрет приложения - appsecret
// РефрешТокен - Строка - Рефреш токен - refresh
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ОбновитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач РефрешТокен) Экспорт
URL = "https://api.dropbox.com/oauth2/token";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("refresh_token", РефрешТокен , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("grant_type" , "refresh_token" , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_id" , КлючПриложения , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_secret", СекретПриложения, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСФайлами
// Загрузить файл
// Загружает файл на облачный диск
//
// Параметры:
// Токен - Строка - Токен - token
// Файл - Строка, ДвоичныеДанные - Данные файл для загрузки - file
// Путь - Строка - Путь сохранения на Dropbox - path
// Перезаписывать - Булево - Перезаписывать файл при конфликте путей - overwrite
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Режим = ?(Перезаписывать, "overwrite", "add");
Размер = Файл.Размер();
Граница = 100000000;
Если Размер > Граница Тогда
Ответ = ЗагрузитьБольшойФайл(Токен, Файл, Путь, Режим);
Иначе
Ответ = ЗагрузитьМалыйФайл(Токен, Файл, Путь, Режим);
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция УдалитьФайл(Знач Токен, Знач Путь) Экспорт
URL = "https://api.dropboxapi.com/2/files/delete_v2";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Параметры);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовкиЗапроса(Знач Токен, Знач Параметры = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
Если ЗначениеЗаполнено(Параметры) Тогда
JSON = OPI_Инструменты.JSONСтрокой(Параметры, "Нет");
JSON = СтрЗаменить(JSON, Символы.ВК + Символы.ПС, "");
Заголовки.Вставить("Dropbox-API-Arg", JSON);
КонецЕсли;
Возврат Заголовки;
КонецФункции
Функция ЗагрузитьБольшойФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
URL = "https://content.dropboxapi.com/2/files/upload_session/append_v2";
РазмерЧасти = 100000000;
ТекущаяПозиция = 0;
ПрочитаноБайт = 0;
ОбщийРазмер = Файл.Размер();
Сессия = ОткрытьСессию(Токен);
Пока ПрочитаноБайт < ОбщийРазмер Цикл
Отступ = ТекущаяПозиция;
Курсор = Новый Структура("offset,session_id", Отступ, Сессия);
Параметры = Новый Структура("cursor", Курсор);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
ЧтениеДанных = Новый ЧтениеДанных(Файл);
ПрочитаноБайт = ЧтениеДанных.Пропустить(ТекущаяПозиция);
Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
РазмерТекущих = ТекущиеДанные.Размер();
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих;
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
Прервать;
КонецЕсли;
Ответ = OPI_Инструменты.PostBinary(URL, ТекущиеДанные, Заголовки);
ТекущаяПозиция = СледующаяПозиция;
КБайт = 1024;
МБайт = КБайт * КБайт;
Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
ВыполнитьСборкуМусора();
ОсвободитьОбъект(ТекущиеДанные);
КонецЦикла;
Ответ = ЗакрытьСессию(Токен, Путь, Режим, ОбщийРазмер, Сессия);
Возврат Ответ;
КонецФункции
Функция ЗагрузитьМалыйФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
URL = "https://content.dropboxapi.com/2/files/upload";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("autorename" , Ложь , "Булево", Параметры);
OPI_Инструменты.ДобавитьПоле("mode" , Режим, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("mute" , Ложь , "Булево", Параметры);
OPI_Инструменты.ДобавитьПоле("path" , Путь , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("strict_conflict", Ложь , "Булево", Параметры);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
Ответ = OPI_Инструменты.PostBinary(URL, Файл, Заголовки);
Возврат Ответ;
КонецФункции
Функция ОткрытьСессию(Знач Токен)
SessionId = "session_id";
URL = "https://content.dropboxapi.com/2/files/upload_session/start";
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
Возврат Ответ[SessionId];
КонецФункции
Функция ЗакрытьСессию(Знач Токен, Знач Путь, Знач Режим, Знач ОбщийРазмер, Знач Сессия)
URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
Коммит = Новый Структура();
OPI_Инструменты.ДобавитьПоле("mode", Режим, "Строка", Коммит);
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Коммит);
Курсор = Новый Структура("offset,session_id", ОбщийРазмер, Сессия);
Параметры = Новый Структура("commit,cursor", Коммит, Курсор);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти

View File

@@ -1,294 +0,0 @@
// Расположение OS: ./OInt/core/Modules/OPI_Dropbox.os
// Библиотека: Dropbox
// Команда CLI: dropbox
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область Авторизация
// Получить ссылку авторизации
// Генерирует ссылку авторизации для перехода в браузере
//
// Параметры:
// КлючПриложения - Строка - Ключ приложения - appkey
//
// Возвращаемое значение:
// Строка - URL для перехода в браузере
Функция ПолучитьСсылкуАвторизации(Знач КлючПриложения) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючПриложения);
Возврат "https://www.dropbox.com/oauth2/authorize?client_id="
+ КлючПриложения
+ "&response_type=code&token_access_type=offline";
КонецФункции
// Получить токен
// Полеучает токен на основе кода со страницы ПолучитьСсылкуАвторизации
//
// Параметры:
// КлючПриложения - Строка - Ключ приложения - appkey
// СекретПриложения - Строка - Секрет приложения - appsecret
// Код - Строка - Код со страницы авторизации - code
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ПолучитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач Код) Экспорт
URL = "https://api.dropbox.com/oauth2/token";
ТипДанных = "application/x-www-form-urlencoded; charset=utf-8";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("code" , Код , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("grant_type", "authorization_code", "Строка", Параметры);
СтруктураURL = OPI_Инструменты.РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес, , ТипДанных);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, КлючПриложения, СекретПриложения);
СтрокаПараметров = OPI_Инструменты.ПараметрыЗапросаВСтроку(Параметры);
Данные = Прав(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1);
Запрос.УстановитьТелоИзСтроки(Данные);
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
OPI_Инструменты.ОбработатьОтвет(Ответ);
Возврат Ответ;
КонецФункции
// Обновить токен
// Получает новый токен на основе рефреш токена
//
// Параметры:
// КлючПриложения - Строка - Ключ приложения - appkey
// СекретПриложения - Строка - Секрет приложения - appsecret
// РефрешТокен - Строка - Рефреш токен - refresh
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ОбновитьТокен(Знач КлючПриложения, Знач СекретПриложения, Знач РефрешТокен) Экспорт
URL = "https://api.dropbox.com/oauth2/token";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("refresh_token", РефрешТокен , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("grant_type" , "refresh_token" , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_id" , КлючПриложения , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_secret", СекретПриложения, "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСФайлами
// Загрузить файл
// Загружает файл на облачный диск
//
// Параметры:
// Токен - Строка - Токен - token
// Файл - Строка, ДвоичныеДанные - Данные файл для загрузки - file
// Путь - Строка - Путь сохранения на Dropbox - path
// Перезаписывать - Булево - Перезаписывать файл при конфликте путей - overwrite
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач Путь, Знач Перезаписывать = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
OPI_ПреобразованиеТипов.ПолучитьБулево(Перезаписывать);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Режим = ?(Перезаписывать, "overwrite", "add");
Размер = Файл.Размер();
Граница = 100000000;
Если Размер > Граница Тогда
Ответ = ЗагрузитьБольшойФайл(Токен, Файл, Путь, Режим);
Иначе
Ответ = ЗагрузитьМалыйФайл(Токен, Файл, Путь, Режим);
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция УдалитьФайл(Знач Токен, Знач Путь) Экспорт
URL = "https://api.dropboxapi.com/2/files/delete_v2";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Параметры);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовкиЗапроса(Знач Токен, Знач Параметры = "")
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization" , "Bearer " + Токен);
Если ЗначениеЗаполнено(Параметры) Тогда
JSON = OPI_Инструменты.JSONСтрокой(Параметры, "Нет");
JSON = СтрЗаменить(JSON, Символы.ВК + Символы.ПС, "");
Заголовки.Вставить("Dropbox-API-Arg", JSON);
КонецЕсли;
Возврат Заголовки;
КонецФункции
Функция ЗагрузитьБольшойФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
URL = "https://content.dropboxapi.com/2/files/upload_session/append_v2";
РазмерЧасти = 100000000;
ТекущаяПозиция = 0;
ПрочитаноБайт = 0;
ОбщийРазмер = Файл.Размер();
Сессия = ОткрытьСессию(Токен);
Пока ПрочитаноБайт < ОбщийРазмер Цикл
Отступ = ТекущаяПозиция;
Курсор = Новый Структура("offset,session_id", Отступ, Сессия);
Параметры = Новый Структура("cursor", Курсор);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
ЧтениеДанных = Новый ЧтениеДанных(Файл);
ПрочитаноБайт = ЧтениеДанных.Пропустить(ТекущаяПозиция);
Результат = ЧтениеДанных.Прочитать(РазмерЧасти);
ТекущиеДанные = Результат.ПолучитьДвоичныеДанные();
РазмерТекущих = ТекущиеДанные.Размер();
СледующаяПозиция = ТекущаяПозиция + РазмерТекущих;
Если Не ЗначениеЗаполнено(ТекущиеДанные) Тогда
Прервать;
КонецЕсли;
Ответ = OPI_Инструменты.PostBinary(URL, ТекущиеДанные, Заголовки);
ТекущаяПозиция = СледующаяПозиция;
// !OInt КБайт = 1024;
// !OInt МБайт = КБайт * КБайт;
// !OInt Сообщить(OPI_Инструменты.ИнформацияОПрогрессе(ТекущаяПозиция, ОбщийРазмер, "МБ", МБайт));
// !OInt ВыполнитьСборкуМусора();
// !OInt ОсвободитьОбъект(ТекущиеДанные);
КонецЦикла;
Ответ = ЗакрытьСессию(Токен, Путь, Режим, ОбщийРазмер, Сессия);
Возврат Ответ;
КонецФункции
Функция ЗагрузитьМалыйФайл(Знач Токен, Знач Файл, Знач Путь, Знач Режим)
URL = "https://content.dropboxapi.com/2/files/upload";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("autorename" , Ложь , "Булево", Параметры);
OPI_Инструменты.ДобавитьПоле("mode" , Режим, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("mute" , Ложь , "Булево", Параметры);
OPI_Инструменты.ДобавитьПоле("path" , Путь , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("strict_conflict", Ложь , "Булево", Параметры);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
Ответ = OPI_Инструменты.PostBinary(URL, Файл, Заголовки);
Возврат Ответ;
КонецФункции
Функция ОткрытьСессию(Знач Токен)
SessionId = "session_id";
URL = "https://content.dropboxapi.com/2/files/upload_session/start";
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
Возврат Ответ[SessionId];
КонецФункции
Функция ЗакрытьСессию(Знач Токен, Знач Путь, Знач Режим, Знач ОбщийРазмер, Знач Сессия)
URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
Коммит = Новый Структура();
OPI_Инструменты.ДобавитьПоле("mode", Режим, "Строка", Коммит);
OPI_Инструменты.ДобавитьПоле("path", Путь, "Строка", Коммит);
Курсор = Новый Структура("offset,session_id", ОбщийРазмер, Сессия);
Параметры = Новый Структура("commit,cursor", Коммит, Курсор);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен, Параметры);
Ответ = OPI_Инструменты.PostBinary(URL, ПолучитьДвоичныеДанныеИзСтроки(""), Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти

View File

@@ -1,8 +1,10 @@
![main](https://github.com/Bayselonarrend/OpenIntegrations/assets/105596284/24bc269c-d08f-44c6-9d50-81202083973d)
<img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/eng.png?1" align="left" width="32"> *This page, but on English, here: [Click!](https://github.com/Bayselonarrend/OpenIntegrations/blob/main/README_ENG.md)*
<hr>
![Main](https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/main.gif#gh-dark-mode-only#gh-dark-mode-only)
![Main-light](https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/main-light.gif#gh-light-mode-only)
# Открытый пакет интеграций
@@ -16,22 +18,23 @@
<br>
Реализованные методы выполняют конечные задачи (вроде ОтправитьСообщение или СоздатьПост), что позволяет использовать их без углубления в реализацию. Однако, код, при этом, достаточно сильно декомпозирован - методы авторизации, получения данных и пр. по возможности вынесены в отдельные функции. Это позволяет легко добавлять новые методы, даже если они еще не реализованы в самой библиотеке на текущий момент. <br><br>
Все реализованные методы выполняют отдельные практические задачи, вроде `ОтправитьСообщение` или `СоздатьПост`, что позволяет использовать их без углубления в реализацию. Код, при этом, достаточно сильно декомпозирован: методы авторизации, получения данных и пр. по возможности вынесены в отдельные функции. Это позволяет легко добавлять новые методы, даже если они еще не реализованы в самой библиотеке на текущий момент. <br><br>
На данный момент реализованы методы для работы со следующими API:
На сегодняшний день реализованы методы для работы со следующими API:
<br>
<div>
<a href="https://openintegrations.dev/docs/Telegram/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Telegram.png" width="32"></a>
<a href="https://openintegrations.dev/docs/VK/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/VK.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Viber/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Viber.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Twitter/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Twitter.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Notion/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Notion.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Yandex_Disk/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/YandexDisk.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Google_Calendar/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleCalendar.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Google_Drive/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleDrive.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Google_Sheets/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleSheets.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Slack/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Slack.png" width="32"></a>
<a href="https://openintegrations.dev/docs/Airtable/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Airtable.png?6" width="32"></a>
<a href="https://openintegrations.dev/docs/Telegram/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Telegram.png" width="40"></a>
<a href="https://openintegrations.dev/docs/VK/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/VK.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Viber/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Viber.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Twitter/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Twitter.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Notion/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Notion.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Yandex_Disk/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/YandexDisk.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Google_Calendar/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleCalendar.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Google_Drive/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleDrive.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Google_Sheets/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleSheets.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Slack/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Slack.png" width="40"></a>
<a href="https://openintegrations.dev/docs/Airtable/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Airtable.png?6" width="40"></a>
<a href="https://openintegrations.dev/docs/Dropbox/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Dropbox.png?6" width="40"></a>
</div>
<br>
@@ -39,11 +42,11 @@
[![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/bayselonarrend/OpenIntegrations/total?logo=github)](https://github.com/Bayselonarrend/OpenIntegrations/releases/latest)
<img src="https://github.com/Bayselonarrend/OpenIntegrations/assets/105596284/f345b5b0-76ac-4511-980b-a9e86fee3067" align="right">
<img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/icons.png" align="right">
<br><br>
Релизы библиотеки выходят в пяти вариантах:
#### Релизы библиотеки выходят в пяти вариантах:
- Как CLI приложение для Windows и Linux (exe, rpm, deb)
- Как XML выгрузка расширения
- Как EDT проект расширения
@@ -52,7 +55,7 @@
<br/><br>
При использовании версий для 1С и OneScript, вы также можете просто скопировать код общих модулей из релизов в свой проект руками. Однако, вне зависимости от выбранного сопособа установки, получать файлы необходимо из Release, так как в самих исходных файлах репозитория бывают промежуточные данные и функции, находящиеся в процессе разработки.
При использовании версий для 1С и OneScript, вы также можете просто скопировать код общих модулей из релизов в свой проект руками. Однако, вне зависимости от выбранного сопособа установки, получать файлы необходимо из *Release*, так как в самих исходных файлах репозитория бывают промежуточные данные и функции, находящиеся в процессе разработки.
<br/>
@@ -71,7 +74,7 @@
```
<br>
CLI версия дополнительно требует **.Net Framework 4.8** или **Mono соответствующей версии**. При установке из rpm или deb пакетов устанавливается автоматически
CLI версия требует **.Net Framework 4.8** или **Mono соответствующей версии**. При установке из `rpm` или `deb` пакетов устанавливается автоматически
<br/>
@@ -105,8 +108,7 @@ ___
>- [OInt CLI - приложение Открытого пакета интеграций для командной строки](https://infostart.ru/1c/articles/2074205/)<br>
>- [Библиотека для работы со Slack (open-source)](https://infostart.ru/1c/articles/2099282/)<br>
<img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png" align="right" width="256">
<img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/heartnstar.png?1" align="right" width="384">
<br>

98
README_ENG.md Normal file
View File

@@ -0,0 +1,98 @@
![Main](https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/main.gif#gh-dark-mode-only#gh-dark-mode-only)
![Main-light](https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/main-light.gif#gh-light-mode-only)
# Open Integrations Package
[![Статус порога качества](http://api.athenaeum.digital/Sonar/api/project_badges/measure?project=OpenIntegrations&metric=alert_status)](http://api.athenaeum.digital/Sonar/dashboard?id=OpenIntegrations)
![Версия](https://img.shields.io/badge/1C_version-8.3.9-yellow)
[![OpenYellow](https://img.shields.io/endpoint?url=https://openyellow.neocities.org/badges/2/736878759.json)](https://openyellow.notion.site/openyellow/24727888daa641af95514b46bee4d6f2?p=f78cea2066114067ab9069f06206219d&amp;pm=s)
<br>
An 1C/OneScript and CLI open-source toolkit for integrating with APIs of popular online services <br>
<br>
The implemented methods perform specific tasks (such as ``SendMessage()`` or ``CreatePost()``), allowing them to be used without delving into the implementation details. However, the code is highly decomposed – authorization methods, data retrieval, etc., are separated into individual functions where possible. This makes it easy to add new methods, even if they are not yet implemented in the library at the current time. <br><br>
List of currently available APIs:
<br>
<div>
<a href="https://en.openintegrations.dev/docs/Telegram/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Telegram.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/VK/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/VK.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Viber/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Viber.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Twitter/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Twitter.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Notion/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Notion.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Yandex_Disk/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/YandexDisk.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Google_Calendar/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleCalendar.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Google_Drive/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleDrive.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Google_Sheets/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/GoogleSheets.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Slack/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Slack.png" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Airtable/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Airtable.png?6" width="40"></a>
<a href="https://en.openintegrations.dev/docs/Dropbox/"><img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/Dropbox.png?6" width="40"></a>
</div>
<br>
## Releases ##
[![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/bayselonarrend/OpenIntegrations/total?logo=github)](https://github.com/Bayselonarrend/OpenIntegrations/releases/latest)
<img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/icons.png" align="right">
<br><br>
#### The library releases come in five versions:
- As a CLI application for Windows and Linux (exe, rpm, deb)
- As XML extension files for loading via the configurator
- As an EDT extension project
- As a standalone extension file in cfe format
- As a OneScript extension package in ospx format
<br/><br>
Regardless of the chosen installation method, the files must be obtained from the *Release* section, as the repository files may contain intermediate data and functions that are still in development.
<br/>
To get started with OneScript, you also need to install the package
<br/>
From Hub (only ru version):
```powershell
opm install oint
```
From file:
```powershell
opm install -f "./OInt-x.x.x.ospx"
```
<br>
The CLI version requires **.Net Framework 4.8** or **Mono of the corresponding version**. When installing from rpm or deb packages, it is installed automatically.
<br/>
>[!WARNING]
>It is not recommended to directly use the methods of service modules (1C and OneScript; OPI_Tools, OPI_Cryptography etc.) in your project (if you plan to update to new versions in the future). To maintain backward compatibility, the number/purpose of parameters and the return types for API methods do not change, but this does not apply to service modules, which may change as needed for optimization and adaptation to new requirements. If you need functionality from the service modules, it is recommended to copy it separately.
<br/>
## Documentation ##
OpenIntegrations has detailed documentation with examples available at [https://en.openintegrations.dev](https://en.openintegrations.dev). There you can find both general guidelines for getting started with each specific API and descriptions of each method with code examples, parameters, and return values.
![Docs](https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/docs_eng.png?4)
The CLI version of OpenIntegrations has its own built-in help for all methods. The help is displayed when calling the library without a method, a method without options, or by specifying the `--help` option.
___
<br>
<img src="https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/heartnstar.png?1" align="right" width="384">
<br>
>- Open Integrations Package (OpenIntegrations)<br>
>Licensed under the MIT License<br>

File diff suppressed because it is too large Load Diff

View File

@@ -1,163 +0,0 @@
#Использовать "../../tools"
#Область СлужебныйПрограммныйИнтерфейс
Процедура ВывестиНачальнуюСтраницу(Знач СоответствиеКомандМодулей, Знач Версия) Экспорт
СписокКоманд = "";
Для Каждого Команда Из СоответствиеКомандМодулей Цикл
СписокКоманд = СписокКоманд + Команда.Ключ + ", ";
КонецЦикла;
СписокКоманд = Лев(СписокКоманд, СтрДлина(СписокКоманд) - 2);
Сообщить("-----------------------------------------------------", СтатусСообщения.Информация);
Сообщить("
|
| _______ _____________ ___ _______
| __ __ ___/__ _/_ / | / /___ __/
| _ / / / __ / __ / __ /
| / /_/ / __/ / _ /| / _ /
| \____/ /___/ /_/ |_/ /_/
|
|
| Добро пожаловать в OInt v " + Версия + "!
|
| Структура команд:
| OInt БИБЛИОТЕКА МЕТОД [Параметры]
|
| Вызов библиотеки без метода или метода без параметров возвращает справку
| Список доступных библиотек: "
+ СписокКоманд, СтатусСообщения.Внимание);
Сообщить("
| Стандартные опции:
| --help - выводит справку по текущей команде или методу. Аналогично вызову команды без опций
| --debug - флаг, отвечающий за предоставление более подробной информации при работе программы
| --out - путь к файлу сохранения результата (двоичных данных в частности)
|", СтатусСообщения.Информация);
Сообщить("Полную документацию можно найти по адресу: https://openintegrations.dev" + Символы.ПС
, СтатусСообщения.Внимание);
ЗавершитьРаботу(0);
КонецПроцедуры
Процедура ВывестиСправкуПоМетодам(Знач Команда, Знач ТаблицаПараметров) Экспорт
Сообщить(Символы.ПС + " ## Команда - " + Команда, СтатусСообщения.Информация);
ТаблицаПараметров.Свернуть("Метод");
МассивМетодов = ТаблицаПараметров.ВыгрузитьКолонку("Метод");
Сообщить(" ## Доступные методы: " + Символы.ПС, СтатусСообщения.Информация);
Для каждого Метод Из МассивМетодов Цикл
Сообщить(" - " + Метод, СтатусСообщения.Внимание);
КонецЦикла;
Сообщить(Символы.ПС);
ЗавершитьРаботу(0);
КонецПроцедуры
Процедура ВывестиСправкуПоПараметрам(Знач ТаблицаПараметров, Знач Команда) Экспорт
Если ТаблицаПараметров.Количество() = 0 Тогда
ВывестиСообщениеИсключения("Метод");
КонецЕсли;
ИмяМетода = ТаблицаПараметров[0].Метод;
ТекстСправки = "
| ## Метод " + ИмяМетода + "
| ## " + ТаблицаПараметров[0].ОписаниеМетода;
Сообщить(ТекстСправки, СтатусСообщения.Информация);
ТекстСправки = "";
ОбработатьТабуляциюСправки(ТаблицаПараметров);
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
ТекстСправки = ТекстСправки
+ Символы.ПС
+ " "
+ ПараметрМетода["Параметр"]
+ " - "
+ ПараметрМетода["Описание"];
КонецЦикла;
Сообщить(ТекстСправки + Символы.ПС, СтатусСообщения.Внимание);
ЗавершитьРаботу(0);
КонецПроцедуры
Процедура ВывестиСообщениеИсключения(Знач Причина) Экспорт
Если Причина = "Команда" Тогда
Текст = "Некорректная команда! Проверьте правильность ввода";
Код = 1;
ИначеЕсли Причина = "Метод" Тогда
Текст = "Некорректный метод! Проверьте правильность ввода";
Код = 2;
Иначе
Текст = "Непредвиденная ошибка!: " + Причина;
Код = 99
КонецЕсли;
Текст = Символы.ПС + Текст + Символы.ПС;
Сообщить(Текст, СтатусСообщения.ОченьВажное);
ЗавершитьРаботу(Код);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ОбработатьТабуляциюСправки(ТаблицаПараметров)
МаксимальнаяДлина = 15;
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
Пока Не СтрДлина(ПараметрМетода["Параметр"]) = МаксимальнаяДлина Цикл
ПараметрМетода["Параметр"] = ПараметрМетода["Параметр"] + " ";
КонецЦикла;
ТекущееОписание = ПараметрМетода["Описание"];
МассивОписания = СтрРазделить(ТекущееОписание, Символы.ПС);
НачальнаяТабуляция = 4;
Если МассивОписания.Количество() = 1 Тогда
Продолжить;
Иначе
Для Н = 1 По МассивОписания.ВГраница() Цикл
ТекущийЭлемент = МассивОписания[Н];
НеобходимаяДлина = СтрДлина(ТекущийЭлемент) + СтрДлина(ПараметрМетода["Параметр"] + " - ") + НачальнаяТабуляция;
Пока СтрДлина(МассивОписания[Н]) < НеобходимаяДлина Цикл
МассивОписания[Н] = " " + МассивОписания[Н];
КонецЦикла;
КонецЦикла;
ПараметрМетода["Описание"] = СтрСоединить(МассивОписания, Символы.ПС);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

@@ -1,27 +0,0 @@
#Использовать "../../data"
Перем СоответствиеТаблицПараметров Экспорт;
Перем СоответствиеКомандМодулей Экспорт;
Перем Версия Экспорт;
Процедура ПриСозданииОбъекта()
СоответствиеТаблицПараметров = Новый Соответствие();
СоответствиеКомандМодулей = Новый Соответствие();
Версия = СоставБиблиотеки.ПолучитьВерсию();
ТаблицаСостава = СоставБиблиотеки.ПолучитьСостав();
СоответствиеКомандМодулей = СоставБиблиотеки.ПолучитьСоответствиеКомандМодулей();
Для Каждого КомандаМодуля Из СоответствиеКомандМодулей Цикл
Библиотека = КомандаМодуля.Ключ;
Отбор = Новый Структура("Библиотека", Библиотека);
СтрокиКоманды = ТаблицаСостава.Скопировать(Отбор);
СоответствиеТаблицПараметров.Вставить(Библиотека, СтрокиКоманды);
КонецЦикла;
КонецПроцедуры

View File

@@ -1,11 +0,0 @@
Процедура ПроверитьВерсию(Знач ТекущаяВерсия) Экспорт
Информация = Новый СистемнаяИнформация;
Платформа = Строка(Информация.ТипПлатформы);
Сообщить("Текущая версия OInt: " + ТекущаяВерсия, СтатусСообщения.Информация);
Сообщить("Платформа : " + Платформа, СтатусСообщения.Внимание);
ЗавершитьРаботу(0);
КонецПроцедуры

Binary file not shown.

View File

@@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

View File

@@ -0,0 +1,127 @@
// @ts-check
// `@type` JSDoc annotations allow editor autocompletion and type checking
// (when paired with `@ts-check`).
// There are various equivalent ways to declare your Docusaurus config.
// See: https://docusaurus.io/docs/api/docusaurus-config
import {themes as prismThemes} from 'prism-react-renderer';
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Открытый Пакет Интеграций',
tagline: 'Набор инструментов для интеграции с популярными API посредством CLI, 1C:Enterprise и OneScript',
favicon: 'img/favicon.ico',
// Set the production url of your site here
url: 'https://openintegrations.dev',
// Set the /<baseUrl>/ pathname under which your site is served
// For GitHub pages deployment, it is often '/<projectName>/'
baseUrl: '/',
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'Bayselonarrend', // Usually your GitHub org/user name.
projectName: 'OpenIntegrations', // Usually your repo name.
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'ru',
locales: ['ru'],
},
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
theme: {
customCss: './src/css/custom.css',
},
}),
],
],
plugins: [
['docusaurus-plugin-yandex-metrica', {
counterID: '97292922',
}],
[ require.resolve('docusaurus-lunr-search'), {
languages: ['en', 'ru'] // language codes
}]],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
// Replace with your project's social card
colorMode: {
defaultMode: 'light',
disableSwitch: true,
respectPrefersColorScheme: false,
},
navbar: {
title: 'Открытый пакет интеграций',
logo: {
alt: 'OPI',
src: 'img/logo.png',
},
items: [
{
type: 'docSidebar',
sidebarId: 'defaultSidebar',
position: 'left',
label: 'Описания методов',
},
{
href: 'https://github.com/Bayselonarrend/OpenIntegrations',
label: 'GitHub',
position: 'right',
},
],
},
footer: {
style: 'light',
links: [
{
title: 'Документация',
items: [
{
label: 'Описания методов',
to: '/docs/Start',
},
],
},
{
title: 'Ресурсы',
items: [
{
label: 'GitHub',
href: 'https://github.com/Bayselonarrend/OpenIntegrations',
},
],
},
],
copyright: `${new Date().getFullYear()} OpenItegrations by Bayselonarrend`,
},
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.github,
additionalLanguages: ['powershell','json','bsl']
},
}),
};
export default config

15439
docs/docusaurus/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,46 @@
{
"name": "OpenIntegrations",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "^3.0.1",
"@docusaurus/preset-classic": "3.0.1",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.3.2",
"docusaurus-plugin-yandex-metrica": "^1.2.1",
"prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.0.1",
"@docusaurus/types": "3.0.1"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 3 chrome version",
"last 3 firefox version",
"last 5 safari version"
]
},
"engines": {
"node": ">=18.0"
}
}

View File

@@ -0,0 +1,33 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
// But you can create a sidebar manually
/*
tutorialSidebar: [
'intro',
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
},
],
*/
};
export default sidebars;

View File

@@ -0,0 +1,100 @@
import clsx from 'clsx';
import Heading from '@theme/Heading';
import styles from './styles.module.css';
const FeatureList = [
{
title: 'Простота и гибкость',
Svg: require('@site/static/img/tools.svg').default,
description: (
<>
Пакет содержит множество методов для работы с различными API. Эти методы не треубют глубокого погружения в тонкости работы, но и не ограничивают вас в возможности их модификации
</>
),
},
{
title: 'Лёгкость внедрения',
Svg: require('@site/static/img/delivery.svg').default,
description: (
<>
ОПИ легко интегрировать в любой проект: в виде проекта EDT, 1C-расширения или пакета OneScript. Для интеграции, независимой от конретных технологий, есть CLI версия под Windows и Linux
</>
),
},
{
title: 'Подробная документация',
Svg: require('@site/static/img/books.svg').default,
description: (
<>
У ОПИ есть подробная документация, а код структурирован и дополнен комментариями. Если же у вас все таки возникнут дополнительные вопросы, то вы всегда можете задать их в Issues на Github
</>
),
},
];
function Feature({Svg, title, description}) {
return (
<div className={clsx('col col--4')}>
<div className="text--center">
<Svg className={styles.featureSvg} role="img" />
</div>
<div className="text--center padding-horiz--md">
<Heading as="h3">{title}</Heading>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
<br/>
<hr/>
<br/>
<br/>
<section className={styles.container}>
<span className={styles.looptext}>
<a className={styles.ico} href="/docs/Telegram/"> <img src={require('../../../static/img/APIs/Telegram.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/VK/"><img src={require('../../../static/img/APIs/VK.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Viber/"><img src={require('../../../static/img/APIs/Viber.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Twitter/"><img src={require('../../../static/img/APIs/Twitter.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Notion/"><img src={require('../../../static/img/APIs/Notion.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Yandex_Disk/"><img src={require('../../../static/img/APIs/YandexDisk.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Google_Calendar/"><img src={require('../../../static/img/APIs/GoogleCalendar.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Google_Drive/"><img src={require('../../../static/img/APIs/GoogleDrive.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Google_Sheets/"> <img src={require('../../../static/img/APIs/GoogleSheets.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Slack/"> <img src={require('../../../static/img/APIs/Slack.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Airtable/"> <img src={require('../../../static/img/APIs/Airtable.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Telegram/"> <img src={require('../../../static/img/APIs/Telegram.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Telegram/"> <img src={require('../../../static/img/APIs/Dropbox.png').default} width='32px' /></a>
</span>
<span className={styles.looptext}>
<a className={styles.ico} href="/docs/Telegram/"> <img src={require('../../../static/img/APIs/Telegram.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/VK/"><img src={require('../../../static/img/APIs/VK.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Viber/"><img src={require('../../../static/img/APIs/Viber.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Twitter/"><img src={require('../../../static/img/APIs/Twitter.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Notion/"><img src={require('../../../static/img/APIs/Notion.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Yandex_Disk/"><img src={require('../../../static/img/APIs/YandexDisk.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Google_Calendar/"><img src={require('../../../static/img/APIs/GoogleCalendar.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Google_Drive/"><img src={require('../../../static/img/APIs/GoogleDrive.png').default} width='32px'/> </a>
<a className={styles.ico} href="/docs/Google_Sheets/"> <img src={require('../../../static/img/APIs/GoogleSheets.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Slack/"> <img src={require('../../../static/img/APIs/Slack.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Airtable/"> <img src={require('../../../static/img/APIs/Airtable.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Telegram/"> <img src={require('../../../static/img/APIs/Telegram.png').default} width='32px' /></a>
<a className={styles.ico} href="/docs/Telegram/"> <img src={require('../../../static/img/APIs/Dropbox.png').default} width='32px' /></a>
</span>
</section>
</div>
</section>
);
}

View File

@@ -0,0 +1,55 @@
marquee{
padding: auto;
}
.api{
margin-right: 200px;
}
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 80px;
width: 80px;
}
.ico{
padding: 176px;
}
.hero__title{
font-size: 10px;
}
.container {
display: flex;
white-space: nowrap;
width: 100%;
height: clamp(3em, 10vw, 6em);
overflow: hidden;
font-family: sans-serif;
}
.looptext {
animation: loopText 27s infinite linear;
}
@keyframes loopText {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}

View File

@@ -0,0 +1,206 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #ffffff;
--ifm-color-primary-dark: #ffffff;
--ifm-color-primary-darker: #ffffff;
--ifm-color-primary-darkest: #ffffff;
--ifm-color-primary-light: #ffffff;
--ifm-color-primary-lighter: #ffffff;
--ifm-color-primary-lightest:#ffffff;
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: #004943;;
}
p{
font-weight: lighter;
}
.main-wrapper,.navbar{
background: rgba( 255, 255, 255, 0.25 );
box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.075);
backdrop-filter: blur( 11px );
-webkit-backdrop-filter: blur( 11px );
border-radius: 15px;
border: 1px solid rgba(255, 255, 255, 0.096);
margin: 20px;
}
.main-wrapper{
margin-top: 0px;
padding: 20px;
padding-top: 5px;
}
.footer{
background-color: white;
}
.hero{
background-color: transparent;
padding-top: 0px;
}
.menu__link{
font-weight: normal;
}
.menu__link--active, .menu__link--active:hover, .navbar__link--active {
color: black;
}
.table-of-contents__link, .table-of-contents__link:hover, .table-of-contents__link--active, .table-of-contents__link--active:hover{
color: black;
font-weight: normal;
}
.navbar__item:hover, .navbar__link:hover, .navbar__brand:hover{
color: #004943;
font-weight: 510;
}
a{
color: #004943;
font-weight: bold;
}
a:hover, .navbar__title:hover{
color: #004943;
}
.breadcrumbs__item--active .breadcrumbs__link {
background: #004943;
}
.navbar__title{
font-weight: 510;
}
li > a.menu__link {
justify-content: flex-start;
}
.Airtable a::before , .Telegram a::before, .VK a::before, .Viber a::before, .Twitter a::before,
.Notion a::before, .GoogleCalendar a::before, .GoogleDrive a::before, .GoogleSheets a::before,
.Slack a::before, .YandexDisk a::before, .Dropbox a::before{
padding-right: 0.7rem;
padding-top: 0.4rem;
}
.Airtable > div > a::before{
content: url(../../static/img/APIs/small/Airtable.png);
}
.Telegram > div > a::before{
content: url(../../static/img/APIs/small/Telegram.png);
}
.VK > div > a::before{
content: url(../../static/img/APIs/small/VK.png);
}
.Viber > div > a::before{
content: url(../../static/img/APIs/small/Viber.png);
}
.Twitter > div > a::before{
content: url(../../static/img/APIs/small/Twitter.png);
}
.Notion > div > a::before{
content: url(../../static/img/APIs/small/Notion.png);
}
.GoogleCalendar > div > a::before{
content: url(../../static/img/APIs/small/GoogleCalendar.png);
}
.GoogleDrive > div > a::before{
content: url(../../static/img/APIs/small/GoogleDrive.png);
}
.GoogleSheets > div > a::before{
content: url(../../static/img/APIs/small/GoogleSheets.png);
}
.Slack > div > a::before{
content: url(../../static/img/APIs/small/Slack.png);
}
.YandexDisk > div > a::before{
content: url(../../static/img/APIs/small/YandexDisk.png);
}
.Dropbox > div > a::before{
content: url(../../static/img/APIs/small/Dropbox.png);
}
/* CSS */
.button {
appearance: none;
background-color: white;
border: 1px solid rgba(27, 31, 35, 0.15);
border-radius: 16px;
box-shadow: rgba(27, 31, 35, 0.04) 0 1px 0, rgba(255, 255, 255, 0.25) 0 1px 0 inset;
box-sizing: border-box;
color: #24292E;
cursor: pointer;
display: inline-block;
font-family: -apple-system, system-ui, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
font-size: 14px;
font-weight: 500;
line-height: 20px;
list-style: none;
padding: 6px 16px;
position: relative;
transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1);
user-select: none;
-webkit-user-select: none;
touch-action: manipulation;
vertical-align: middle;
white-space: nowrap;
word-wrap: break-word;
}
.button:hover {
background-color: #F3F4F6;
text-decoration: none;
transition-duration: 0.1s;
}
.button:disabled {
background-color: #FAFBFC;
border-color: rgba(27, 31, 35, 0.15);
color: #959DA5;
cursor: default;
}
.button:active {
background-color: #EDEFF2;
box-shadow: rgba(225, 228, 232, 0.2) 0 1px 0 inset;
transition: none 0s;
}
.button:focus {
outline: 1px transparent;
}
.button:before {
display: none;
}
.button:-webkit-details-marker {
display: none;
}

View File

@@ -0,0 +1,60 @@
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import Heading from '@theme/Heading';
import styles from './index.module.css';
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<img src="/img/logo.svg" className={styles.biglogo}/>
<Heading as="p" className="hero__title">
{siteConfig.title}
</Heading>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<div className={styles.button}><Link
className="button button--secondary button--bg"
to="/docs/Start">
Документация
</Link>
</div>
<div className={styles.button}><Link
className="button button--secondary button--bg"
to="https://github.com/Bayselonarrend/OpenIntegrations/releases/latest">
Скачать
</Link>
</div>
<div className={styles.button}><Link
className="button button--secondary button--bg"
to="https://en.openintegrations.dev">
English version
</Link>
</div>
</div>
</div>
</header>
);
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
return (
<Layout
title={`Открытый пакет интеграций`}
description="ОПИ - пакет интеграций с популярными API для 1С:Enterprise и OneScript">
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

View File

@@ -0,0 +1,38 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 3rem 2rem 0;
text-align: center;
position: relative;
overflow: hidden;
color: black;
margin-top: -50px;
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}
.button{
margin: 10px;
}
.biglogo{
width: 20%;
height: 20%;
}
.heroBanner_src-pages-index-module {
padding-bottom: 30px;
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Some files were not shown because too many files have changed in this diff Show More