-
Notifications
You must be signed in to change notification settings - Fork 9
Подготовка к поддержке V2 и исправление ошибки в 1.6.0 #43
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
Conversation
## Walkthrough
В проект добавлены новые модули для определения окружения, выбора подходящего дистрибутива и работы с интернет-соединением, а также полностью переработана логика получения и выбора версий дистрибутивов. Зависимости обновлены и расширены, добавлены тесты для проверки выбора дистрибутива, внедрён workflow тестирования.
## Changes
| Файл/Группа файлов | Краткое описание изменений |
|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| packagedef | Обновлены версии зависимостей, добавлены и удалены зависимости, обновлены dev-зависимости. |
| src/core/Классы/ВерсииOneScript.os | Переписана логика получения версий: делегирование провайдеру, удалён прямой HTTP/JSON, добавлен regex semver.|
| src/core/Классы/ДетекторОкружения.os | Новый модуль: определение типа платформы и архитектуры процессора. |
| src/core/Классы/ОпределительДистрибутива.os | Новый модуль: выбор подходящего дистрибутива по окружению и параметрам. |
| src/core/Классы/ПараметрыOVM.os | Перенесена инициализация, добавлены типы возвращаемых значений, удалён regex semver. |
| src/core/Классы/ПровайдерДистрибутивовВерсии.os | Новый модуль: получение списка версий и файлов дистрибутивов через API. |
| src/core/Классы/УстановщикOneScript.os | Удалена ручная работа с прокси, делегирование фабрике соединения и определителю дистрибутива. |
| src/core/Классы/ФабрикаИнтернетСоединения.os | Новый модуль: создание интернет-соединения с учётом прокси. |
| src/core/Классы/ДубСПроцессором.os | Новый модуль: класс Дуб с информацией о процессоре для детектора окружения. |
| src/cmd/ovm.os | Удалена инициализация компонентов и аннотаций, остался только запуск приложения. |
| tests/distrSelectorTests.os | Новый набор тестов: проверка выбора дистрибутива по платформе, архитектуре и флагам. |
| tests/oscript.cfg | Новый конфиг: путь к системным библиотекам для тестов. |
| .github/workflows/testing.yml | Новый workflow: автоматическое тестирование на разных версиях и движках. |
| tasks/coverage.os | Упрощено чтение JSON-отчёта покрытия с помощью ЧтениеJSON. |
## Sequence Diagram(s)
```mermaid
sequenceDiagram
participant Installer as Установщик
participant DistrProvider as ПровайдерДистрибутивов
participant DistrSelector as ОпределительДистрибутива
participant EnvDetector as ДетекторОкружения
participant Factory as ФабрикаИнтернетСоединения
Installer->>Factory: Создать соединение
Installer->>DistrProvider: ПолучитьСписокДоступныхКУстановкеВерсий()
DistrProvider->>Factory: Создать соединение
DistrProvider->>DistrProvider: HTTP GET api/archive
DistrProvider-->>Installer: Таблица версий
Installer->>DistrProvider: ПолучитьДоступныеВидыДистрибутивовВерсии(версия)
DistrProvider->>Factory: Создать соединение
DistrProvider->>DistrProvider: HTTP GET api/archive?all=true
DistrProvider->>DistrProvider: HTTP GET api/archive/<token>
DistrProvider-->>Installer: Таблица файлов дистрибутивов
Installer->>EnvDetector: Получить платформу и архитектуру
Installer->>DistrSelector: Выбрать(таблица файлов)
DistrSelector->>EnvDetector: Получить платформу/архитектуру
DistrSelector-->>Installer: Ссылка на подходящий дистрибутив Possibly related PRs
Suggested reviewers
Poem
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (3)
src/core/Классы/ПровайдерДистрибутивовВерсии.os (1)
76-89
: Предложение по оптимизации поиска токенаТекущий поиск токена использует линейный перебор. Для больших списков версий можно рассмотреть использование соответствия для ускорения поиска.
- ИскомыйТокенВерсии = Неопределено; - Для Каждого ОписаниеВерсии Из МассивВерсий Цикл - Если НомерВерсии = ОписаниеВерсии.presentation Тогда - ИскомыйТокенВерсии = ОписаниеВерсии.token; - КонецЕсли; - КонецЦикла; + СоответствиеТокенов = Новый Соответствие; + Для Каждого ОписаниеВерсии Из МассивВерсий Цикл + СоответствиеТокенов.Вставить(ОписаниеВерсии.presentation, ОписаниеВерсии.token); + КонецЦикла; + ИскомыйТокенВерсии = СоответствиеТокенов.Получить(НомерВерсии);tests/distrSelectorTests.os (2)
221-225
: Вынести бизнес-логику в отдельную функциюСложная условная логика для определения типа дистрибутива усложняет понимание кода и должна быть вынесена в отдельную функцию.
+Функция ОпределитьВидДистрибутива(ИспользоватьFDD, ОжидаемыйДистрибутив) + Вид = ?(ИспользоватьFDD, "fdd", ОжидаемыйДистрибутив); + + Если ИспользоватьFDD и ОжидаемыйДистрибутив = "zip" Тогда + // Для версии 1 ключ fdd не должен влиять на результат + // т.к. все версии 1 являются "fdd" (framework dependent) + Вид = "zip"; + КонецЕсли; + + Возврат Вид; +КонецФункции - Вид = ?(ИспользоватьFDD, "fdd", ОжидаемыйДистрибутив); - Арх = ?(ИспользоватьХ64, Арх64, Арх32); - - Если ИспользоватьFDD и ОжидаемыйДистрибутив = "zip" Тогда - // Для версии 1 ключ fdd не должен влиять на результат - // т.к. все версии 1 являются "fdd" (framework dependent) - Вид = "zip"; - КонецЕсли; + Вид = ОпределитьВидДистрибутива(ИспользоватьFDD, ОжидаемыйДистрибутив); + Арх = ?(ИспользоватьХ64, Арх64, Арх32);
305-307
: Переместить инициализацию глобальных переменных в начало файлаИнициализация глобальных переменных в конце файла нарушает конвенции и усложняет понимание кода.
// Переместить эти строки после объявления переменных в строках 10-11 -/////////////////////////// -Арх32 = "x86"; -Арх64 = "x64";И добавить инициализацию после строки 12:
Перем Арх32; Перем Арх64; +/////////////////////////// +Арх32 = "x86"; +Арх64 = "x64";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
packagedef
(1 hunks)src/core/Классы/ВерсииOneScript.os
(4 hunks)src/core/Классы/ДетекторОкружения.os
(1 hunks)src/core/Классы/ОпределительДистрибутива.os
(1 hunks)src/core/Классы/ПараметрыOVM.os
(5 hunks)src/core/Классы/ПровайдерДистрибутивовВерсии.os
(1 hunks)src/core/Классы/УстановщикOneScript.os
(5 hunks)src/core/Классы/ФабрикаИнтернетСоединения.os
(1 hunks)tests/distrSelectorTests.os
(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
src/core/Классы/УстановщикOneScript.os (1)
Learnt from: EvilBeaver
PR: oscript-library/ovm#41
File: src/core/Классы/УстановщикOneScript.os:366-377
Timestamp: 2025-05-22T17:19:26.238Z
Learning: В функции ПолучитьПутьКСкачиваниюФайла класса УстановщикOneScript при поиске дистрибутива через алиас сначала выполняется поиск по типу дистрибутива текущей платформы, а затем в случае неудачи - по типу дистрибутива "zip", при этом критерий архитектуры (x86/x64) должен сохраняться неизменным в обоих поисках.
🔇 Additional comments (25)
src/core/Классы/ДетекторОкружения.os (1)
1-27
: Отличная реализация детектора окружения с ленивой инициализацией!Код хорошо структурирован и правильно использует паттерн ленивой инициализации для избежания тяжелых операций при создании объекта. Логика инициализации понятна, а экспортируемые методы корректно обеспечивают инициализацию перед возвратом данных.
src/core/Классы/ФабрикаИнтернетСоединения.os (2)
1-28
: Хорошая организация dependency injection параметров прокси.Использование аннотаций
&Деталька
для внедрения параметров прокси обеспечивает чистую архитектуру и возможность конфигурации извне.
29-75
: Отличная реализация фабрики HTTP-соединений с комплексной поддержкой прокси.Логика корректно обрабатывает все основные сценарии:
- Системный прокси при незаполненном сервере
- Ручная настройка прокси для HTTP и HTTPS протоколов
- Отключение прокси при необходимости
Установка таймаута в 10 секунд является разумным значением по умолчанию.
packagedef (1)
19-19
: Добавление зависимости для разработки moskito выглядит обоснованно.Согласно описанию PR, moskito - это инструмент для мокирования системной информации, что полезно для тестирования новых модулей определения окружения.
src/core/Классы/ПараметрыOVM.os (2)
8-8
: Изменение аннотации конструктора на&Дуб
соответствует паттерну синглтона.Переход с
&Желудь
на&Дуб
указывает на изменение стратегии создания объекта в IoC-контейнере, что логично для класса параметров системы.
17-17
: Отличное добавление аннотаций типов для улучшения типобезопасности.Аннотации
&Завязь
с указанием типов возвращаемых значений улучшают качество кода, помогают IDE в автодополнении и системе рефлексии в понимании контрактов методов.Also applies to: 37-37, 47-47, 56-56
src/core/Классы/УстановщикOneScript.os (5)
17-21
: Отличная архитектурная модернизация зависимостейВведение новых зависимостей
ФабрикаИнтернетСоединения
иДетекторОкружения
значительно улучшает архитектуру модуля. Это отделяет ответственность за создание интернет-соединений и определение окружения от основной логики установки.
115-115
: Упрощение создания HTTP-соединенияЗамена ручного создания HTTP-соединения с настройкой прокси на использование фабрики значительно упрощает код и централизует логику управления соединениями.
251-251
: Централизация маски версииПеренос регулярного выражения для проверки версии в модуль
ВерсииOneScript
улучшает модульность и устраняет дублирование кода.
269-276
: Превосходное упрощение логики выбора дистрибутиваНовая логика с использованием
ОпределительДистрибутива
значительно упрощает и инкапсулирует сложную логику выбора дистрибутива. Использование fluent-интерфейса делает код более читаемым и поддерживаемым.
290-290
: Чистая делегация выбора дистрибутиваДелегирование выбора дистрибутива в специализированный класс отличное решение для разделения ответственности.
src/core/Классы/ВерсииOneScript.os (4)
12-13
: Хорошее разделение ответственностиДобавление зависимости
ПровайдерДистрибутивовВерсии
отлично отделяет логику работы с API от основной логики управления версиями.
221-232
: Правильная делегация с сохранением дополнительной логикиДелегирование получения списка версий в провайдер сохраняет при этом важную логику дополнения алиасами. Это хорошо балансирует разделение ответственности с функциональностью.
251-251
: Простая и эффективная делегацияПолная делегация функции получения дистрибутивов версии в провайдер упрощает код и устраняет дублирование HTTP-логики.
344-352
: Отличное добавление семантической валидации версийДобавление функции
МаскаНомераВерсииSemver()
с официальным regex для семантического версионирования значительно улучшает валидацию версий. Использование стандартного regex из semver.org обеспечивает корректность.src/core/Классы/ПровайдерДистрибутивовВерсии.os (3)
1-9
: Хорошая структура нового модуляНовый модуль правильно использует dependency injection через
ФабрикаИнтернетСоединения
иАдресСайтаОСкрипт
. Архитектура соответствует принципам SOLID.
18-45
: Качественная реализация получения списка версийФункция корректно обрабатывает HTTP-запрос, проверяет статус ответа и парсит JSON. Структура возвращаемой таблицы соответствует ожиданиям.
62-122
: Комплексная и надёжная логика получения дистрибутивовФункция правильно реализует двухэтапный процесс:
- Получение всех версий для поиска токена
- Получение файлов конкретной версии по токену
Обработка ошибок всесторонняя, включает детальные сообщения об ошибках.
src/core/Классы/ОпределительДистрибутива.os (5)
1-24
: Отличная реализация fluent-интерфейсаКласс правильно реализует fluent-интерфейс с возвратом
ЭтотОбъект
, что делает код более читаемым и позволяет цепочечные вызовы. Инкапсуляция состояния в переменных модуля корректна.
26-43
: Хорошо продуманная логика выбора дистрибутиваЛогика выбора типа дистрибутива учитывает все необходимые сценарии:
- Явное указание Netcore версии
- Использование FDD
- Режим алиаса с определением типа по доступным файлам
Особенно хорошо реализован fallback для режима алиаса.
49-84
: Надёжная логика поиска дистрибутива с fallbackФункция правильно реализует поиск по критериям с fallback на "zip" тип для режима алиаса. Обработка ошибок детальная и информативная.
86-112
: Полная поддержка платформ и архитектурЛогика определения типа дистрибутива поддерживает все основные платформы (Windows, Linux, macOS) и правильно обрабатывает различные архитектуры, включая ARM64 для macOS.
99-106
:❓ Verification inconclusive
Проверить логику определения ARM архитектуры на macOS
Логика определения ARM архитектуры выглядит корректно, но стоит убедиться, что
ДетекторОкружения.АрхитектураПроцессора()
правильно определяет ARM архитектуры на всех версиях macOS.
🏁 Script executed:
#!/bin/bash # Проверим логику определения архитектуры процессора в ДетекторОкружения ast-grep --pattern 'Функция АрхитектураПроцессора() $_ $$$ КонецФункции'Length of output: 76
Давайте попробуем найти реализацию и упоминания метода через ripgrep:
🏁 Script executed:
#!/bin/bash # Ищем определение функции АрхитектураПроцессора и все её вхождения rg -n "Функция АрхитектураПроцессора" -g "*.os" rg -n "ДетекторОкружения" -g "*.os" rg -n "АрхитектураПроцессора" -g "*.os" -C 2Length of output: 2460
Чтобы убедиться в корректности логики, выведем тело функции
АрхитектураПроцессора
в файлеsrc/core/Классы/ДетекторОкружения.os
:
🏁 Script executed:
#!/bin/bash # Выводим тело функции АрхитектураПроцессора в ДетекторОкружения.os file="src/core/Классы/ДетекторОкружения.os" line=$(grep -n 'Функция АрхитектураПроцессора' "$file" | cut -d: -f1) sed -n "$((line-5)),$((line+50))p" "$file"Length of output: 1130
Чтобы убедиться в корректности отображения архитектуры, выведем код класса
ИнформацияОПроцессоре
и перечисленияАрхитектурыПроцессоров
:
🏁 Script executed:
#!/bin/bash # Найти и отобразить код класса ИнформацияОПроцессоре file_info=$(rg -l "ИнформацияОПроцессоре" -g "*.os" | head -n1) echo "=== $file_info ===" sed -n '1,200p' "$file_info" # Найти и отобразить перечисление АрхитектурыПроцессоров file_enum=$(rg -l "АрхитектурыПроцессоров" -g "*.os" | head -n1) echo "=== $file_enum ===" sed -n '1,200p' "$file_enum"Length of output: 7161
Чтобы проверить, что в перечислении
АрхитектурыПроцессоров
точно есть значенияARM
иARM64
, выведем его определение:#!/bin/bash # Найти и показать перечисление АрхитектурыПроцессоров с ближайшими строками rg -n "Перечисление АрхитектурыПроцессоров" -g "src/**/*.os" -A 20
Для проверки наличия значений
ARM
иARM64
в перечисленииАрхитектурыПроцессоров
запустим поиск его определения:#!/bin/bash # Показать определение перечисления АрхитектурыПроцессоров с ближайшими строками rg -n "Перечисление АрхитектурыПроцессоров" -g "*.os" -A 20
Чтобы убедиться, что в перечислении
АрхитектурыПроцессоров
есть нужные значения, выведем его определение:#!/bin/bash # Показать определение перечисления АрхитектурыПроцессоров rg -n "Перечисление АрхитектурыПроцессоров" -g "src/**/*.os" -A 20
Для подтверждения наличия значений
ARM
иARM64
в перечисленииАрхитектурыПроцессоров
выполним поиск определения этого перечисления:#!/bin/bash # Показать определение перечисления АрхитектурыПроцессоров с контекстом rg -n "Перечисление АрхитектурыПроцессоров" -g "src/**/*.os" -A 10
Проверьте перечисление и возвращаемые значения архитектуры
Перед этим участком кода убедитесь, что:
- В
Перечисление АрхитектурыПроцессоров
действительно объявлены константы ARM и ARM64.- Метод
ИнформацияОПроцессоре.Архитектура
возвращает строковые значения точно совпадающие с этими константами ("ARM"
и"ARM64"
).- Мок в тестах подставляет такие же строки, чтобы сравнение
АрхитектурыПроцессоров.ARM
/.ARM64
проходило корректно.Текущий код:
АрхитектураПроцессора = ДетекторОкружения.АрхитектураПроцессора(); Если АрхитектураПроцессора = АрхитектурыПроцессоров.ARM Или АрхитектураПроцессора = АрхитектурыПроцессоров.ARM64 Тогда Возврат "osx-arm64"; Иначе Возврат "osx-x64"; КонецЕсли;
Проверьте, что перечисление и возвращаемые значения из
ИнформацияОПроцессоре
синхронизированы и соответствуют используемым в тестах строкам.tests/distrSelectorTests.os (2)
5-8
: Хорошая организация импортовИмпорты корректно организованы с использованием относительных путей и необходимых библиотек для тестирования.
270-281
: Качественная реализация мокирования окруженияФункция
МокОкружения
хорошо инкапсулирует логику создания мок-объектов с правильными значениями по умолчанию для архитектуры.
Процедура УниверсальныйТестВерсии( | ||
ПереченьФайлов, | ||
ИспользоватьFDD, | ||
ИспользоватьХ64, | ||
ЭтоВерсия2, | ||
Платформа, | ||
ОжидаемыйДистрибутив, | ||
ТекстИсключения = Неопределено, | ||
Архитектура = Неопределено) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Упростить сигнатуру функции УниверсальныйТестВерсии
Функция принимает 8 параметров, что нарушает принцип чистого кода и усложняет понимание и сопровождение кода.
Рекомендуется использовать структуру параметров:
-Процедура УниверсальныйТестВерсии(
- ПереченьФайлов,
- ИспользоватьFDD,
- ИспользоватьХ64,
- ЭтоВерсия2,
- Платформа,
- ОжидаемыйДистрибутив,
- ТекстИсключения = Неопределено,
- Архитектура = Неопределено)
+Процедура УниверсальныйТестВерсии(ПараметрыТеста)
+
+ // ПараметрыТеста должна содержать:
+ // - ПереченьФайлов
+ // - ИспользоватьFDD
+ // - ИспользоватьХ64
+ // - ЭтоВерсия2
+ // - Платформа
+ // - ОжидаемыйДистрибутив
+ // - ТекстИсключения (необязательно)
+ // - Архитектура (необязательно)
Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In tests/distrSelectorTests.os around lines 200 to 208, the function
УниверсальныйТестВерсии has a long signature with 8 parameters, making it hard
to read and maintain. Refactor the function to accept a single parameter object
or structure that contains all these parameters as named fields. Update the
function implementation and all its call sites accordingly to use this parameter
structure for cleaner and more maintainable code.
Процедура ДляФайловВерсии1СФлагомFDDИАлиасомНеНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт | ||
|
||
УниверсальныйТестВерсии( | ||
ПереченьФайловВерсии1(), | ||
Истина, | ||
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | ||
Неопределено, | ||
ТипПлатформы[ОС], | ||
"zip", | ||
"Вид=fdd", | ||
Архитектура | ||
); | ||
|
||
КонецПроцедуры | ||
|
||
&ПараметризованныйТест | ||
&ИсточникЗначение("Windows_x86_64", Неопределено) | ||
&ИсточникЗначение("Windows_x86", Неопределено) | ||
&ИсточникЗначение("Linux_x86", Неопределено) | ||
&ИсточникЗначение("Linux_x86_64", Неопределено) | ||
&ИсточникЗначение("MacOS_x86_64", "X64") | ||
&ИсточникЗначение("MacOS_x86_64", "ARM64") | ||
Процедура ДляФайловВерсии1БезФлагаFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт | ||
|
||
УниверсальныйТестВерсии( | ||
ПереченьФайловВерсии1(), | ||
Ложь, | ||
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | ||
Неопределено, | ||
ТипПлатформы[ОС], | ||
"zip", | ||
Неопределено, | ||
Архитектура | ||
); | ||
|
||
КонецПроцедуры | ||
|
||
&ПараметризованныйТест | ||
&ИсточникЗначение("Windows_x86_64", Неопределено) | ||
&ИсточникЗначение("Windows_x86", Неопределено) | ||
&ИсточникЗначение("Linux_x86", Неопределено) | ||
&ИсточникЗначение("Linux_x86_64", Неопределено) | ||
&ИсточникЗначение("MacOS_x86_64", "X64") | ||
&ИсточникЗначение("MacOS_x86_64", "ARM64") | ||
Процедура ДляФайловВерсии2СФлагомFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт | ||
|
||
УниверсальныйТестВерсии( | ||
ПереченьФайловВерсии2(), | ||
Истина, | ||
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | ||
Неопределено, | ||
ТипПлатформы[ОС], | ||
"fdd", | ||
Неопределено, | ||
Архитектура | ||
); | ||
|
||
КонецПроцедуры | ||
|
||
&ПараметризованныйТест | ||
&ИсточникЗначение("Windows_x86_64", Неопределено, "scd-win") | ||
&ИсточникЗначение("Windows_x86", Неопределено, "scd-win") | ||
&ИсточникЗначение("Linux_x86", Неопределено, "scd-lin") | ||
&ИсточникЗначение("Linux_x86_64", Неопределено, "scd-lin") | ||
&ИсточникЗначение("MacOS_x86_64", "X64", "osx-x64") | ||
&ИсточникЗначение("MacOS_x86_64", "ARM64", "osx-arm64") | ||
Процедура ДляФайловВерсии2БезФлагаFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура, Знач Дистр) Экспорт | ||
|
||
УниверсальныйТестВерсии( | ||
ПереченьФайловВерсии2(), | ||
Истина, | ||
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | ||
Неопределено, | ||
ТипПлатформы[ОС], | ||
Дистр, | ||
Неопределено, | ||
Архитектура | ||
); | ||
|
||
КонецПроцедуры |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Рефакторинг дублированного кода в тестовых процедурах
Тестовые процедуры в этом разделе содержат значительное дублирование кода. Все процедуры следуют одинаковому шаблону и отличаются только параметрами вызова УниверсальныйТестВерсии
.
Рекомендуется создать обобщенную процедуру для уменьшения дублирования:
+Процедура ВыполнитьТестДляВсехПлатформ(ФункцияПолученияФайлов, ИспользоватьFDD, ЭтоВерсия2, ОжидаемыйДистрибутив, ТекстИсключения = Неопределено)
+
+ МассивПлатформ = Новый Массив;
+ МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "Windows_x86_64", Неопределено));
+ МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "Windows_x86", Неопределено));
+ // ... добавить остальные платформы
+
+ Для Каждого Платформа Из МассивПлатформ Цикл
+ УниверсальныйТестВерсии(
+ ФункцияПолученияФайлов(),
+ ИспользоватьFDD,
+ СтрЗаканчиваетсяНа(Платформа.ОС, "_x86_64"),
+ ЭтоВерсия2,
+ ТипПлатформы[Платформа.ОС],
+ ОжидаемыйДистрибутив,
+ ТекстИсключения,
+ Платформа.Архитектура
+ );
+ КонецЦикла;
+
+КонецПроцедуры
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Процедура ДляФайловВерсии1СФлагомFDDИАлиасомНеНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт | |
УниверсальныйТестВерсии( | |
ПереченьФайловВерсии1(), | |
Истина, | |
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | |
Неопределено, | |
ТипПлатформы[ОС], | |
"zip", | |
"Вид=fdd", | |
Архитектура | |
); | |
КонецПроцедуры | |
&ПараметризованныйТест | |
&ИсточникЗначение("Windows_x86_64", Неопределено) | |
&ИсточникЗначение("Windows_x86", Неопределено) | |
&ИсточникЗначение("Linux_x86", Неопределено) | |
&ИсточникЗначение("Linux_x86_64", Неопределено) | |
&ИсточникЗначение("MacOS_x86_64", "X64") | |
&ИсточникЗначение("MacOS_x86_64", "ARM64") | |
Процедура ДляФайловВерсии1БезФлагаFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт | |
УниверсальныйТестВерсии( | |
ПереченьФайловВерсии1(), | |
Ложь, | |
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | |
Неопределено, | |
ТипПлатформы[ОС], | |
"zip", | |
Неопределено, | |
Архитектура | |
); | |
КонецПроцедуры | |
&ПараметризованныйТест | |
&ИсточникЗначение("Windows_x86_64", Неопределено) | |
&ИсточникЗначение("Windows_x86", Неопределено) | |
&ИсточникЗначение("Linux_x86", Неопределено) | |
&ИсточникЗначение("Linux_x86_64", Неопределено) | |
&ИсточникЗначение("MacOS_x86_64", "X64") | |
&ИсточникЗначение("MacOS_x86_64", "ARM64") | |
Процедура ДляФайловВерсии2СФлагомFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура) Экспорт | |
УниверсальныйТестВерсии( | |
ПереченьФайловВерсии2(), | |
Истина, | |
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | |
Неопределено, | |
ТипПлатформы[ОС], | |
"fdd", | |
Неопределено, | |
Архитектура | |
); | |
КонецПроцедуры | |
&ПараметризованныйТест | |
&ИсточникЗначение("Windows_x86_64", Неопределено, "scd-win") | |
&ИсточникЗначение("Windows_x86", Неопределено, "scd-win") | |
&ИсточникЗначение("Linux_x86", Неопределено, "scd-lin") | |
&ИсточникЗначение("Linux_x86_64", Неопределено, "scd-lin") | |
&ИсточникЗначение("MacOS_x86_64", "X64", "osx-x64") | |
&ИсточникЗначение("MacOS_x86_64", "ARM64", "osx-arm64") | |
Процедура ДляФайловВерсии2БезФлагаFDDИАлиасомНаходитДистрибутив(Знач ОС, Знач Архитектура, Знач Дистр) Экспорт | |
УниверсальныйТестВерсии( | |
ПереченьФайловВерсии2(), | |
Истина, | |
СтрЗаканчиваетсяНа(ОС, "_x86_64"), | |
Неопределено, | |
ТипПлатформы[ОС], | |
Дистр, | |
Неопределено, | |
Архитектура | |
); | |
КонецПроцедуры | |
Процедура ВыполнитьТестДляВсехПлатформ(ФункцияПолученияФайлов, ИспользоватьFDD, ЭтоВерсия2, ОжидаемыйДистрибутив, ТекстИсключения = Неопределено) | |
МассивПлатформ = Новый Массив; | |
МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "Windows_x86_64", Неопределено)); | |
МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "Windows_x86", Неопределено)); | |
МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "Linux_x86", Неопределено)); | |
МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "Linux_x86_64", Неопределено)); | |
МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "MacOS_x86_64", "X64")); | |
МассивПлатформ.Добавить(Новый Структура("ОС, Архитектура", "MacOS_x86_64", "ARM64")); | |
Для Каждого Платформа Из МассивПлатформ Цикл | |
УниверсальныйТестВерсии( | |
ФункцияПолученияФайлов(), | |
ИспользоватьFDD, | |
СтрЗаканчиваетсяНа(Платформа.ОС, "_x86_64"), | |
ЭтоВерсия2, | |
ТипПлатформы[Платформа.ОС], | |
ОжидаемыйДистрибутив, | |
ТекстИсключения, | |
Платформа.Архитектура | |
); | |
КонецЦикла; | |
КонецПроцедуры |
🤖 Prompt for AI Agents
In tests/distrSelectorTests.os around lines 24 to 103, the test procedures have
significant code duplication as they all call УниверсальныйТестВерсии with
varying parameters. Refactor by creating a single generalized procedure that
accepts parameters for the values that differ (such as file list, flags,
platform type, format, alias, and architecture) and then call
УниверсальныйТестВерсии inside it. Replace the existing specific test procedures
with calls to this generalized procedure using the appropriate arguments to
reduce duplication and improve maintainability.
src/core/Классы/ДетекторОкружения.os
Outdated
|
||
&Желудь | ||
Процедура ПриСозданииОбъекта() | ||
// получение cpuinfo тяжелая операция с запуском процессов |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Думаю, идеоматично будет обернуть информацию о процессоре в завязь, а сюда внедрить табакерку. Инициализация желудя будет при первом запросе из табакерки
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я пока не осознал концепт и пользу табакерок... Можешь разжевать?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
табакерка это Lazy? Я могу просто в геттере дергать Табакерка.Достать()? Оно кеширует результат?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Табакерка - это ObjectProvider. Если никто явно не требует внедрения жёлудя-одиночки, то он не инициализируется, да.
И да, Табакерка.Достать() сделегирует вызов в Поделка.НайтиЖелудь и там сработает обычный поиск желудей-одиночек в мапе (и отложенная инициализация, если его никто ещё не запрашивал).
Естественно, все меняется, если ты объявишь жёлудь Компанейским, но тут это не нужно.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Все же я не очень понимаю прелесть табакерок. Если я хочу ленивую инициализацию, то я должен по-сути нарушить инкапсуляцию ДетектораОкружения. Каждый клиент этого желудя должен знать, что его нельзя инжектить напрямую, надо определять табакерки. Т.е. клиент класса должен знать его внутреннее устройство...
Или я неверно использую табакерку. Я делаю так:
// Класс ДетекторОкружения
&Желудь
Процедура ПриСозданииОбъекта() // Тяжелый конструктор
СистемнаяИнформация = Новый СистемнаяИнформация;
ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре;
КонецПроцедуры
и вот так использую в УстановщикOneScript
// Класс УстановщикOneScript
&Табакерка
&Пластилин("ДетекторОкружения")
Перем ПровайдерДетектораОкружения;
Т.е. я должен знать внутреннее устройство прилепляемого класса, чтобы не прилеплять его напрямую. Мне кажется это как-то неправильно.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Но мне кажется это прям оверкилл для класса из двух полей
Так ты это делаешь не для класса из двух полей, ты табакерку вещаешь на поле\параметр конструктора в определителе дистрибутива, он в данном случае будет управлять ленивым получением детектора, тогда когда ему это потребуется, а класс из двух полей останется просто классом из двух полей
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sfaqer как тебе идея?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Но мне кажется это прям оверкилл для класса из двух полей
Так ты это делаешь не для класса из двух полей, ты табакерку вещаешь на поле\параметр конструктора в определителе дистрибутива, он в данном случае будет управлять ленивым получением детектора, тогда когда ему это потребуется, а класс из двух полей останется просто классом из двух полей
А, я чёт не разобрался, вы тут хотите cpuinfo зажелудить, ага.
Можно в заготовку подкинуть типа
Поделка.ДобавитьЗавязь(
"&Завязь(""ИнформацияОПроцессоре"", Тип = ""ИнформацияОПроцессоре"") () ->
| Возврат Новый ИнформацияОПроцессоре();
|"
);
И да, табакерить прям в конструктор, в целом можно и системную информацию аналогично подкинуть
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно в заготовку подкинуть типа
Да зачем, обычный дуб с завязью сделать и все.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно в заготовку подкинуть типа
Да зачем, обычный дуб с завязью сделать и все.
Или так, да.
There was a problem hiding this 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
♻️ Duplicate comments (3)
tests/distrSelectorTests.os (3)
288-290
: Исправить логическую ошибку в условииВ условии проверяется
Стр.Ссылка = Неопределено
, но должно бытьСсылка = Неопределено
, посколькуСтр.Ссылка
еще не была инициализирована.- Если Стр.Ссылка = Неопределено Тогда + Если Ссылка = Неопределено Тогда Стр.Ссылка = Вид + "/" + Архитектура; + Иначе + Стр.Ссылка = Ссылка; КонецЕсли;
200-208
: Упростить сигнатуру функции УниверсальныйТестВерсииФункция принимает 8 параметров, что нарушает принцип чистого кода и усложняет понимание и сопровождение кода.
Рекомендуется использовать структуру параметров вместо длинного списка аргументов.
24-103
: Рефакторинг дублированного кода в тестовых процедурахТестовые процедуры содержат значительное дублирование кода. Все процедуры следуют одинаковому шаблону и отличаются только параметрами вызова
УниверсальныйТестВерсии
.Рекомендуется создать обобщенную процедуру для уменьшения дублирования кода.
🧹 Nitpick comments (1)
tests/distrSelectorTests.os (1)
5-8
: Проверить необходимость всех импортовУбедитесь, что все подключенные библиотеки действительно используются в тестах, особенно
cpuinfo
иmoskito
.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
packagedef
(1 hunks)src/cmd/ovm.os
(1 hunks)src/core/Классы/ПараметрыOVM.os
(4 hunks)src/core/Классы/ФабрикаИнтернетСоединения.os
(1 hunks)tests/distrSelectorTests.os
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- packagedef
- src/core/Классы/ФабрикаИнтернетСоединения.os
- src/core/Классы/ПараметрыOVM.os
🔇 Additional comments (5)
src/cmd/ovm.os (2)
50-50
: Одобряю изменение типа регистрации ПараметрыOVM.Перенос регистрации ПараметрыOVM из
ДобавитьЖелудь
вДобавитьДуб
логично соответствует описанному в целях PR изменению - параметры OVM сделаны неизменяемыми для возможности внедрения специфических опций.
52-54
: Одобряю добавление новых компонентов.Добавление трех новых компонентов логично соответствует архитектурному рефакторингу:
ФабрикаИнтернетСоединения
- для создания интернет-соединенийДетекторОкружения
- для определения окруженияПровайдерДистрибутивовВерсии
- для получения версий и дистрибутивовИзменения следуют принципу разделения ответственности и улучшают модульность кода.
tests/distrSelectorTests.os (3)
92-95
: Проверить корректность использования флага FDDВ процедуре с именем "БезФлагаFDD" (без флага FDD) передается
Истина
для параметраИспользоватьFDD
. Это противоречит названию процедуры и может указывать на ошибку в логике или неточность в именовании.Аналогичная проблема присутствует в строках 184-187. Проверьте, соответствует ли поведение названиям процедур.
184-187
: Проверить корректность использования флага FDDТа же проблема, что и в строках 92-95 - процедура называется "БезФлагаFDD", но передает
Истина
дляИспользоватьFDD
.
275-277
: Хорошая практика использования моковКорректное использование мок-объекта для тестирования детектора окружения. Мок настраивается для возврата нужных значений платформы и архитектуры.
…исимостей Удалёно использование неактуальной библиотеки json - Обновлены зависимости в packagedef: - 1commands до версии 1.5.0 - fs до версии 1.2.0 - tempfiles до версии 1.1.1 - strings до версии 0.5.0 - autumn до версии 4.3.9 - autumn-logos до версии 1.2.0 - autumn-cli до версии 1.1.0 - collectionos до версии 0.8.1 - cpuinfo до версии 1.2.0 - annotations до версии 1.3.0 - 1bdd до версии 1.15.1 - moskito до версии 0.4.1 - Добавлен workflow тестирования через autumn-library/workflows/.github/workflows/test.yml - В tasks/coverage.os удалена зависимость от json, чтение JSON осуществляется через встроенный механизм. - В src/cmd/ovm.os удален код, связанный с добавлением желудей (bean definitions) и заготовками (template definitions) в поделку (Craft). - В features/integration.feature удалены проверки на установку opm ввиду того что оно падает под win. - Добавлен файл tests/oscript.cfg для указания пути к oscript_modules для тестирования
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
.github/workflows/testing.yml
(1 hunks)
🔇 Additional comments (3)
.github/workflows/testing.yml (3)
1-2
: Пропуск: Название workflow
ИмяТестирование
корректно задаёт цель workflow и не вызывает замечаний.
3-7
: Пропуск: Триггеры
Триггерыpush
,pull_request
иworkflow_dispatch
настроены стандартно.
19-23
:✅ Verification successful
Проверка корректности пути и ветки reusable workflow
Убедитесь, что в репозиторииautumn-library/workflows
на веткеoneunit
действительно существует файл.github/workflows/test.yml
, иначе вызов workflow черезuses
завершится ошибкой.
🏁 Script executed:
#!/bin/bash # Проверка наличия reusable workflow в удалённом репозитории curl -s -H "Accept: application/vnd.github.v3.raw" \ "https://api.github.com/repos/autumn-library/workflows/contents/.github/workflows/test.yml?ref=oneunit" \ | head -n 10Length of output: 414
Для уточнения наличия файла проверим HTTP-статус ответа API:
🏁 Script executed:
#!/bin/bash # Проверяем код ответа при запросе файла .github/workflows/test.yml на ветке oneunit curl -s -o /dev/null -w "%{http_code}\n" \ -H "Accept: application/vnd.github.v3.raw" \ "https://api.github.com/repos/autumn-library/workflows/contents/.github/workflows/test.yml?ref=oneunit"Length of output: 193
Путь к reusable workflow корректен
Проверка HTTP-ответа при запросе файла.github/workflows/test.yml
на веткеoneunit
вернула 200 ОК — указанный workflow существует и доступен.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (1)
src/core/Классы/ОпределительДистрибутива.os (1)
28-45
: Логика выбора дистрибутива корректна, но можно улучшить читаемость.Функция правильно обрабатывает различные сценарии выбора дистрибутива, включая режим алиаса с отложенным определением типа. Комментарии хорошо объясняют логику.
Для улучшения читаемости рекомендуется вынести определение типа дистрибутива в отдельный метод:
Функция Выбрать(Знач ПереченьФайлов) Экспорт - Если ЭтоДистрибутивНеткор = Истина Тогда - ВидДистрибутива = ?(ИспользоватьFDD, "fdd", ТипДистрибутиваТекущейПлатформы()); - ИначеЕсли ЭтоДистрибутивНеткор = Ложь Тогда - ВидДистрибутива = "zip"; - ИначеЕсли ИспользоватьFDD Тогда - ЭтоДистрибутивНеткор = Истина; - ВидДистрибутива = "fdd"; - Иначе - // Это установка по алиасу и мы не знаем, версия 2 это или нет. - // Определим это с двух попыток ниже. - ВидДистрибутива = Неопределено; - КонецЕсли; + ВидДистрибутива = ОпределитьВидДистрибутива(); Возврат НайтиПодходящийДистрибутив(ПереченьФайлов, ВидДистрибутива, ИспользоватьХ64); КонецФункции
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/core/Классы/ОпределительДистрибутива.os
(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
src/core/Классы/ОпределительДистрибутива.os (1)
Learnt from: EvilBeaver
PR: oscript-library/ovm#41
File: src/core/Классы/УстановщикOneScript.os:366-377
Timestamp: 2025-05-22T17:19:26.238Z
Learning: В функции ПолучитьПутьКСкачиваниюФайла класса УстановщикOneScript при поиске дистрибутива через алиас сначала выполняется поиск по типу дистрибутива текущей платформы, а затем в случае неудачи - по типу дистрибутива "zip", при этом критерий архитектуры (x86/x64) должен сохраняться неизменным в обоих поисках.
⏰ Context from checks skipped due to timeout of 90000ms (20)
- GitHub Check: test (dev, 1testrunner) / build (windows-latest, dev, 1testrunner)
- GitHub Check: test (dev, 1testrunner) / build (ubuntu-latest, dev, 1testrunner)
- GitHub Check: test (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
- GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
- GitHub Check: test (dev, oneunit) / build (windows-latest, dev, oneunit)
- GitHub Check: test (default, 1testrunner) / build (windows-latest, default, 1testrunner)
- GitHub Check: test (dev, oneunit) / build (macos-latest, dev, oneunit)
- GitHub Check: test (stable, 1testrunner) / build (windows-latest, stable, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (ubuntu-latest, stable, 1testrunner)
- GitHub Check: test (dev, 1testrunner) / build (macos-latest, dev, 1testrunner)
- GitHub Check: test (dev, 1testrunner) / build (windows-latest, dev, 1testrunner)
- GitHub Check: test (dev, 1testrunner) / build (ubuntu-latest, dev, 1testrunner)
- GitHub Check: test (default, 1testrunner) / build (macos-latest, default, 1testrunner)
- GitHub Check: test (default, 1testrunner) / build (windows-latest, default, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (windows-latest, stable, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (macos-latest, stable, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (ubuntu-latest, stable, 1testrunner)
- GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
- GitHub Check: test (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
- GitHub Check: test (dev, oneunit) / build (macos-latest, dev, oneunit)
🔇 Additional comments (2)
src/core/Классы/ОпределительДистрибутива.os (2)
13-26
: Отличная реализация fluent interface.Методы корректно реализуют паттерн цепочки вызовов (fluent interface), что позволяет удобно настраивать объект через последовательные вызовы. Код читаемый и следует принципу единственной ответственности.
51-86
: Корректная реализация алгоритма поиска с соблюдением требований.Функция
НайтиПодходящийДистрибутив
правильно реализует алгоритм поиска, описанный в retrieved learnings: сначала поиск по типу дистрибутива текущей платформы, затем при неудаче в режиме алиаса - по типу "zip", при этом критерий архитектуры сохраняется неизменным в обоих поисках.Особенно хорошо:
- Детальные сообщения об ошибках с указанием критериев поиска
- Корректная обработка случаев с множественными результатами
- Логичная структура fallback-логики
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/core/Классы/ОпределительДистрибутива.os (2)
33-50
: Логика корректна, но можно улучшить читаемость.Функция правильно обрабатывает различные режимы определения дистрибутива. Хорошие комментарии помогают понять сложную логику алиасов.
Для улучшения читаемости можно выделить логику определения вида дистрибутива в отдельную функцию:
Функция Выбрать(Знач ПереченьФайлов) Экспорт - - Если ЭтоДистрибутивНеткор = Истина Тогда - ВидДистрибутива = ?(ИспользоватьFDD, "fdd", ТипДистрибутиваТекущейПлатформы()); - ИначеЕсли ЭтоДистрибутивНеткор = Ложь Тогда - ВидДистрибутива = "zip"; - ИначеЕсли ИспользоватьFDD Тогда - ЭтоДистрибутивНеткор = Истина; - ВидДистрибутива = "fdd"; - Иначе - // Это установка по алиасу и мы не знаем, версия 2 это или нет. - // Определим это с двух попыток ниже. - ВидДистрибутива = Неопределено; - КонецЕсли; + ВидДистрибутива = ОпределитьВидДистрибутива(); Возврат НайтиПодходящийДистрибутив(ПереченьФайлов, ВидДистрибутива, ИспользоватьХ64); КонецФункции
84-84
: Упростите избыточную проверку свойства.Свойство "Архитектура" всегда устанавливается в строке 69, поэтому проверка его наличия избыточна.
- ?(КритерийПоиска.Свойство("Архитектура"), КритерийПоиска.Архитектура, "<любая>"), + КритерийПоиска.Архитектура,
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/core/Классы/ОпределительДистрибутива.os
(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
src/core/Классы/ОпределительДистрибутива.os (1)
Learnt from: EvilBeaver
PR: oscript-library/ovm#43
File: src/core/Классы/ОпределительДистрибутива.os:88-114
Timestamp: 2025-05-27T18:14:36.737Z
Learning: Синтаксис 1С не требует наличия оператора Возврат в конце функции, даже если функция должна возвращать значение.
⏰ Context from checks skipped due to timeout of 90000ms (16)
- GitHub Check: test (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
- GitHub Check: test (dev, oneunit) / build (windows-latest, dev, oneunit)
- GitHub Check: test (dev, 1testrunner) / build (windows-latest, dev, 1testrunner)
- GitHub Check: test (dev, 1testrunner) / build (ubuntu-latest, dev, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (macos-latest, stable, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (ubuntu-latest, stable, 1testrunner)
- GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
- GitHub Check: test (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
- GitHub Check: test (dev, 1testrunner) / build (windows-latest, dev, 1testrunner)
- GitHub Check: test (dev, 1testrunner) / build (macos-latest, dev, 1testrunner)
- GitHub Check: test (dev, oneunit) / build (macos-latest, dev, oneunit)
- GitHub Check: test (dev, 1testrunner) / build (ubuntu-latest, dev, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (macos-latest, stable, 1testrunner)
- GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
- GitHub Check: test (stable, 1testrunner) / build (ubuntu-latest, stable, 1testrunner)
- GitHub Check: test (default, 1testrunner) / build (macos-latest, default, 1testrunner)
🔇 Additional comments (5)
src/core/Классы/ОпределительДистрибутива.os (5)
3-7
: Переменные модуля корректно инициализированы в конструкторе.Хорошо, что переменные модуля инициализируются в конструкторе, что решает проблему неопределенного поведения при обращении к ним до явной установки значений.
9-16
: Конструктор корректно реализован с инициализацией переменных.Отличная реализация конструктора с использованием dependency injection. Все переменные модуля получают правильные значения по умолчанию.
18-31
: Отличная реализация паттерна fluent interface.Методы настройки позволяют удобно конфигурировать объект через цепочку вызовов. Реализация простая и понятная.
52-54
: Простая и корректная вспомогательная функция.Функция ясно выражает логику выбора архитектуры.
94-120
: Отличная реализация определения типа дистрибутива.Функция корректно обрабатывает все поддерживаемые платформы, включая специальную логику для ARM-архитектуры на macOS. Хорошее использование детектора окружения и понятные сообщения об ошибках.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@nixel2007 я думаю надо вливать, а подпись для мака отдельным реквестом катить |
Изменения
Summary by CodeRabbit