Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

468 / cборка простых внешних обработок. #472

Merged
merged 6 commits into from
Dec 18, 2024

Conversation

alkoleft
Copy link
Member

@alkoleft alkoleft commented Dec 18, 2024

Описание изменений


  • Добавлены тесты
  • Изменения отражены в документации (при необходимости)

Close #468

Summary by CodeRabbit

  • Новые функции

    • Добавлены функции для проверки типа операционной системы: ЭтоWindows(), ЭтоLinux(), ЭтоMac().
    • Введены процедуры для работы с текстовыми файлами: СкопироватьКаталог(), ЗаписатьТекстВФайла(), и функция ДанныеТекстовогоФайла().
    • Добавлены процедуры для тестирования внешних обработок: ИсполняемыеСценарии() и СкомпилироватьВнешнююОбработку().
    • Добавлен новый скрипт build-template.sh для автоматизации создания zip-архивов.
  • Исправления ошибок

    • Обновлены процедуры для работы с зависимостями, чтобы использовать новые методы чтения файлов.
  • Документация

    • Обновлены XML-файлы конфигурации для включения новых модулей и шаблонов.
  • Рефакторинг

    • Устаревшие функции помечены и перенаправлены на новые методы для улучшения структуры кода.

Copy link

coderabbitai bot commented Dec 18, 2024

Walkthrough

Этот обзор представляет значительные изменения в инфраструктуре тестирования YAXUnit, включающие новые модули, служебные функции и утилиты для работы с внешними обработками и файлами. Основные нововведения включают расширение функциональности модулей логирования, работы с файлами, определение платформозависимых функций и введение новых служебных модулей для компиляции и управления внешними обработками.

Changes

Файл Изменения
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl Новый модуль для компиляции внешних обработок с поддержкой Windows и Unix-систем
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/ЮТВнешниеОбработкиСлужебныйСервер.mdo Новый общий модуль с метаданными
exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl Обновлены процедуры для улучшения функциональности тестирования
exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl Модификации для улучшения управления логированием
exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl Устарели многие служебные функции работы с коллекциями
exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl Добавлены методы ЭтоWindows(), ЭтоLinux(), ЭтоMac()
exts/yaxunit/src/CommonModules/ЮТПараметрыЗапускаСлужебный/Module.bsl Изменен метод чтения конфигурационного файла
exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl Новые методы копирования каталогов, чтения и записи текстовых файлов
tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl Новый модуль для тестирования внешних обработок
tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/ОМ_ЮТВнешниеОбработкиСлужебныйСервер.mdo Новый общий модуль с метаданными
tests/src/CommonModules/ОМ_ЮТЗависимостиСлужебный/Module.bsl Изменен метод чтения файла в процедуре ДанныеЗависимости
tests/src/CommonModules/ОМ_ЮТИсполнительСлужебныйКлиент/Module.bsl Изменен источник метода чтения файла
tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl Обновлены процедуры для проверки загрузки тестов
tools/build-template.sh Новый скрипт для создания zip-архива
tools/v8unpack/build-epf.bat Добавлена команда для распаковки EPF файла
tools/v8unpack/build-epf.sh Новый скрипт для распаковки EPF файла
tools/v8unpack/unpack-epf.bat Добавлена команда для распаковки EPF файла
tools/v8unpack/unpack-epf.sh Новый скрипт для распаковки EPF файла
.github/workflows/step-export-xml.yml Изменены параметры и таймауты в конфигурации рабочего процесса

Poem

🐰 В мире кода, где тесты танцуют,
Модули новые смело шагают.
Логи, файлы, обработки без края -
Кролик-разработчик всё понимает!
Эволюция YAXUnit продолжается, друзья! 🚀


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SonarQube Quality Gate failed! failed

bug 0 Bugs
vulnerability 0 Vulnerabilities
code_smell 2 Code Smells

No data Coverage
duplication_lt_3 0.00% Duplication

Если КодВозврата <> 0 Тогда
Сообщение = СтрШаблон("%1 завершилась с ошибкой. Команда: `%2`; рабочий каталог: `%3`", Описание, Команда, РабочийКаталог);
Если ЮТФайлы.Существует(ФайлЛога) Тогда
Сообщение = СтрШаблон("%1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔗Уберите инициализацию параметров метода "СтрШаблон" вложенными методами

CODE_SMELL Codesmell  MINOR Minor

standard badpractice brainoverload parameters  Why is this an issue?

ИдентификаторМодуляОбъекта = "00ab4620-8498-4b18-a4f8-18b53138fcb5.0";
ИдентификаторФормы = "a10cd1fd-c4ba-437c-9925-b7354192a1ea.0";

РабочийКаталог = ЮТФайлы.ОбъединитьПути(КаталогВременныхФайлов(), "yaxunit-v8unpack");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔗Не рекомендуемый вызов функции КаталогВременныхФайлов()

CODE_SMELL Codesmell  MAJOR Major

standard badpractice  Why is this an issue?

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (11)
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (4)

21-56: Уточнить обрабатываемые ошибки при неуспешной сборке
В случае, если при сборке внешней обработки произойдёт ошибка, логика метода сейчас прервётся исключением, но при этом не выполнится дополнительная диагностика. Рассмотрите возможность перехвата исключения или детального журнала, чтобы оператору было проще отследить и устранить сбой.


28-39: Рассмотреть освобождение ресурсов после использования
Текущий код не показывает явной очистки временных директорий после успешной сборки. Для избежания переполнения диска и конфликтов с повторами сборки рекомендуется очищать временные файлы, когда они больше не нужны.


104-130: Перенести часть логики в отдельные методы
Метод ВыполнитьКомандуСистемы содержит несколько этапов (формирование команды, запуск, чтение лога и т. д.). Для улучшения читабельности и тестируемости кода имеет смысл вынести логику анализа лога или формирования сообщения об ошибке в отдельные процедуры.


118-128: Обработка кода возврата в нестандартных случаях
Если команда возвращает нестандартный код не равный 0 (например, не 1 или 2), желательно иметь отдельную обработку, чтобы быстро понимать характер проблемы.

exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl (1)

502-508: Рассмотреть расширенный лог перед выполнением тестов
Строка с выводом данных о модуле выводит минимум сведений (имя расширения, имя модуля). Для более удобной диагностики при ошибках можно расширить лог, указывая количество тестовых наборов, сложность или иные дополнительные параметры тестируемого модуля.

exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl (1)

163-164: Упростить логику, используя прямой вызов новой реализации
Учитывая, что здесь фактически вызывается ЮТФайлы.ДанныеТекстовогоФайла(…), можно рассмотреть удаление промежуточного вызова в будущем, когда устаревание станет окончательным. Это повысит читаемость и уменьшит цепочки вызовов.

tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (2)

21-27: Отразить в названии сценария суть проверяемой функциональности
Название «СкомпилирватьВнешнуюОбработку» не даёт понять, что именно этот сценарий тестирует, например: проверку корректной компиляции, запись модуля формы и т. д. Рекомендуется структурировать имена тестов с учётом конкретной цели проверки.


53-60: Дополнительно проверить корректность конфигурации внешней обработки
Функция Обработка() возвращает новый экземпляр внешней обработки. Рассмотрите возможность проверять корректность не только одного реквизита, но и других сущностей (форм, процедур), чтобы убедиться, что всё собралось корректно.

exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl (1)

88-119: Оптимизация создания СистемнаяИнформация

Рекомендуется кэшировать экземпляр СистемнаяИнформация в приватной переменной модуля для избежания повторного создания объекта при каждом вызове функций.

Предлагаемая реализация:

+#Область ПеременныеМодуля
+Перем КэшСистемнойИнформации;
+#КонецОбласти
+
+#Область ИнициализацияМодуля
+КэшСистемнойИнформации = Новый СистемнаяИнформация();
+#КонецОбласти
+
 Функция ЭтоWindows() Экспорт
-    Информация = Новый СистемнаяИнформация();
-    Возврат Информация.ТипПлатформы = ТипПлатформы.Windows_x86 Или Информация.ТипПлатформы = ТипПлатформы.Windows_x86_64;
+    Возврат КэшСистемнойИнформации.ТипПлатформы = ТипПлатформы.Windows_x86 
+        Или КэшСистемнойИнформации.ТипПлатформы = ТипПлатформы.Windows_x86_64;
 КонецФункции
exts/yaxunit/src/CommonModules/ЮТПараметрыЗапускаСлужебный/Module.bsl (1)

193-193: Изменение механизма чтения файлов.

Использование ЮТФайлы.ДанныеТекстовогоФайла вместо ЮТОбщий.ДанныеТекстовогоФайла улучшает организацию кода, централизуя операции с файлами в специализированном модуле.

exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl (1)

151-169: Добавьте обработку ошибок

Функция корректно выполняет рекурсивное копирование, но рекомендуется добавить обработку возможных ошибок при операциях с файловой системой.

 Процедура СкопироватьКаталог(КаталогИсточник, КаталогПриемник) Экспорт
+    Попытка
         Если НЕ Существует(КаталогПриемник) Тогда
             СоздатьКаталог(КаталогПриемник);
         КонецЕсли;
         
         Для Каждого Файл Из НайтиФайлы(КаталогИсточник, "*") Цикл
             
             Если СтрСравнить(Файл.ПолноеИмя, КаталогИсточник) = 0 Тогда
                 Продолжить;
             ИначеЕсли Файл.ЭтоКаталог() Тогда
                 СкопироватьКаталог(Файл.ПолноеИмя, ОбъединитьПути(КаталогПриемник, Файл.Имя));
             Иначе
                 КопироватьФайл(Файл.ПолноеИмя, ОбъединитьПути(КаталогПриемник, Файл.Имя));
             КонецЕсли;
             
         КонецЦикла;
+    Исключение
+        ВызватьИсключение НСтр("ru='Ошибка при копировании каталога: %1'") + ОписаниеОшибки();
+    КонецПопытки
 КонецПроцедуры
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fcb7c3 and ec328f5.

⛔ Files ignored due to path filters (2)
  • exts/yaxunit/src/CommonTemplates/ЮТV8UnpackWS/Template.bin is excluded by !**/*.bin
  • tools/v8unpack/v8unpack.exe is excluded by !**/*.exe
📒 Files selected for processing (21)
  • exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/ЮТВнешниеОбработкиСлужебныйСервер.mdo (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl (0 hunks)
  • exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТПараметрыЗапускаСлужебный/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl (2 hunks)
  • exts/yaxunit/src/CommonTemplates/ЮТV8UnpackWS/ЮТV8UnpackWS.mdo (1 hunks)
  • exts/yaxunit/src/Configuration/Configuration.mdo (2 hunks)
  • tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/ОМ_ЮТВнешниеОбработкиСлужебныйСервер.mdo (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТЗависимостиСлужебный/Module.bsl (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТИсполнительСлужебныйКлиент/Module.bsl (1 hunks)
  • tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl (1 hunks)
  • tests/src/Configuration/Configuration.mdo (1 hunks)
  • tools/build-template.sh (1 hunks)
  • tools/v8unpack/build-epf.bat (1 hunks)
  • tools/v8unpack/build-epf.sh (1 hunks)
  • tools/v8unpack/unpack-epf.bat (1 hunks)
  • tools/v8unpack/unpack-epf.sh (1 hunks)
💤 Files with no reviewable changes (1)
  • exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl
✅ Files skipped from review due to trivial changes (7)
  • tools/v8unpack/unpack-epf.bat
  • tools/v8unpack/build-epf.sh
  • tools/v8unpack/build-epf.bat
  • exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/ЮТВнешниеОбработкиСлужебныйСервер.mdo
  • exts/yaxunit/src/CommonTemplates/ЮТV8UnpackWS/ЮТV8UnpackWS.mdo
  • tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/ОМ_ЮТВнешниеОбработкиСлужебныйСервер.mdo
  • tools/v8unpack/unpack-epf.sh
🧰 Additional context used
🪛 Shellcheck (0.10.0)
tools/build-template.sh

[warning] 4-4: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

(SC2164)


[warning] 6-6: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

(SC2164)


[warning] 10-10: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

(SC2164)

🔇 Additional comments (8)
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (1)

34-35: Проверка результата вызова УдалитьФайлы
Хотя метод УдалитьФайлы обычно не возвращает код ошибки, в ошибочных ситуациях он может завершиться неудачей (например, при отсутствии прав). Рекомендуется логгировать результат или отлавливать исключения, чтобы при невозможности очистить каталог программа могла продолжить отработку или сообщить об этом.

exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl (1)

163-164: Убедиться в корректности вызова устаревшего метода
Вызов метода ЮТМетодыСлужебный.ВызовУстаревшегоМетода корректно ссылается на «ЮТОбщий.ДанныеТекстовогоФайла». Проверьте, что передаваемая дата устаревания ("24.12") согласуется с документацией, чтобы избежать путаницы в сроках и совместимости.

tests/src/CommonModules/ОМ_ЮТИсполнительСлужебныйКлиент/Module.bsl (1)

107-107: Корректное изменение метода чтения файла!

Переход на использование ЮТФайлы.ДанныеТекстовогоФайла соответствует общей стратегии централизации файловых операций.

exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl (1)

88-119: Корректная реализация функций определения ОС!

Функции корректно определяют тип операционной системы с учетом как 32-битных, так и 64-битных версий.

tests/src/CommonModules/ОМ_ЮТЗависимостиСлужебный/Module.bsl (1)

66-66: Корректное изменение метода чтения файла!

Переход на использование ЮТФайлы.ДанныеТекстовогоФайла соответствует общей стратегии централизации файловых операций.

tests/src/Configuration/Configuration.mdo (1)

41-41: Добавление нового общего модуля для работы с внешними обработками.

Модуль ОМ_ЮТВнешниеОбработкиСлужебныйСервер добавлен в конфигурацию, что расширяет функциональность для работы с внешними обработками.

tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl (1)

93-93: Обновление количества ожидаемых тестовых наборов.

Увеличение ожидаемого количества тестовых наборов с 40 до 41 предполагает добавление нового функционала. Убедитесь, что это изменение соответствует фактическому количеству добавленных тестов.

✅ Verification successful

Let me gather more specific information about the test sets.


Let me check the actual test sets in more detail.


Let me try a different approach to find the test methods.


Изменение количества тестовых наборов подтверждено.

Проверка кода показала, что значение 41 является корректным. В методе ЗагрузитьТесты явно проверяется количество прочитанных наборов расширения tests:

ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
    .ИмеетДлину(41);
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка количества тестовых наборов
rg -l "ДобавитьТестовыйНабор\(" tests/src/CommonModules/ | wc -l

Length of output: 68


Script:

#!/bin/bash
# Поиск всех вызовов ДобавитьТестовыйНабор в конкретном модуле
rg "ДобавитьТестовыйНабор\(" tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl -n

Length of output: 437


Script:

#!/bin/bash
# Поиск всех тестовых методов в модуле
rg "Процедура\s+Тест" tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl -n -A 1

Length of output: 239


Script:

#!/bin/bash
# Показать содержимое файла для анализа тестовых методов
cat tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl

Length of output: 7362

exts/yaxunit/src/Configuration/Configuration.mdo (1)

58-58: Конфигурация корректно дополнена

Добавление нового шаблона и модуля выполнено корректно.

Also applies to: 68-68

@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (12)
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (6)

21-56: Удобная капсулированная функция для компиляции внешней обработки
Функция эффективно собирает внешнюю обработку, учитывая разные окружения и корректно формируя итоговый файл “out.epf”. Желательно добавить краткие комментарии по аргументам (например, когда “ТекстМодуляОбъект” или “ТекстМодуляФормы” не заданы).


28-28: Рассмотрите переход на асинхронные аналоги для работы с файлами
Код использует синхронные методы “КаталогВременныхФайлов”, “УдалитьФайлы”, “СоздатьКаталог”, что отмечено как BSLLS:UsingSynchronousCalls-off. По возможности стоит перейти на асинхронные аналоги, чтобы не блокировать выполнение при работе с файловой системой в масштабируемых сценариях.

Also applies to: 34-35


62-74: Корректная подготовка рабочего каталога
Процедура “ПодготовитьРабочийКаталог” аккуратно проверяет существование каталога, а при отсутствии извлекает нужные файлы из zip-архива. В то же время по возможности используйте методы асинхронного поиска и создания каталогов, чтобы соответствовать рекомендациям статического анализатора и не блокировать основной поток.


76-90: Процедура “РаспаковатьОбработку”
Логика проверки существования каталога “unpack” и выбор компроманд для Windows или Linux окружения выглядит последовательно. Обратите внимание, что путь “/bin/bash” помечен как hardcode. Если возможно, реализуйте более универсальный механизм определения пути к оболочке в Unix-системах.


92-102: Процедура “СобратьОбработку”
Аналогично “РаспаковатьОбработку” здесь жёстко прописан “/bin/bash”. Желательно обеспечить определение необходимых путей в конфигурационных настройках или вынести путь к bash в параметры, дабы повысить переносимость решения.


132-143: Платформозависимый вызов COM-объекта
При использовании “COMОбъект(“WScript.Shell”)” важно учитывать, что такой вызов недоступен в Unix. В блоке #Если НЕ ВебКлиент для Windows это оправдано, но в дальнейшем, возможно, стоит предусмотреть альтернативный путь для других платформ.

exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl (5)

134-134: Использование синхронного метода “УдалитьФайлы”
Команда “УдалитьФайлы” помечена как синхронный вызов. Если в будущем потребуется более масштабная или параллельная работа с файловой системой, рассмотрите асинхронный метод, дабы избежать потенциальных блокировок.


151-174: Процедура “СкопироватьКаталог”
Отличная реализация рекурсивного копирования каталога, однако видим синхронные вызовы “СоздатьКаталог”, “НайтиФайлы”, “КопироватьФайл”. Статический анализатор рекомендует использовать их асинхронные аналоги для повышения отзывчивости системы.


186-186: Асинхронные методы vs. “СоздатьКаталог”
Так же, как и выше, метод “СоздатьКаталог” продолжает использоваться синхронно. Если асинхронная работа с ФС не критична — можно оставить, но выполняйте тщательное тестирование, чтобы избежать задержек, когда вызывается в циклах.


202-223: Функция “ДанныеТекстовогоФайла”
Реализовано чтение файла в кодировке UTF-8 с обработкой сценария веб-клиента (#Если НЕ ВебКлиент). Это верно с точки зрения безопасности и совместимости. Рекомендуется добавить короткий комментарий об объёме файлов, который вы ожидаете прочитать, чтобы избежать проблем с большим содержимым.


224-241: Процедура “ЗаписатьТекстВФайла”
Аналогично чтению файла, запись в кодировке UTF-8 корректна, и есть защита для веб-клиента. Если ожидается частая перезапись файлов большого размера, подумайте о контроле возможных ошибок (достаточно места на диске, права доступа и т.д.).

.github/workflows/step-export-xml.yml (1)

35-43: Рекомендуется добавить документацию о использовании merge ref

Хотя логика checkout корректна, стоит добавить комментарий, объясняющий почему используется refs/pull/*/merge для PR событий.

Предлагаемое дополнение:

    - name: Извлечение исходников PR
      if: github.event_name == 'pull_request_target' || github.event_name == 'pull_request'
      uses: actions/checkout@v4
      with:
+       # Используем merge ref для проверки результата слияния PR с целевой веткой
        ref: refs/pull/${{ github.event.number }}/merge
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ec328f5 and 03a360b.

📒 Files selected for processing (4)
  • .github/workflows/step-export-xml.yml (3 hunks)
  • exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (1 hunks)
  • exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl (4 hunks)
  • tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/src/CommonModules/ОМ_ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl
🔇 Additional comments (6)
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (2)

1-18: Лицензионное соглашение корректно оформлено
Публикация лицензии Apache 2.0 в кодовой базе выглядит стандартно и не вызывает вопросов.


104-130: Использование синхронного метода “ЗапуститьПриложение”
Согласно существующему комментарию GitHub Actions, следует заменить “ЗапуститьПриложение” на асинхронный аналог для недопущения блокирующего вызова. Эта рекомендация уже упоминалась ранее.

.github/workflows/step-export-xml.yml (4)

8-22: Корректное добавление входных и выходных параметров!

Изменения улучшают переиспользуемость рабочего процесса за счет конфигурируемого имени артефакта и опционального режима только движка.


66-70: Увеличение таймаута установки EDT

Увеличение таймаута до 30 минут для установки EDT выглядит обоснованным, учитывая возможные задержки при загрузке.


Line range hint 116-122: Корректная настройка публикации артефакта!

Настройки публикации оптимальны:

  • Динамическое имя артефакта
  • Однодневное хранение
  • Обработка ошибок при отсутствии файлов

78-108: Проверить достаточность таймаутов для конвертации

Установлены одинаковые таймауты (15 минут) для всех операций конвертации. Необходимо убедиться, что этого времени достаточно для больших конфигураций.

✅ Verification successful

Таймаут в 15 минут является достаточным

Анализ размера каталогов показывает относительно небольшой объем данных для конвертации:

  • exts/yaxunit: 3.5 МБ
  • tests: 698 КБ
  • exts/smoke: 66 КБ

Общее количество файлов (481) и размер каталогов указывают на то, что установленного таймаута в 15 минут более чем достаточно для выполнения операций конвертации. Стандартная конвертация файлов такого объема обычно занимает не более 2-3 минут.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка истории выполнения workflow для анализа времени выполнения

gh run list --workflow=step-export-xml.yml --limit 10 --json durationInMinutes \
  | jq -r '.[] | .durationInMinutes'

Length of output: 358


Script:

#!/bin/bash
# Проверка истории выполнения workflow с использованием доступных полей
gh run list --workflow=step-export-xml.yml --limit 10 --json startedAt,updatedAt \
  | jq -r '.[] | (.updatedAt | fromdateiso8601 | strftime("%Y-%m-%d %H:%M:%S")) as $end | (.startedAt | fromdateiso8601 | strftime("%Y-%m-%d %H:%M:%S")) as $start | "Начало: \($start) Окончание: \($end)"'

Length of output: 681


Script:

#!/bin/bash
# Проверка размера исходных каталогов для оценки объема конвертации
echo "Размер каталога exts/yaxunit:"
du -sh exts/yaxunit 2>/dev/null || echo "Каталог не найден"

echo -e "\nРазмер каталога tests:"
du -sh tests 2>/dev/null || echo "Каталог не найден"

echo -e "\nРазмер каталога exts/smoke:"
du -sh exts/smoke 2>/dev/null || echo "Каталог не найден"

echo -e "\nСписок файлов в каталогах:"
find exts/yaxunit tests exts/smoke -type f 2>/dev/null | wc -l

Length of output: 427

@alkoleft alkoleft merged commit ab80185 into develop Dec 18, 2024
7 of 11 checks passed
@alkoleft alkoleft deleted the feature/468 branch December 18, 2024 21:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Компиляция обработок из текста тестового модуля
1 participant