1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-16 11:38:11 +02:00
OpenIntegrations/.github/workflows/os/oint_testmaker.os

352 lines
13 KiB
Plaintext
Raw Normal View History

#Использовать "../../../src/ru/OInt/tools/"
Перем СоответствияПараметровЗначениям;
Перем СоответствияПараметровПредобработкам;
2024-04-20 11:50:02 +02:00
Перем СписокРабот;
Перем ТекущийДокумент;
Перем ПутьКФайлам;
2024-05-28 15:27:59 +02:00
Процедура ПриСозданииОбъекта()
2024-04-20 11:50:02 +02:00
СписокРабот = "";
ТаблицаТестов = OPI_ПолучениеДанныхТестов.ПолучитьТаблицуТестов();
СписокБиблиотек = OPI_ПолучениеДанныхТестов.ПолучитьСоответствиеРазделовТестирования();
ПутьКФайлам = "./.github/workflows/";
2024-05-28 15:47:53 +02:00
МассивВлияющих = Новый Массив;
Для Каждого Библиотека Из СписокБиблиотек Цикл
МассивВлияющих.Добавить("Testing-" + Библиотека.Ключ);
КонецЦикла;
ТекущийДокумент = Новый ТекстовыйДокумент();
СообщитьНачалоФайлаПроцесса();
СформироватьЗапуск(ТаблицаТестов, СписокБиблиотек);
2024-05-28 15:27:59 +02:00
СообщитьОкончаниеФайлаПроцесса(МассивВлияющих, СписокБиблиотек);
ТекущийДокумент.Записать(ПутьКФайлам + "oint_test_full.yml");
Для Каждого ТекущаяБиблиотека Из СписокБиблиотек Цикл
ТекущийДокумент = Новый ТекстовыйДокумент();
Библиотека = ТекущаяБиблиотека.Ключ;
2024-05-08 13:30:21 +02:00
СписокРабот = "";
СписокОдной = Новый Соответствие();
2024-05-08 13:23:28 +02:00
Зависимости = СписокБиблиотек[Библиотека];
СписокОдной.Вставить(Библиотека, Зависимости);
2024-05-28 15:27:59 +02:00
СообщитьНачалоФайлаПроцесса("Тестирование " + Библиотека);
СформироватьЗапуск(ТаблицаТестов, СписокОдной);
2024-05-08 17:39:34 +02:00
ТекущийДокумент.ДобавитьСтроку("
|
| - name: Записать измененные данные
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: test-data_new
| path: ./data.json
|");
2024-05-28 15:27:59 +02:00
СообщитьОкончаниеФайлаПроцесса("Testing-" + Библиотека, СписокОдной);
ТекущийДокумент.Записать(ПутьКФайлам + "oint_test_" + Библиотека + ".yml");
КонецЦикла;
КонецПроцедуры
Процедура СформироватьЗапуск(Знач ТаблицаТестов, Знач СписокБиблиотек)
Раннер = "/home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os";
2024-05-31 23:07:13 +02:00
ФайлТестов = "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os";
Для Каждого Библиотека Из СписокБиблиотек Цикл
Раздел = Библиотека.Ключ;
Зависимости = Библиотека.Значение;
2024-04-20 11:50:02 +02:00
НазваниеРаботы = "Testing-" + Раздел;
СписокРабот = СписокРабот + НазваниеРаботы + ", ";
ТекстРаботы = "
|
2024-04-20 11:50:02 +02:00
| " + НазваниеРаботы + ":
2024-04-19 19:27:33 +02:00
| runs-on: ubuntu-latest
| needs: " + Зависимости + "
| steps:
|
2024-04-19 19:27:33 +02:00
| - uses: actions/checkout@v2
| - uses: otymko/setup-onescript@v1.4
| with:
| version: 1.9.0
|
2024-04-19 19:27:33 +02:00
| - name: Получить тестовые данные из кэша
| uses: actions/cache/restore@v3
| with:
2024-04-19 19:49:31 +02:00
| key: " + КлючКэша(Раздел) + "
2024-04-19 19:27:33 +02:00
| path: ./data.json
|
2024-04-19 19:27:33 +02:00
| - name: Установить asserts и 1testrunner
| run: |
| opm install asserts
| opm install 1testrunner
|
2024-04-19 19:27:33 +02:00
| - name: Установить OInt
| run: |
2024-05-31 23:07:13 +02:00
| cd ./src/ru/OInt
2024-04-19 19:27:33 +02:00
| opm build
| opm install *.ospx
|
2024-04-19 19:27:33 +02:00
|";
2024-05-08 12:35:02 +02:00
Отбор = Новый Структура("Раздел", Раздел);
ТестыТекущегоРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
Для Каждого Тест Из ТестыТекущегоРаздела Цикл
Метод = Тест.Метод;
Синоним = Тест.Синоним;
ТекстРаботы = ТекстРаботы + "
|
2024-04-19 19:31:41 +02:00
| - name: " + Синоним + "
2024-04-19 19:33:38 +02:00
| if: ${{ cancelled() }} == false
| run: oscript " + Раннер + " -run " + ФайлТестов + " """ + Метод + """";
КонецЦикла;
2024-04-19 19:49:31 +02:00
ДополнитьТекстРаботы(Раздел, ТекстРаботы);
ТекущийДокумент.ДобавитьСтроку(ТекстРаботы);
КонецЦикла;
КонецПроцедуры
Процедура СообщитьНачалоФайлаПроцесса(Знач ИмяРаботы = "Полное тестирование")
ТекущийДокумент.ДобавитьСтроку(
"
|name: OINT | " + ИмяРаботы + "
|
|# Controls when the workflow will run
|on:
| workflow_dispatch:
|
|jobs:
|
| Decode:
2024-04-19 16:18:44 +02:00
| runs-on: ubuntu-latest
| if: ${{ always() }}
| steps:
2024-04-19 16:23:05 +02:00
|
2024-04-19 16:18:44 +02:00
| - 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:
2024-04-19 16:18:44 +02:00
| runs-on: ubuntu-latest
| steps:
| - uses: actions/checkout@v4
| - uses: otymko/setup-onescript@v1.4
| with:
| version: 1.9.0
|
2024-04-19 16:18:44 +02:00
| - name: Установить asserts и 1testrunner
| run: |
| opm install asserts
| opm install 1testrunner
|
2024-04-19 16:18:44 +02:00
| - name: Установить OInt
| run: |
2024-05-31 23:07:13 +02:00
| cd ./src/ru/OInt
2024-04-19 16:18:44 +02:00
| opm build
| opm install *.ospx
|
2024-04-19 16:18:44 +02:00
| - name: Записать артефакт
| uses: actions/upload-artifact@v4
| with:
| name: oint
2024-05-31 23:07:13 +02:00
| path: ./src/ru/OInt/*.ospx
2024-04-19 16:23:05 +02:00
|");
КонецПроцедуры
2024-05-28 15:27:59 +02:00
Процедура СообщитьОкончаниеФайлаПроцесса(Знач СписокВлияний = "", Знач СписокБиблиотек)
Если ТипЗнч(СписокВлияний) = Тип("Массив") Тогда
СписокВлияний = СтрСоединить(СписокВлияний, ",");
КонецЕсли;
ТекущийДокумент.ДобавитьСтроку("
| 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-" + ТекущаяБиблиотека + "
2024-05-28 15:47:53 +02:00
| 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)
|");
ТекущийДокумент.ДобавитьСтроку("
2024-04-19 19:27:33 +02:00
|
| Clear-Cache:
| runs-on: ubuntu-latest
2024-04-20 11:50:02 +02:00
| needs: [" + СписокРабот + "Encode]
2024-04-19 19:27:33 +02:00
| 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""
|");
2024-04-19 19:49:31 +02:00
КонецПроцедуры
Процедура ДополнитьТекстРаботы(Знач Раздел, ТекстРаботы)
ТекстРаботы = ТекстРаботы + "
|
| - name: Записать логи
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: logs-" + Раздел + "
| path: ./docs/results/" + Раздел + "
|";
2024-04-19 19:49:31 +02:00
Если Раздел = "Twitter" Тогда
ТекстРаботы = ТекстРаботы + "
|
2024-04-19 19:55:16 +02:00
| - name: Записать измененные данные
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: test-data_new
| path: ./data.json
2024-04-19 19:49:31 +02:00
|";
ИначеЕсли Раздел = "GoogleWorkspace" Тогда
ТекстРаботы = ТекстРаботы + "
|
2024-04-19 19:55:16 +02:00
| - name: Записать измененные данные
| if: ${{ cancelled() }} == false
| uses: actions/cache/save@v3
| with:
| key: test-data_google
| path: ./data.json
2024-04-19 19:49:31 +02:00
|";
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
Функция КлючКэша(Знач Раздел)
СоответствиеОсобыхРазделов = Новый Соответствие();
СоответствиеОсобыхРазделов.Вставить("GoogleDrive" , "test-data_google");
СоответствиеОсобыхРазделов.Вставить("GoogleCalendar", "test-data_google");
2024-05-04 23:27:11 +02:00
СоответствиеОсобыхРазделов.Вставить("GoogleSheets" , "test-data_google");
2024-04-19 19:49:31 +02:00
Ключ = СоответствиеОсобыхРазделов.Получить(Раздел);
Если Не ЗначениеЗаполнено(Ключ) Тогда
Ключ = "test-data";
КонецЕсли;
Возврат Ключ;
КонецФункции