Skip to content

Подпись для MacOS и немного рефакторинга #45

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

Merged
merged 2 commits into from
Jun 8, 2025

Conversation

sfaqer
Copy link
Member

@sfaqer sfaqer commented Jun 8, 2025

  1. Добавлена подпись установленный версии onescript на MacOS
  2. Работа с окружением инкапсулирована внутри ДетекторОкружения

Summary by CodeRabbit

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

    • Добавлены новые методы для определения операционной системы и архитектуры (Windows, Linux, MacOS, MacOS ARM).
    • Добавлены методы для получения путей к профилю пользователя и локальным данным приложений.
    • Реализована автоматическая подпись исполняемого файла OneScript для macOS после установки.
  • Исправления

    • Централизовано определение окружения через объект "Окружение" вместо глобальных переменных.
    • Обновлены внутренние проверки платформы и архитектуры во всех основных компонентах.
    • Упрощена и унифицирована логика определения типа дистрибутива с использованием новых методов окружения.
  • Тесты

    • Актуализированы моки окружения для поддержки новых методов проверки платформы.

Copy link

coderabbitai bot commented Jun 8, 2025

## Walkthrough

Внесены изменения в архитектуру определения окружения: глобальные переменные и прямые запросы к системной информации заменены на внедрение объекта "Окружение" (детектор окружения) во все ключевые классы и функции. Логика проверки платформы и архитектуры теперь централизована через этот объект, добавлены новые методы для работы с путями пользователя и локальными данными, а также реализована отдельная процедура подписи для macOS.

## Changes

| Файл(ы)                                                                 | Краткое описание изменений                                                                                                        |
|-------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| src/core/Классы/ДетекторОкружения.os                                    | Реорганизация: удалена функция ТипПлатформы, добавлены булевые методы для проверки платформы и архитектуры, новые методы путей.    |
| src/core/Классы/ПараметрыOVM.os                                         | Заменён глобальный объект СистемнаяИнформация на Окружение, удалена функция Это64БитнаяОперационнаяСистема, обновлён конструктор. |
| src/core/Классы/АктиваторOneScript.os                                   | Внедрение Окружения вместо глобальных переменных, обновлены все проверки платформы и архитектуры, изменён конструктор.            |
| src/core/Классы/ВерсииOneScript.os                                      | Использование Окружения для проверки платформы, удалён глобальный ЭтоWindows, обновлён конструктор.                               |
| src/core/Классы/УстановщикOneScript.os                                  | Внедрение Окружения, добавлена процедура ПодписатьOneScriptДляMacOS, обновлены проверки ОС, изменён конструктор.                  |
| src/core/Классы/ОпределительДистрибутива.os                             | Проверки платформы теперь через методы Окружения, логика разделена по платформам, сигнатуры не изменились.                        |
| src/cmd/Классы/КомандаInstall.os, src/cmd/Классы/КомандаRun.os          | Внедрение Окружения, обновлены проверки платформы и архитектуры, изменены сигнатуры конструкторов.                                 |
| tests/distrSelectorTests.os                                             | Моки окружения теперь реализуют методы проверки платформы, архитектуры, удалены старые методы.                                     |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Пользователь
    participant Команда/Класс
    participant ДетекторОкружения

    Пользователь->>Команда/Класс: Создание объекта (Передаёт ДетекторОкружения)
    Команда/Класс->>ДетекторОкружения: Вызов метода (например, ЭтоWindows(), ЭтоX64())
    ДетекторОкружения-->>Команда/Класс: Возвращает результат проверки платформы/архитектуры
    Команда/Класс-->>Пользователь: Выполняет логику с учётом окружения
sequenceDiagram
    participant УстановщикOneScript
    participant ДетекторОкружения
    participant ОС

    УстановщикOneScript->>ДетекторОкружения: ЭтоMacOS()
    alt Если macOS
        УстановщикOneScript->>ОС: Выполнить codesign ./oscript
        ОС-->>УстановщикOneScript: Лог выполнения подписи
    end
Loading

Possibly related PRs

Suggested reviewers

  • nixel2007

Poem

В норах кода, где платформы прячутся в тени,
ДетекторОкружения теперь у нас один!
Windows, Linux, Mac — всё узнает на лету,
Пути и биты выдаст прямо по хвосту.
А если вдруг MacOS — подпишем ослика всерьёз!

ʕ•ᴥ•ʔ


<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

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


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 7ece32525ac0f093943e80e73c1973e8f10fad23 and ab2977c49bc5f979ae91b0f4eb5a34498aefca32.

</details>

<details>
<summary>📒 Files selected for processing (6)</summary>

* `src/cmd/Классы/КомандаInstall.os` (3 hunks)
* `src/cmd/Классы/КомандаRun.os` (2 hunks)
* `src/core/Классы/АктиваторOneScript.os` (10 hunks)
* `src/core/Классы/ВерсииOneScript.os` (4 hunks)
* `src/core/Классы/ПараметрыOVM.os` (2 hunks)
* `src/core/Классы/УстановщикOneScript.os` (5 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (5)</summary>

* src/core/Классы/ВерсииOneScript.os
* src/core/Классы/АктиваторOneScript.os
* src/core/Классы/ПараметрыOVM.os
* src/cmd/Классы/КомандаInstall.os
* src/cmd/Классы/КомандаRun.os

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧠 Learnings (1)</summary>

<details>
<summary>src/core/Классы/УстановщикOneScript.os (1)</summary>

Learnt from: sfaqer
PR: #45
File: src/core/Классы/УстановщикOneScript.os:0-0
Timestamp: 2025-06-08T01:25:10.178Z
Learning: В классе Команда метод УстановитьПравильныйКодВозврата() устанавливает ожидаемый код возврата, и если при вызове Исполнить() код возврата отличается от установленного, будет выброшено исключение, прерывающее выполнение.


</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (20)</summary>

* GitHub Check: test (dev, 1testrunner) / build (macos-latest, dev, 1testrunner)
* 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 (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
* GitHub Check: test (stable, 1testrunner) / build (ubuntu-latest, stable, 1testrunner)
* GitHub Check: test (default, 1testrunner) / build (windows-latest, default, 1testrunner)
* GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
* GitHub Check: test (dev, 1testrunner) / build (macos-latest, dev, 1testrunner)
* GitHub Check: test (default, 1testrunner) / build (macos-latest, default, 1testrunner)
* 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 (dev, oneunit) / build (macos-latest, dev, oneunit)
* GitHub Check: test (stable, 1testrunner) / build (windows-latest, stable, 1testrunner)
* GitHub Check: test (stable, 1testrunner) / build (macos-latest, stable, 1testrunner)
* GitHub Check: test (dev, oneunit) / build (windows-latest, dev, oneunit)
* GitHub Check: test (stable, 1testrunner) / build (ubuntu-latest, stable, 1testrunner)
* GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
* GitHub Check: test (default, 1testrunner) / build (windows-latest, default, 1testrunner)

</details>

<details>
<summary>🔇 Additional comments (3)</summary><blockquote>

<details>
<summary>src/core/Классы/УстановщикOneScript.os (3)</summary>

`22-23`: **Хорошая архитектурная замена.**

Замена глобальных переменных на внедрение объекта окружения улучшает модульность и тестируемость кода.

---

`159-159`: **Корректная замена вызовов проверки платформы.**

Использование `Окружение.ЭтоWindows()` вместо прямой проверки глобальной переменной соответствует новой архитектуре.



Also applies to: 221-221

---

`101-101`: **Правильная интеграция подписи в процесс установки.**

Вызов `ПодписатьOneScriptДляMacOS()` размещен в правильном месте - после установки разрешений и перед завершением установки. Это обеспечивает подпись готового к работе исполняемого файла.

</details>

</blockquote></details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=oscript-library/ovm&utm_content=45):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `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 explain this code block.`
  -	`@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 explain its main purpose.`
  - `@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.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

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](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@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](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

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: 3

🧹 Nitpick comments (1)
src/core/Классы/ДетекторОкружения.os (1)

37-50: Оптимизировать проверку архитектуры MacOS ARM.

Текущая реализация неэффективна: для платформ, отличных от macOS, происходит лишний вызов ЭтоMacOS(), а для macOS x86/x86_64 выполняется ненужная проверка архитектуры процессора.

Рассмотрите более эффективную реализацию:

 Функция ЭтоMacOSARM() Экспорт
 
-	Если Не ЭтоMacOS() Тогда
+	Если ТекущаяПлатформа <> ТипПлатформы.MacOS_x86_64 И ТекущаяПлатформа <> ТипПлатформы.MacOS_x86 Тогда
 		Возврат Ложь;
 	КонецЕсли;
 
 	АрхитектураПроцессора = ПровайдерИнформацииОПроцессоре
 		.Достать()
 		.Архитектура;
 
 	Возврат АрхитектураПроцессора = АрхитектурыПроцессоров.ARM
 		Или АрхитектураПроцессора = АрхитектурыПроцессоров.ARM64;
 
 КонецФункции
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 71519b5 and 15ca1dd.

📒 Files selected for processing (9)
  • src/cmd/Классы/КомандаInstall.os (3 hunks)
  • src/cmd/Классы/КомандаRun.os (2 hunks)
  • src/core/Классы/АктиваторOneScript.os (10 hunks)
  • src/core/Классы/ВерсииOneScript.os (4 hunks)
  • src/core/Классы/ДетекторОкружения.os (2 hunks)
  • src/core/Классы/ОпределительДистрибутива.os (1 hunks)
  • src/core/Классы/ПараметрыOVM.os (2 hunks)
  • src/core/Классы/УстановщикOneScript.os (5 hunks)
  • tests/distrSelectorTests.os (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (18)
  • GitHub Check: test (stable, 1testrunner) / build (windows-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 (default, 1testrunner) / build (windows-latest, default, 1testrunner)
  • GitHub Check: test (dev, oneunit) / build (windows-latest, dev, oneunit)
  • GitHub Check: test (dev, 1testrunner) / build (windows-latest, dev, 1testrunner)
  • GitHub Check: test (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
  • GitHub Check: test (dev, 1testrunner) / build (ubuntu-latest, dev, 1testrunner)
  • GitHub Check: test (dev, oneunit) / build (macos-latest, dev, oneunit)
  • GitHub Check: test (dev, 1testrunner) / build (macos-latest, dev, 1testrunner)
  • GitHub Check: test (dev, 1testrunner) / build (ubuntu-latest, dev, 1testrunner)
  • GitHub Check: test (dev, 1testrunner) / build (windows-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 (dev, oneunit) / build (macos-latest, dev, oneunit)
  • GitHub Check: test (default, 1testrunner) / build (macos-latest, default, 1testrunner)
  • GitHub Check: test (default, 1testrunner) / build (ubuntu-latest, default, 1testrunner)
  • GitHub Check: test (dev, oneunit) / build (ubuntu-latest, dev, oneunit)
🔇 Additional comments (22)
src/cmd/Классы/КомандаInstall.os (2)

9-9: Правильное внедрение зависимости для детектора окружения

Отличное решение по замене глобальных переменных на внедрение зависимости через конструктор. Это улучшает модульность и тестируемость кода.

Also applies to: 12-13


30-30: Корректная замена метода проверки архитектуры

Замена ПараметрыOVM.Это64БитнаяОперационнаяСистема() на Окружение.ЭтоX64() логична и консистентна с новой архитектурой определения окружения.

Also applies to: 68-68

tests/distrSelectorTests.os (1)

276-284: Правильное обновление мока под новую архитектуру

Обновление функции МокОкружения корректно отражает переход от прямого возвращения типа платформы к boolean методам. Логика определения платформ через СтрНачинаетсяС и дополнительная проверка архитектуры для ЭтоMacOSARM() реализованы правильно.

src/core/Классы/ВерсииOneScript.os (2)

16-16: Консистентное внедрение детектора окружения

Правильное добавление переменной Окружение и обновление конструктора для внедрения зависимости. Паттерн соответствует изменениям в других классах.

Also applies to: 19-21


121-121: Корректная замена глобальной переменной на метод объекта

Все места использования глобальной переменной ЭтоWindows правильно заменены на вызов метода Окружение.ЭтоWindows(). Это улучшает инкапсуляцию и тестируемость кода.

Also applies to: 123-123, 178-178, 190-190

src/cmd/Классы/КомандаRun.os (2)

26-26: Успешное применение паттерна внедрения зависимости

Добавление переменной Окружение и обновление конструктора полностью соответствует паттерну, применяемому в других классах проекта.

Also applies to: 29-31


41-41: Правильная замена проверки платформы

Замена прямого обращения к глобальной переменной на вызов метода объекта окружения улучшает модульность кода и соответствует новой архитектуре.

src/core/Классы/АктиваторOneScript.os (3)

19-21: Отличная реализация внедрения зависимости.

Конструктор корректно принимает детектор окружения и сохраняет его для использования в классе. Это хорошая архитектурная практика.


66-66: LGTM: Корректная замена прямых вызовов системной информации.

Все обращения к определению платформы правильно заменены на использование внедренного объекта окружения.

Also applies to: 81-81, 110-110, 122-122, 131-131, 146-146, 159-159, 221-221


223-227: Хорошее использование новых методов окружения.

Использование ПутьКПрофилюПользователя() и ЭтоX64() из объекта окружения улучшает инкапсуляцию и тестируемость кода.

Also applies to: 246-246, 264-264

src/core/Классы/ПараметрыOVM.os (2)

9-11: Корректная реализация паттерна внедрения зависимости.

Конструктор правильно принимает и сохраняет детектор окружения для использования в классе.


24-24: Правильное использование метода окружения для получения пути.

Замена прямого обращения к системной информации на использование ПутьКЛокальнымДаннымПриложений() улучшает архитектуру кода.

src/core/Классы/УстановщикOneScript.os (3)

25-27: Корректная реализация внедрения зависимости.

Конструктор правильно принимает детектор окружения согласно общему паттерну рефакторинга.


159-159: LGTM: Правильная замена проверок платформы.

Использование Окружение.ЭтоWindows() вместо прямых обращений к глобальным переменным улучшает архитектуру.

Also applies to: 221-221


101-101: Хорошее добавление подписи для macOS.

Вызов процедуры подписи в правильном месте процесса установки обеспечивает корректную работу OneScript на macOS.

src/core/Классы/ДетекторОкружения.os (7)

4-4: Переменная ТекущаяПлатформа правильно инициализирована.

Добавление кэширования типа платформы в переменную экземпляра - хорошее решение для производительности.

Also applies to: 13-13


16-21: Функция ЭтоWindows() корректно реализована.

Функция правильно проверяет обе архитектуры Windows (x86 и x86_64).


23-28: Функция ЭтоLinux() корректно реализована.

Функция правильно проверяет обе архитектуры Linux (x86 и x86_64).


30-35: Функция ЭтоMacOS() корректно реализована.

Функция правильно проверяет обе архитектуры macOS (x86 и x86_64).


52-54: Функция ПутьКПрофилюПользователя() корректно реализована.

Простая и понятная реализация получения пути к профилю пользователя.


56-58: Функция ПутьКЛокальнымДаннымПриложений() корректно реализована.

Простая и понятная реализация получения пути к локальным данным приложений.


60-62: Функция ЭтоX64() корректно реализована.

Использование системного свойства Это64БитнаяОперационнаяСистема является правильным подходом для определения архитектуры ОС.

@sfaqer sfaqer force-pushed the bugfix/MacOSCodeSign branch from 15ca1dd to f305711 Compare June 8, 2025 01:20
2. Работа с окружением инкапсулирована внутри ДетекторОкружения
@sfaqer sfaqer force-pushed the bugfix/MacOSCodeSign branch from f305711 to 7ece325 Compare June 8, 2025 01:28
@nixel2007 nixel2007 requested a review from Copilot June 8, 2025 03:45
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This pull request implements environment encapsulation by introducing a dedicated ДетекторОкружения and updating various modules (installation, activation, tests, command-line interfaces) to rely on its methods instead of global variables. Key changes include:

  • Replacing global platform and architecture checks with calls to methods like ЭтоWindows(), ЭтоLinux(), ЭтоMacOS(), and ЭтоMacOSARM().
  • Updating tests to mock the new methods and adjusting command and installation procedures accordingly.
  • Adding a new procedure for signing OneScript on macOS after installation.

Reviewed Changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/distrSelectorTests.os Updated mocks to use the new environment detection methods
src/core/Классы/УстановщикOneScript.os Integrated environment object and added signing for macOS
src/core/Классы/ПараметрыOVM.os Replaced SистемнаяИнформация with the encapsulated Окружение
src/core/Классы/ОпределительДистрибутива.os Updated distro type determination based on environment
src/core/Классы/ДетекторОкружения.os Introduced new functions to detect platform types and paths
src/core/Классы/ВерсииOneScript.os Updated executable path resolution using Окружение
src/core/Классы/АктиваторOneScript.os Replaced global OS checks with Окружение calls
src/cmd/Классы/КомандаRun.os Adjusted PATH handling to use the Окружение methods
src/cmd/Классы/КомандаInstall.os Replaced bit-checks and OS checks with Окружение usage
Comments suppressed due to low confidence (1)

tests/distrSelectorTests.os:281

  • Consider adding explicit parentheses in the combined logical expression for clarity, for example: СтрНачинаетсяС(ВидПлатформы, "MacOS") И (Архитектура = АрхитектурыПроцессоров.ARM64 Или Архитектура = АрхитектурыПроцессоров.ARM).
МокСИ.Когда().ЭтоMacOSARM().ТогдаВозвращает(СтрНачинаетсяС(ВидПлатформы, "MacOS") И Архитектура = АрхитектурыПроцессоров.ARM64 Или Архитектура = АрхитектурыПроцессоров.ARM);


Команда = Новый Команда;

Команда.УстановитьКоманду("codesign");
Copy link
Preview

Copilot AI Jun 8, 2025

Choose a reason for hiding this comment

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

It may be beneficial to add explicit error handling for the codesign process so that failures provide clear diagnostic information, even though a proper return code is already being set.

Copilot uses AI. Check for mistakes.


Команда = Новый Команда;

Команда.УстановитьКоманду("codesign");
Copy link
Member

Choose a reason for hiding this comment

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

codesign всегда в path?

Copy link
Member Author

Choose a reason for hiding this comment

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

Я не знаю, у меняж мака нет, но в GA работает, у пользователей тоже.
Предположу что да.


Команда.УстановитьПравильныйКодВозврата(0);

Команда.Исполнить();
Copy link
Member

Choose a reason for hiding this comment

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

Может обработку ошибок добавить с внятным текстом исключения? Чтобы было понятно, куда бежать

Copy link
Member Author

Choose a reason for hiding this comment

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

image

А чем тебе не внятная ошибка?

Copy link
Member

Choose a reason for hiding this comment

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

Ты в контексте. Я смотрю с точки зрения пользователя. Вот видит он такое или что подпись не удалась. Что? Какая подпись? Куда бежать и что делать? Оно будет работать? Или надо руками что-то подшаманить?

Copy link
Member Author

Choose a reason for hiding this comment

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

Ну, во всех случаях просто несёшь это в ишью\чат оскрипта, не? Просто потому что если ты не знаешь чё такое codesign то и моё сообщение "Codesign не смог подписать" тебе тоже ничем не поможет

Copy link
Member Author

Choose a reason for hiding this comment

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

Ну т.е ты какой текст исключения считаешь "внятным" ?

@nixel2007 nixel2007 merged commit 3056c14 into develop Jun 8, 2025
25 checks passed
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.

2 participants