Help:XSvacer:Webide: Difference between revisions
M.vinogradov (talk | contribs) (Релиз 11. Удалена настройка шаблона комментария sarif/commenttemplate) |
M.vinogradov (talk | contribs) mNo edit summary |
||
(10 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
= Поддержка среды разработки Theia IDE = | = Поддержка среды разработки Theia IDE = | ||
'''Примечание:''' данная функциональность входит в набор расширений XSvacer. | |||
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE. | Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE. | ||
Line 8: | Line 7: | ||
== Активация функциональности == | == Активация функциональности == | ||
Для активации функциональности необходимо указать флаг <code style="white-space: pre;">--xsvacer.features webide</code> при запуске | Для активации функциональности необходимо указать флаг <code style="white-space: pre;">--xsvacer.features webide</code> при запуске svacer'а. | ||
'''Примечание:''' при запуске функциональности <code style="white-space: pre;">webide</code> также будет запущена функциональность <code style="white-space: pre;">[[Help:XSvacer:Docker|docker]]</code>. | |||
При активации функциональности: | При активации функциональности: | ||
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов | * становится доступным REST API управления IDE для просмотра исходного кода снимков проектов; | ||
* в пользовательском интерфейсе на вкладке "Информация о снимке" появляется кнопка "Открыть в IDE" | * в пользовательском интерфейсе на вкладке "Информация о снимке" появляется кнопка "Открыть в IDE"; | ||
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE | * устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE. | ||
=== Быстрый запуск функциональности с настройками по умолчанию === | === Быстрый запуск функциональности с настройками по умолчанию === | ||
Line 21: | Line 20: | ||
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия: | Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия: | ||
# Настройка доступа к docker-хосту: | # Настройка доступа к docker-хосту: | ||
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет <code style="white-space: pre;">unix:///var/run/docker.sock</code> | ## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет <code style="white-space: pre;">unix:///var/run/docker.sock</code> - https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option); | ||
## Проверить, что у пользователя под которым будет запускаться | ## Проверить, что у пользователя под которым будет запускаться svacer есть доступ к unix-сокету docker-хоста <code style="white-space: pre;">unix:///var/run/docker.sock</code> - https://docs.docker.com/engine/install/linux-postinstall/; | ||
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку "Просмотр маркеров" и "Экспорт разметки" | # Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку <code style="white-space: pre;">"Просмотр маркеров"</code> и <code style="white-space: pre;">"Экспорт разметки"</code>; | ||
# Перезапустить | # Перезапустить svacer с флагом <code style="white-space: pre;">--xsvacer.features webide</code>. | ||
# ''Опционально.'' Для ускорения первого запуска IDE: | # ''Опционально.'' Для ускорения первого запуска IDE: | ||
## Скачать архив с docker-образом | ## Скачать архив с docker-образом: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar; | ||
## Загрузить docker-образ из архива на docker-хост: <code style="white-space: pre;">docker image load -i /path/to/theia-blueprint...</code> | ## Загрузить docker-образ из архива на docker-хост: <code style="white-space: pre;">docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar</code>; | ||
После этого у пользователей с указанными правами должна появиться кнопка "Открыть в IDE" на панели с информацией о снимке. | После этого у пользователей с указанными правами должна появиться кнопка "Открыть в IDE" на панели с информацией о снимке. | ||
'''Внимание!''' IDE с исходным подом снимков будут запускаться в новых вкладках браузера. | |||
При этом зачастую все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. Например, в firefox: | |||
Например, в | [[File:Firefox popup notification ru.png|x25px]] | ||
В таком случае нужно дать разрешение на открытие вкладки с IDE: | |||
[[File:Firefox popup notification ru.png]] | [[File:Firefox popup notification expanded ru.png|x106px]] | ||
В таком случае нужно дать разрешение на открытие вкладки с IDE: | |||
[[File:Firefox popup notification expanded ru.png| | |||
При необходимости изменения настроек подключения к docker-хосту: | При необходимости изменения настроек подключения к docker-хосту: | ||
# | # скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел <code>xsvacer</code> конфигурационного файла <code>svacer.cfg</code>; | ||
# | # внести требуемые изменения в конфигурацию раздела <code>xsvacer/docker</code>. | ||
При необходимости изменения настроек запуска IDE: | При необходимости изменения настроек запуска IDE: | ||
# | # скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел <code>xsvacer</code> конфигурационного файла <code>svacer.cfg</code>; | ||
# | # внести требуемые изменения в конфигурацию раздела <code>xsvacer/webide</code>. | ||
== Принцип работы == | == Принцип работы == | ||
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия: | Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия: | ||
# Функциональность активна: при запуске | # Функциональность активна: при запуске svacer'а указан флаг <code style="white-space: pre;">--xsvacer.features webide</code>; | ||
# В | # В конфигурации функциональности <code style="white-space: pre;">[[Help:XSvacer:Webide#Конфигурация|xsvacer/webide/theia]]</code> есть хотя бы одна активная (<code style="white-space: pre;">disabled: false</code>) конфигурация IDE; | ||
# У пользователя | # У пользователя svacer имеются разрешения <code style="white-space: pre;">"Просмотр маркеров"</code> и <code style="white-space: pre;">"Экспорт разметки"</code> на проект, в котором находится снимок, для которого нужно запустить IDE. | ||
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка "Открыть в IDE". | В противном случае в пользовательском интерфейсе будет отсутствовать кнопка <code style="white-space: pre;">"Открыть в IDE"</code> (<code style="white-space: pre;">"Open in IDE"</code>). | ||
=== Запуск IDE === | === Запуск IDE === | ||
Запуск производится путём вызова http-метода <code style="white-space: pre;">POST /api/snapshots/{snapshot_id}/ide</code> с телом запроса <code style="white-space: pre;">{"ideId": "идентификатор IDE"}</code> | Запуск производится путём вызова http-метода <code style="white-space: pre;">POST /api/snapshots/{snapshot_id}/ide</code> с телом запроса <code style="white-space: pre;">{"ideId": "идентификатор IDE"}</code>. | ||
Последовательность действий, выполняемых при запуске IDE: | Последовательность действий, выполняемых при запуске IDE: | ||
Line 67: | Line 61: | ||
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка: | # Производится проверка: была ли уже запущена указанная IDE для указанного снимка: | ||
#* Если запущена: производится проверка доступности IDE (отвечает на запросы): | #* Если запущена: производится проверка доступности IDE (отвечает на запросы): | ||
#** Если IDE доступна: действие не требуется. Процесс запуска завершается | #** Если IDE доступна: действие не требуется. Процесс запуска завершается; | ||
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена | #** Если IDE недоступна: продолжается процесс запуска. IDE будет ''перезапущена''; | ||
# Создаётся "корневая папка снимка", предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE <code>xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot</code> | # Создаётся "корневая папка снимка", предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot</code>; | ||
# Исходный код снимка скачивается в "корневую папку снимка" | # Исходный код снимка скачивается в "корневую папку снимка"; | ||
# Производится экспорт маркеров и разметки в виде sarif-файла в "корневую папку снимка". Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/ | # Производится экспорт маркеров и разметки в виде sarif-файла в "корневую папку снимка". Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate</code>; | ||
# Производится настройка и запуск docker-контейнера в соответствии с настройками <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/docker</code>: | # Производится настройка и запуск docker-контейнера в соответствии с настройками <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/docker</code>: | ||
## Проверяется наличие на docker-хосте образа IDE, указанного в <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/docker/image</code> | ## Проверяется наличие на docker-хосте образа IDE, указанного в <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/docker/image</code>: | ||
##* Если docker-образ отсутствует - он будет загружен на хост; | |||
## Проверяется наличие на docker-хосте контейнера с IDE для снимка: | ## Проверяется наличие на docker-хосте контейнера с IDE для снимка: | ||
##* Если docker-контейнер не существует, то он будет создан и запущен | ##* Если docker-контейнер не существует, то он будет создан и запущен; | ||
##* Если docker-контейнер существует и находится: | ##* Если docker-контейнер существует и находится: | ||
##** в статусе <code>running</code> | ##** в статусе <code style="white-space: pre;">running</code> - процесс запуска IDE продолжается; | ||
##** в статусе <code>created</code>, <code>exited</code> или <code>paused</code> | ##** в статусе <code style="white-space: pre;">created</code>,<code style="white-space: pre;">exited</code> или <code style="white-space: pre;">paused</code> - контейнер будет запущен; | ||
##** в других статусах | ##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся; | ||
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck</code> | # После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck</code>: | ||
#* Если за отведённое время ответ от IDE получен | #* Если за отведённое время ответ от IDE получен - процесс запуска завершается; | ||
#* Если ответ не получен | #* Если ответ не получен - вернётся ошибка <code style="white-space: pre;">ide not ready</code>. | ||
'''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена. | |||
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется | '''Внимание!''' Причиной возникновения ошибки <code style="white-space: pre;">ide not ready</code> может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck</code>. | ||
В случае возникновения ошибки <code style="white-space: pre;">ide not ready</code> рекомендуется попробовать повторно запустить IDE через короткий промежуток времени. | |||
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется: | |||
1. проверить сетевую доступность docker-хоста; | |||
2. проверить настройки биндинга docker-контейнера c IDE - <code style="white-space: pre;">xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings</code>. Контейнер должен быть подключён к доступному сетевому интерфейсу; | |||
3. проверить настройки фаервола на docker-хосте. | |||
=== Использование IDE: проксирование запросов === | === Использование IDE: проксирование запросов === | ||
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом <code style="white-space: pre;">/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/</code> | После успешного запуска docker-контейнера IDE станут доступны ресурсы с "префиксом" <code style="white-space: pre;">/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/</code>. | ||
Все запросы, направленные к ресурсам <code style="white-space: pre;">/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*</code>, будут проксироваться в соответствующий контейнер IDE. | Все запросы, направленные к ресурсам <code style="white-space: pre;">/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*</code>, будут проксироваться в соответствующий контейнер IDE. | ||
Например, если docker-контейнер c IDE <code style="white-space: pre;">theia__default</code> для снимка <code style="white-space: pre;">xxx</code> запущен и слушает порт <code style="white-space: pre;">35353</code> на хосте <code style="white-space: pre;">docker-host</code>, то будет происходить проксирование: | Например, если docker-контейнер c IDE <code style="white-space: pre;">theia__default</code> для снимка <code style="white-space: pre;">xxx</code> запущен и "слушает" порт <code style="white-space: pre;">35353</code> на хосте <code style="white-space: pre;">docker-host</code>, то будет происходить проксирование: | ||
:<code style="white-space: pre;"><nowiki>GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/</nowiki></code> ⇒ <code style="white-space: pre;"><nowiki>GET http://docker-host:35353/</nowiki></code> | : <code style="white-space: pre;"><nowiki>GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/</nowiki></code> ⇒ <code style="white-space: pre;"><nowiki>GET http://docker-host:35353/</nowiki></code> | ||
:<code style="white-space: pre;"><nowiki>POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...</nowiki></code> ⇒ <code style="white-space: pre;"><nowiki> | : <code style="white-space: pre;"><nowiki>POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...</nowiki></code> ⇒ <code style="white-space: pre;"><nowiki>GET http://docker-host:35353/socket.io/?...</nowiki></code> | ||
:<code style="white-space: pre;"><nowiki>GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...</nowiki></code> ⇒ <code style="white-space: pre;"><nowiki>GET ws://docker-host:35353/socket.io/?... | : <code style="white-space: pre;"><nowiki>GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...</nowiki></code> ⇒ <code style="white-space: pre;"><nowiki>GET ws://docker-host:35353/socket.io/?...</nowiki></code> | ||
{{ | '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес <code style="white-space: pre;"><nowiki>http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/</nowiki></code>. '''Завершающий слеш обязателен!''' | ||
=== Перезапуск IDE === | === Перезапуск IDE === | ||
В процессе работы | В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается. | ||
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется. | Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется. | ||
Line 126: | Line 115: | ||
=== Остановка IDE === | === Остановка IDE === | ||
Запуск производится путём вызова http-метода | Запуск производится путём вызова http-метода <code style="white-space: pre;">DELETE /api/snapshots/{snapshot_id}/ide</code> с телом запроса <code style="white-space: pre;">{"ideId": "идентификатор IDE"}</code>. | ||
с телом запроса <code style="white-space: pre;">{"ideId": "идентификатор IDE"}</code>. | |||
В ходе обработки запроса останавливается docker-контейнер IDE. | |||
XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false | '''Внимание!''' По умолчанию установлен параметр конфигурации <code style="white-space: pre;">xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true</code>. Это означает, что после остановки docker-контейнер будет автоматически удалён. | ||
Чтобы изменить это поведение, настройка <code style="white-space: pre;">xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove</code> должна быть установлена в <code style="white-space: pre;">false</code> '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения <code style="white-space: pre;">XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false</code>. | |||
'''!!!Сейчас установка <code style="white-space: pre;">autoremove: false</code> вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления.''' | |||
'''Примечание!''' При корректной остановке (например <code style="white-space: pre;">SIGTERM</code>) svacer автоматически остановит все запущенные docker-контейнеры IDE | |||
=== Подключение к IDE после некорректного завершениея svacer === | |||
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. | |||
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а все docker-контейнеры IDE будут остановлены. | |||
== REST API для работы с IDE == | == REST API для работы с IDE == | ||
'''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами! | |||
После активации функциональности становятся доступны http-ресурсы для управления IDE: | После активации функциональности становятся доступны http-ресурсы для управления IDE снимками: | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 161: | Line 141: | ||
|- | |- | ||
!Ресурс | !Ресурс | ||
!Описание | !Описание | ||
|- | |- | ||
|<pre style="white-space: pre;"> | |<pre style="white-space: pre;"> | ||
Line 177: | Line 157: | ||
] | ] | ||
</pre> | </pre> | ||
:<code style="white-space: pre;">id</code> | :<code style="white-space: pre;">id</code> - идентификатор IDE | ||
:<code style="white-space: pre;">name</code> | :<code style="white-space: pre;">name</code> - название IDE | ||
:<code style="white-space: pre;">order</code> | :<code style="white-space: pre;">order</code> - порядковый номер IDE в списке | ||
|- | |- | ||
|<pre style="white-space: pre;"> | |<pre style="white-space: pre;"> | ||
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id} | GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id} | ||
</pre> | </pre> | ||
|Запрос описания экземпляра IDE, запущенного для снимка. | |Запрос описания экземпляра IDE, запущенного для снимка. | ||
'''Параметры:''' | '''Параметры:''' | ||
:<code style="white-space: pre;">snapshot_id</code> | :<code style="white-space: pre;">snapshot_id</code> - идентификатор снимка | ||
:<code style="white-space: pre;">ide_id</code> | :<code style="white-space: pre;">ide_id</code> - идентификатор IDE | ||
'''Ответ:''' | '''Ответ:''' | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 214: | Line 194: | ||
|Запуск IDE для просмотра исходных кодов снимка | |Запуск IDE для просмотра исходных кодов снимка | ||
'''Параметры:''' | '''Параметры:''' | ||
:<code style="white-space: pre;">snapshot_id</code> | :<code style="white-space: pre;">snapshot_id</code> - идентификатор снимка | ||
'''Запрос:''' | '''Запрос:''' | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 221: | Line 201: | ||
} | } | ||
</pre> | </pre> | ||
:<code style="white-space: pre;">ideId</code> | :<code style="white-space: pre;">ideId</code> - идентификатор IDE | ||
'''Ответ:''' | '''Ответ:''' | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 228: | Line 208: | ||
} | } | ||
</pre> | </pre> | ||
:<code style="white-space: pre;">ideId</code> | :<code style="white-space: pre;">ideId</code> - идентификатор IDE | ||
|- | |- | ||
|<pre style="white-space: pre;"> | |<pre style="white-space: pre;"> | ||
Line 234: | Line 214: | ||
</pre> | </pre> | ||
|Команда управления экземпляром IDE снимка | |Команда управления экземпляром IDE снимка | ||
Доступные действия: | |||
* <code style="white-space: pre;">update_markup</code> - обновление предупреждений и разметки (sarif-файла) | |||
'''Параметры:''' | '''Параметры:''' | ||
:<code style="white-space: pre;">snapshot_id</code> | :<code style="white-space: pre;">snapshot_id</code> - идентификатор снимка | ||
'''Запрос:''' | '''Запрос:''' | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 243: | Line 225: | ||
} | } | ||
</pre> | </pre> | ||
:<code style="white-space: pre;">action</code> | :<code style="white-space: pre;">action</code> - действие | ||
:<code style="white-space: pre;">ideId</code> | :<code style="white-space: pre;">ideId</code> - идентификатор IDE | ||
'''Ответ:''' пустой | '''Ответ:''' пустой | ||
|- | |- | ||
Line 254: | Line 234: | ||
|Остановка экземпляра IDE снимка | |Остановка экземпляра IDE снимка | ||
'''Параметры:''' | '''Параметры:''' | ||
:<code style="white-space: pre;">snapshot_id</code> | :<code style="white-space: pre;">snapshot_id</code> - идентификатор снимка | ||
'''Запрос:''' | '''Запрос:''' | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 261: | Line 241: | ||
} | } | ||
</pre> | </pre> | ||
:<code style="white-space: pre;">ideId</code> | :<code style="white-space: pre;">ideId</code> - идентификатор IDE | ||
'''Ответ:''' пустой | '''Ответ:''' пустой | ||
|- | |- | ||
Line 274: | Line 254: | ||
<code style="white-space: pre;">{тип ide}__{идентификатор конфигурации}</code> | <code style="white-space: pre;">{тип ide}__{идентификатор конфигурации}</code> | ||
Например, для default-конфигурации Theia IDE: <code style="white-space: pre;">theia__default</code> | Например, для <code style="white-space: pre;">default</code>-конфигурации Theia IDE: <code style="white-space: pre;">theia__default</code> | ||
== Конфигурация == | == Конфигурация == | ||
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла <code>svacer.cfg</code> | Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла <code style="white-space: pre;">svacer.cfg</code>. | ||
Раздел конфигурации для управления функциональностью | Раздел конфигурации для управления функциональностью - <code style="white-space: pre;">xsvacer/webide</code>. | ||
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE <code style="white-space: pre;">xsvacer/webide/theia</code>. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка. | Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE <code style="white-space: pre;">xsvacer/webide/theia</code>. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка. | ||
Line 292: | Line 272: | ||
... | ... | ||
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также | '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе <code style="white-space: pre;">xsvacer/webide</code> необходимо также настроить доступ к docker-хосту в разделе <code style="white-space: pre;">xsvacer/docker</code> ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно. | ||
'''Примечание:''' в случае отсутствия файла <code style="white-space: pre;">svacer.cfg</code> или отсутствии раздела <code style="white-space: pre;">xsvacer/webide</code> будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]] | |||
=== Конфигурация запуска Theia IDE === | === Конфигурация запуска Theia IDE === | ||
'''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами! | |||
Конфигурации запуска Theia IDE добавляются в виде полей в разделе <code style="white-space: pre;">xsvacer/webide</code>. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE: | Конфигурации запуска Theia IDE добавляются в виде полей в разделе <code style="white-space: pre;">xsvacer/webide</code>. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE: | ||
xsvacer: | xsvacer: | ||
webide: | webide: | ||
Line 316: | Line 295: | ||
!Тип данных | !Тип данных | ||
!Описание | !Описание | ||
!Значение в конфигурации по умолчанию | !Значение в конфигурации по умолчанию | ||
|- | |- | ||
|disabled | |disabled | ||
|bool | |bool | ||
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE | |Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE | ||
|true (переопределяется в конфигурации default) | |true (переопределяется в конфигурации <code style="white-space: pre;">default</code>) | ||
|- | |- | ||
|order | |order | ||
|int | |int | ||
|Порядковый номер в списке выбора конфигурации запуска | |Порядковый номер в списке выбора конфигурации запуска | ||
|0 | |0 | ||
|- | |- | ||
|name | |name | ||
|string | |string | ||
|Название конфигурации | |Название конфигурации | ||
|Theia blueprint web IDE (v1.46.0) | |Theia blueprint web IDE (v1.46.0) | ||
|- | |- | ||
|sourcesroot | |sourcesroot | ||
|string | |string | ||
|Путь к папке, содержащей исходные коды снимков на машине со | |Путь к папке, содержащей исходные коды снимков на машине со svacer'ом | ||
|${USER_CACHE_DIR}/svacer-snapshot-sources | |${USER_CACHE_DIR}/svacer-snapshot-sources | ||
|- | |- | ||
|dockerhostsourcesroot | |dockerhostsourcesroot | ||
|string | |string | ||
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от <code style="white-space: pre;">sourcesroot</code> | |Путь к папке, содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от <code style="white-space: pre;">sourcesroot</code> | ||
| | | | ||
|- | |- | ||
|dockerhostpathseparator | |dockerhostpathseparator | ||
|string | |string | ||
|Разделитель пути на хосте docker. По умолчанию <code style="white-space: pre;">"/"</code> | |Разделитель пути на хосте docker'а. По умолчанию <code style="white-space: pre;">"/"</code>. | ||
| | | | ||
|- | |- | ||
|sariffiletemplate | |sariffiletemplate | ||
|golang template string | |golang template string | ||
| | |Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]] | ||
Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]] | |"<nowiki>{{.Context.ProjectName}}.{{.Context.BranchName}}</nowiki>.sarif" | ||
|<nowiki> | |||
|} | |} | ||
==== Параметры менеджера запуска IDE ==== | ==== Параметры менеджера запуска IDE ==== | ||
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (<code style="white-space: pre;">type: default</code>) | Конфигурация менеджера запуска IDE. На данный момент доступен только "стандартный" менеджер (<code style="white-space: pre;">type: default</code>) | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 392: | Line 342: | ||
!Тип данных | !Тип данных | ||
!Описание | !Описание | ||
!Значение в конфигурации по умолчанию | !Значение в конфигурации по умолчанию | ||
|- | |- | ||
|manager | |manager | ||
|map | |map | ||
|Конфигурация менеджера запуска IDE | |Конфигурация менеджера запуска IDE | ||
| | | | ||
|- | |- | ||
|manager/type | |manager/type | ||
|enum: default | |enum: default | ||
|Тип менеджера запуска IDE | |Тип менеджера запуска IDE | ||
|default | |default | ||
|} | |} | ||
Line 414: | Line 364: | ||
!Тип данных | !Тип данных | ||
!Описание | !Описание | ||
!Значение в конфигурации по умолчанию | !Значение в конфигурации по умолчанию | ||
|- | |- | ||
|docker/ | |docker/ | ||
|map | |map | ||
|Настройки создания docker-контейнера с IDE | |Настройки создания docker-контейнера с IDE | ||
| | | | ||
|- | |- | ||
|docker/hostid | |docker/hostid | ||
|string | |string | ||
|Идентификатор хоста docker, описанного в <code style="white-space: pre;">xsvacer/docker/hosts</code>. Запуск docker-контейнера с IDE будет выполнен на этом хосте | |Идентификатор хоста docker'а, описанного в <code style="white-space: pre;">xsvacer/docker/hosts</code>. Запуск docker-контейнера с IDE будет выполнен на этом хосте | ||
|default | |default | ||
|- | |- | ||
|docker/containernametemplate | |docker/containernametemplate | ||
|golang template string | |golang template string | ||
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]] | |Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]] | ||
| | |"theia-1-46-<nowiki>{{.StartArgs.SnapshotID}}</nowiki>" | ||
|- | |- | ||
|docker/containerconfiglabels | |docker/containerconfiglabels | ||
|[]map | |[]map | ||
|Список меток docker-контейнера. Дополняет список меток в <code style="white-space: pre;">docker/container/config/labels</code> | |Список "меток" docker-контейнера. Дополняет список меток в <code style="white-space: pre;">docker/container/config/labels</code> | ||
| | | | ||
- "com.docker.compose.project": svacer | - "com.docker.compose.project": svacer | ||
|- | |- | ||
|docker/image/ | |docker/image/ | ||
|map | |map | ||
|Параметры docker-образа из которого будет запущен контейнер | |Параметры docker-образа из которого будет запущен контейнер | ||
| | | | ||
|- | |- | ||
|docker/image/name | |docker/image/name | ||
|string | |string | ||
|Название образа | |Название образа | ||
|theia-blueprint | |theia-blueprint | ||
|- | |- | ||
|docker/image/tag | |docker/image/tag | ||
|string | |string | ||
|Тег образа | |Тег образа | ||
| | |1.46.0.sarif.clang | ||
|- | |- | ||
|docker/image/sourcetype | |docker/image/sourcetype | ||
|enum: repository/file | |enum: repository/file | ||
|Тип источника для загрузки образа в docker-хост | |Тип источника для загрузки образа в docker-хост. | ||
* repository | * <code style="white-space: pre;">repository</code> - будет вызван <code style="white-space: pre;">docker pull</code> образа <code style="white-space: pre;">{image/name}:{image/tag}</code> | ||
* file | * <code style="white-space: pre;">file</code> - будет вызван <code style="white-space: pre;">docker load</code> с url'ом <code style="white-space: pre;">image/sourcefileurl</code> | ||
|file | |file | ||
|- | |- | ||
|docker/image/sourcefileurl | |docker/image/sourcefileurl | ||
|url | |url | ||
| | |Url откуда будет загружен docker-образ если <code style="white-space: pre;">image/sourcetype == "file"</code> | ||
Url может содержать: | |||
- путь к локальному файлу: схема <code style="white-space: pre;">file://</code> | |||
- http/https-адрес: схема <code style="white-space: pre;">http://</code> или <code style="white-space: pre;">https://</code> | |||
| | |https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar | ||
|- | |- | ||
|docker/container/ | |docker/container/ | ||
|map | |map | ||
|Свойства docker-контейнера | |Свойства docker-контейнера | ||
| | | | ||
|- | |- | ||
|docker/container/config | |docker/container/config | ||
|map | |map | ||
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70 | |Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70 | ||
| | | | ||
|- | |- | ||
|docker/container/config/env | |docker/container/config/env | ||
Line 487: | Line 431: | ||
|Список переменных среды, которые будут установлены в контейнере | |Список переменных среды, которые будут установлены в контейнере | ||
| | | | ||
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=<nowiki>{{hostname}}</nowiki> | - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=<nowiki>{{hostname}}</nowiki> | ||
|- | |- | ||
|docker/container/hostconfig/ | |docker/container/hostconfig/ | ||
|map | |map | ||
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379 | |Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379 | ||
| | | | ||
|- | |- | ||
|docker/container/hostconfig/autoremove | |docker/container/hostconfig/autoremove | ||
|bool | |bool | ||
| | | | ||
|true | |true | ||
|- | |- | ||
|docker/container/hostconfig/portbindings | |docker/container/hostconfig/portbindings | ||
Line 503: | Line 447: | ||
| | | | ||
| | | | ||
"3000/tcp": | "3000/tcp": | ||
- hostport: 0 | |||
|- | |- | ||
|docker/container/networkconfig/ | |docker/container/networkconfig/ | ||
|map | |map | ||
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104 | |Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104 | ||
| | | | ||
|} | |} | ||
Line 521: | Line 465: | ||
!Тип данных | !Тип данных | ||
!Описание | !Описание | ||
!Значение в конфигурации по умолчанию | !Значение в конфигурации по умолчанию | ||
|- | |- | ||
|healthcheck | |healthcheck | ||
|map | |map | ||
|Параметры проверки доступности IDE | |Параметры проверки доступности IDE | ||
| | | | ||
|- | |- | ||
|healthcheck/starttoreadyretries | |healthcheck/starttoreadyretries | ||
|int | |int | ||
|Количества попыток проверки до ошибки доступности | |Количества попыток проверки до ошибки доступности | ||
|10 | |10 | ||
|- | |- | ||
|healthcheck/starttoreadyperiod | |healthcheck/starttoreadyperiod | ||
|golang duration string | |golang duration string | ||
|Интервал проверки | |Интервал проверки | ||
|200ms | |200ms | ||
|} | |} | ||
Line 543: | Line 487: | ||
sarifFileContext { | sarifFileContext { | ||
Time time.Time | Time time.Time | ||
Context: { | |||
ProjectID *string | ProjectID *string | ||
BranchID *string | BranchID *string | ||
SnapshotID *string | SnapshotID *string | ||
MarkerID *string | MarkerID *string | ||
ProjectName *string | ProjectName *string | ||
BranchName *string | BranchName *string | ||
Line 558: | Line 502: | ||
} | } | ||
} | } | ||
TheiaDockerContainerStartContext { | TheiaDockerContainerStartContext { | ||
IdeID: { | |||
IdeType string | IdeType string | ||
ConfigID string | ConfigID string | ||
}, | }, | ||
StartArgs: { | |||
SnapshotID string | SnapshotID string | ||
UserID string | UserID string | ||
User string | User string | ||
}, | }, | ||
Context: { | |||
ProjectID *string | ProjectID *string | ||
BranchID *string | BranchID *string | ||
SnapshotID *string | SnapshotID *string | ||
MarkerID *string | MarkerID *string | ||
ProjectName *string | ProjectName *string | ||
BranchName *string | BranchName *string | ||
Line 583: | Line 527: | ||
CreateTs null.Time | CreateTs null.Time | ||
} | } | ||
} | } | ||
=== Конфигурация по умолчанию === | === Конфигурация по умолчанию === | ||
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел <code style="white-space: pre;">xsvacer/webide</code> | Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел <code style="white-space: pre;">xsvacer/webide</code>: | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 610: | Line 542: | ||
name: Theia blueprint web IDE (v1.46.0) | name: Theia blueprint web IDE (v1.46.0) | ||
sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources | sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources | ||
sariffiletemplate: "<nowiki>{{.Context.ProjectName}}.{{.Context.BranchName}}</nowiki>.sarif" | |||
manager: | manager: | ||
type: default | type: default | ||
Line 619: | Line 550: | ||
image: | image: | ||
name: theia-blueprint | name: theia-blueprint | ||
tag: 1.46.0.sarif.clang | tag: 1.46.0.sarif.clang | ||
sourcetype: file | sourcetype: file | ||
sourcefileurl: https:// | sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar | ||
containerconfiglabels: | containerconfiglabels: | ||
- "com.docker.compose.project": svacer | - "com.docker.compose.project": svacer | ||
Line 643: | Line 574: | ||
</pre> | </pre> | ||
По умолчанию используется docker-хост с идентификатором <code>default</code>. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет <code style="white-space: pre;">unix:///var/run/docker.sock</code>. Соответственно пользователь, под которым запускается | '''Внимание!''' По умолчанию используется docker-хост с идентификатором <code style="white-space: pre;">default</code>. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет <code style="white-space: pre;">unix:///var/run/docker.sock</code>. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/). | ||
'''Внимание!''' При наличии раздела <code style="white-space: pre;">xsvacer/webide</code> в конфигурационном файле <code style="white-space: pre;">svacer.cfg</code> будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы. | |||
=== Изменение конфигурационных параметров с помощью переменных окружения === | === Изменение конфигурационных параметров с помощью переменных окружения === | ||
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения | Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения <code style="white-space: pre;">XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}</code>. | ||
Например, для активации rootless-хоста <code style="white-space: pre;">xsvacer/hosts/local</code> и переключения запуска IDE с идентификатором <code style="white-space: pre;">default</code> на этот хост можно указать такие значения переменных окружения при запуске svacer'а: | |||
XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false | XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false | ||
XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local | XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local | ||
Line 661: | Line 589: | ||
В процессе использования функциональности IDE создаются следующие артефакты: | В процессе использования функциональности IDE создаются следующие артефакты: | ||
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/sourcesroot</code> | # Исходные файлы снимков скачиваются в "корневые папки", заданные в параметре <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/sourcesroot</code>; | ||
# Артефакты docker: | # Артефакты docker: | ||
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/hostid</code> | #* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/hostid</code>; | ||
#* названия docker-образов будут соответствовать параметрам в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/image</code> | #* названия docker-образов будут соответствовать параметрам в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/image</code>; | ||
#* названия docker-контейнеров будут соответствовать параметру <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate</code> | #* названия docker-контейнеров будут соответствовать параметру <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate</code>; | ||
#* наборы меток doker-контейнеров будут содержать: | #* наборы меток doker-контейнеров будут содержать: | ||
#*: метки, перечисленные в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels</code> | #*: метки, перечисленные в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels</code>; | ||
#*: метки, перечисленные в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels</code> | #*: метки, перечисленные в <code style="white-space: pre;">xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels</code>; | ||
#*: метки с названиями <code style="white-space: pre;">svacer.service.id</code>, <code style="white-space: pre;">svacer.service.type</code>, <code style="white-space: pre;">svacer.theia.start_args</code> | #*: метки с названиями <code style="white-space: pre;">svacer.service.id</code>, <code style="white-space: pre;">svacer.service.type</code>, <code style="white-space: pre;">svacer.theia.start_args</code>; | ||
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста | # При использовании rootless-хоста docker'а будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]]. | ||
== Рекомендации == | == Рекомендации == | ||
Line 676: | Line 604: | ||
=== Предварительная загрузка docker-образа с IDE === | === Предварительная загрузка docker-образа с IDE === | ||
По умолчанию параметр | По умолчанию параметр <code style="white-space: pre;">xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl</code> содержит значение <code style="white-space: pre;">https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar</code>. По этому адресу находится архив с docker-образом для Theia IDE. | ||
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго. | |||
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker'а вручную. Для этого необходимо: | |||
# Скачать файл архива; | |||
# Выполнить команду <code style="white-space: pre;">docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar</code>; | |||
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо: | |||
# Скачать файл архива | |||
# Выполнить команду <code style="white-space: pre;">docker image load -i /path/to/theia-blueprint...</code> | |||
== Информация о docker-образе Theia IDE == | == Информация о docker-образе Theia IDE == | ||
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0] | Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]] | ||
При этом была изменена компоновка расширений | При этом была изменена компоновка расширений theia (результат выполнения <code style="white-space: pre;">git diff</code>): | ||
<pre style="white-space: pre;"> | <pre style="white-space: pre;"> | ||
Line 728: | Line 645: | ||
- "vscjava.vscode-java-dependency": "https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix" | - "vscjava.vscode-java-dependency": "https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix" | ||
+ "llvm-vs-code-extensions.vscode-clangd": "https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix", | + "llvm-vs-code-extensions.vscode-clangd": "https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix", | ||
+ "ms-sarifvscode.sarif-viewer": "https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4. | + "ms-sarifvscode.sarif-viewer": "https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix" | ||
}, | }, | ||
"theiaPluginsExcludeIds": [ | "theiaPluginsExcludeIds": [ | ||
Line 734: | Line 651: | ||
</pre> | </pre> | ||
Команда построения docker-образа: | Команда построения docker-образа: | ||
<pre style="white-space: pre;"> | |||
docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile . | |||
</pre> | |||
Команда экспорта docker-образа: | Команда экспорта docker-образа: | ||
<pre style="white-space: pre;"> | |||
docker image save theia-blueprint:1.46.0 > /path/to/tar/theia-blueprint.1.46.0.docker.command.tar | |||
</pre> | |||
== Известные проблемы == | == Известные проблемы == | ||
Line 746: | Line 667: | ||
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора. | Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора. | ||
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost. | В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers|требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на <code style="white-space: pre;">localhost</code>. | ||
Поэтому для решения данной проблемы | Поэтому для решения данной проблемы svacer должен открываться по https или быть доступен по адресу <code style="white-space: pre;"><nowiki>http://localhost:...</nowiki></code> |
Revision as of 13:32, 10 June 2024
Поддержка среды разработки Theia IDE
Примечание: данная функциональность входит в набор расширений XSvacer.
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.
По умолчанию запускается IDE, собранная на основе Theia IDE.
Активация функциональности
Для активации функциональности необходимо указать флаг --xsvacer.features webide
при запуске svacer'а.
Примечание: при запуске функциональностиwebide
также будет запущена функциональностьdocker
.
При активации функциональности:
- становится доступным REST API управления IDE для просмотра исходного кода снимков проектов;
- в пользовательском интерфейсе на вкладке "Информация о снимке" появляется кнопка "Открыть в IDE";
- устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.
Быстрый запуск функциональности с настройками по умолчанию
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:
- Настройка доступа к docker-хосту:
- Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет
unix:///var/run/docker.sock
- https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option); - Проверить, что у пользователя под которым будет запускаться svacer есть доступ к unix-сокету docker-хоста
unix:///var/run/docker.sock
- https://docs.docker.com/engine/install/linux-postinstall/;
- Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет
- Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку
"Просмотр маркеров"
и"Экспорт разметки"
; - Перезапустить svacer с флагом
--xsvacer.features webide
. - Опционально. Для ускорения первого запуска IDE:
- Скачать архив с docker-образом: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar;
- Загрузить docker-образ из архива на docker-хост:
docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar
;
После этого у пользователей с указанными правами должна появиться кнопка "Открыть в IDE" на панели с информацией о снимке.
Внимание! IDE с исходным подом снимков будут запускаться в новых вкладках браузера. При этом зачастую все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. Например, в firefox:В таком случае нужно дать разрешение на открытие вкладки с IDE:
![]()
При необходимости изменения настроек подключения к docker-хосту:
- скопировать конфигурацию docker по умолчанию в раздел
xsvacer
конфигурационного файлаsvacer.cfg
; - внести требуемые изменения в конфигурацию раздела
xsvacer/docker
.
При необходимости изменения настроек запуска IDE:
- скопировать конфигурацию webide по умолчанию в раздел
xsvacer
конфигурационного файлаsvacer.cfg
; - внести требуемые изменения в конфигурацию раздела
xsvacer/webide
.
Принцип работы
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:
- Функциональность активна: при запуске svacer'а указан флаг
--xsvacer.features webide
; - В конфигурации функциональности
xsvacer/webide/theia
есть хотя бы одна активная (disabled: false
) конфигурация IDE; - У пользователя svacer имеются разрешения
"Просмотр маркеров"
и"Экспорт разметки"
на проект, в котором находится снимок, для которого нужно запустить IDE.
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка "Открыть в IDE"
("Open in IDE"
).
Запуск IDE
Запуск производится путём вызова http-метода POST /api/snapshots/{snapshot_id}/ide
с телом запроса {"ideId": "идентификатор IDE"}
.
Последовательность действий, выполняемых при запуске IDE:
- Производится проверка: была ли уже запущена указанная IDE для указанного снимка:
- Если запущена: производится проверка доступности IDE (отвечает на запросы):
- Если IDE доступна: действие не требуется. Процесс запуска завершается;
- Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена;
- Если запущена: производится проверка доступности IDE (отвечает на запросы):
- Создаётся "корневая папка снимка", предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE
xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot
; - Исходный код снимка скачивается в "корневую папку снимка";
- Производится экспорт маркеров и разметки в виде sarif-файла в "корневую папку снимка". Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE
xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate
; - Производится настройка и запуск docker-контейнера в соответствии с настройками
xsvacer/webide/theia/{идентификатор конфигурации}/docker
:- Проверяется наличие на docker-хосте образа IDE, указанного в
xsvacer/webide/theia/{идентификатор конфигурации}/docker/image
:- Если docker-образ отсутствует - он будет загружен на хост;
- Проверяется наличие на docker-хосте контейнера с IDE для снимка:
- Если docker-контейнер не существует, то он будет создан и запущен;
- Если docker-контейнер существует и находится:
- в статусе
running
- процесс запуска IDE продолжается; - в статусе
created
,exited
илиpaused
- контейнер будет запущен; - в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;
- в статусе
- Проверяется наличие на docker-хосте образа IDE, указанного в
- После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками
xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck
:- Если за отведённое время ответ от IDE получен - процесс запуска завершается;
- Если ответ не получен - вернётся ошибка
ide not ready
.
Внимание! При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.
Внимание! Причиной возникновения ошибкиide not ready
может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойкахxsvacer/webide/theia/{идентификатор конфигурации}/healthcheck
. В случае возникновения ошибкиide not ready
рекомендуется попробовать повторно запустить IDE через короткий промежуток времени. Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется: 1. проверить сетевую доступность docker-хоста; 2. проверить настройки биндинга docker-контейнера c IDE -xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings
. Контейнер должен быть подключён к доступному сетевому интерфейсу; 3. проверить настройки фаервола на docker-хосте.
Использование IDE: проксирование запросов
После успешного запуска docker-контейнера IDE станут доступны ресурсы с "префиксом" /xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/
.
Все запросы, направленные к ресурсам /xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*
, будут проксироваться в соответствующий контейнер IDE.
Например, если docker-контейнер c IDE theia__default
для снимка xxx
запущен и "слушает" порт 35353
на хосте docker-host
, то будет происходить проксирование:
GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/
⇒GET http://docker-host:35353/
POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...
⇒GET http://docker-host:35353/socket.io/?...
GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...
⇒GET ws://docker-host:35353/socket.io/?...
Примечание: для запуска IDE в окне браузера нужно указать адрес http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/
. Завершающий слеш обязателен!
Перезапуск IDE
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при первоначальном запуске IDE.
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.
Остановка IDE
Запуск производится путём вызова http-метода DELETE /api/snapshots/{snapshot_id}/ide
с телом запроса {"ideId": "идентификатор IDE"}
.
В ходе обработки запроса останавливается docker-контейнер IDE.
Внимание! По умолчанию установлен параметр конфигурацииxsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true
. Это означает, что после остановки docker-контейнер будет автоматически удалён. Чтобы изменить это поведение, настройкаxsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove
должна быть установлена вfalse
на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окруженияXSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false
. !!!Сейчас установкаautoremove: false
вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления.
Примечание! При корректной остановке (например SIGTERM
) svacer автоматически остановит все запущенные docker-контейнеры IDE
Подключение к IDE после некорректного завершениея svacer
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а все docker-контейнеры IDE будут остановлены.
REST API для работы с IDE
Внимание! На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:
Ресурс | Описание |
---|---|
GET /xsvacer/webide/api/ide |
Получение списка доступных для запуска IDE.
Ответ: [ { "id": "string", "name": "string", "order": 0 } ]
|
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id} |
Запрос описания экземпляра IDE, запущенного для снимка.
Параметры:
Ответ: { "id": { "ide_id": { "ide_type": "string" "config_id": "string", }, "snapshot_id": "string" }, "properties": { "url": "string" }, "start_args": { "snapshot_id": "string", "user": "string", "user_id": "string" } } |
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide |
Запуск IDE для просмотра исходных кодов снимка
Параметры:
Запрос: { "ideId": "string" }
Ответ: { "ideId": "string" }
|
PUT /api/snapshots/{snapshot_id}/ide |
Команда управления экземпляром IDE снимка
Доступные действия:
Параметры:
Запрос: { "action": "string", "ideId": "string" }
Ответ: пустой |
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide |
Остановка экземпляра IDE снимка
Параметры:
Запрос: { "ideId": "string" }
Ответ: пустой |
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/* |
Прокси для запросов экземпляра IDE снимка |
Формат идентификатора IDE
{тип ide}__{идентификатор конфигурации}
Например, для default
-конфигурации Theia IDE: theia__default
Конфигурация
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла svacer.cfg
.
Раздел конфигурации для управления функциональностью - xsvacer/webide
.
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE xsvacer/webide/theia
. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.
xsvacer: webide: theia: config1: ... config2: ...
Внимание! Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделеxsvacer/webide
необходимо также настроить доступ к docker-хосту в разделеxsvacer/docker
(Help:XSvacer:Docker). В противном случае функциональность webide не сможет работать корректно.
Примечание: в случае отсутствия файлаsvacer.cfg
или отсутствии разделаxsvacer/webide
будет использоваться конфигурация по умолчанию
Конфигурация запуска Theia IDE
Внимание! На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!
Конфигурации запуска Theia IDE добавляются в виде полей в разделе xsvacer/webide
. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:
xsvacer: webide: theia: 1-46-0: name: Theia blueprint web IDE (v1.46.0) ...
Базовые параметры конфигурации запуска
Название | Тип данных | Описание | Значение в конфигурации по умолчанию |
---|---|---|---|
disabled | bool | Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE | true (переопределяется в конфигурации default )
|
order | int | Порядковый номер в списке выбора конфигурации запуска | 0 |
name | string | Название конфигурации | Theia blueprint web IDE (v1.46.0) |
sourcesroot | string | Путь к папке, содержащей исходные коды снимков на машине со svacer'ом | ${USER_CACHE_DIR}/svacer-snapshot-sources |
dockerhostsourcesroot | string | Путь к папке, содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от sourcesroot
|
|
dockerhostpathseparator | string | Разделитель пути на хосте docker'а. По умолчанию "/" .
|
|
sariffiletemplate | golang template string | Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура sarifFileContext | "{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif" |
Параметры менеджера запуска IDE
Конфигурация менеджера запуска IDE. На данный момент доступен только "стандартный" менеджер (type: default
)
Название | Тип данных | Описание | Значение в конфигурации по умолчанию |
---|---|---|---|
manager | map | Конфигурация менеджера запуска IDE | |
manager/type | enum: default | Тип менеджера запуска IDE | default |
Параметры запуска docker-контейнеров с IDE
Данные параметры используются для настройки запуска docker-контейнеров с IDE
Название | Тип данных | Описание | Значение в конфигурации по умолчанию |
---|---|---|---|
docker/ | map | Настройки создания docker-контейнера с IDE | |
docker/hostid | string | Идентификатор хоста docker'а, описанного в xsvacer/docker/hosts . Запуск docker-контейнера с IDE будет выполнен на этом хосте
|
default |
docker/containernametemplate | golang template string | Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура TheiaDockerContainerStartContext | "theia-1-46-{{.StartArgs.SnapshotID}}" |
docker/containerconfiglabels | []map | Список "меток" docker-контейнера. Дополняет список меток в docker/container/config/labels
|
- "com.docker.compose.project": svacer |
docker/image/ | map | Параметры docker-образа из которого будет запущен контейнер | |
docker/image/name | string | Название образа | theia-blueprint |
docker/image/tag | string | Тег образа | 1.46.0.sarif.clang |
docker/image/sourcetype | enum: repository/file | Тип источника для загрузки образа в docker-хост.
|
file |
docker/image/sourcefileurl | url | Url откуда будет загружен docker-образ если image/sourcetype == "file"
Url может содержать:
- путь к локальному файлу: схема |
https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar |
docker/container/ | map | Свойства docker-контейнера | |
docker/container/config | map | Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70 | |
docker/container/config/env | []string | Список переменных среды, которые будут установлены в контейнере |
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT={{hostname}} |
docker/container/hostconfig/ | map | Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379 | |
docker/container/hostconfig/autoremove | bool | true | |
docker/container/hostconfig/portbindings | map |
"3000/tcp": - hostport: 0 | |
docker/container/networkconfig/ | map | Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104 |
Параметры проверки доступности healthcheck
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера
Название | Тип данных | Описание | Значение в конфигурации по умолчанию |
---|---|---|---|
healthcheck | map | Параметры проверки доступности IDE | |
healthcheck/starttoreadyretries | int | Количества попыток проверки до ошибки доступности | 10 |
healthcheck/starttoreadyperiod | golang duration string | Интервал проверки | 200ms |
Структуры передаваемые в поля с golang-шаблонами строк
sarifFileContext { Time time.Time Context: { ProjectID *string BranchID *string SnapshotID *string MarkerID *string ProjectName *string BranchName *string SnapshotName *string MarkerName *string CreatedBy null.String CreatedByID null.String CreateTs null.Time } } TheiaDockerContainerStartContext { IdeID: { IdeType string ConfigID string }, StartArgs: { SnapshotID string UserID string User string }, Context: { ProjectID *string BranchID *string SnapshotID *string MarkerID *string ProjectName *string BranchName *string SnapshotName *string MarkerName *string CreatedBy null.String CreatedByID null.String CreateTs null.Time } }
Конфигурация по умолчанию
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел xsvacer/webide
:
xsvacer: webide: theia: 1-46-0: &1-46-0 disabled: true order: 0 name: Theia blueprint web IDE (v1.46.0) sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources sariffiletemplate: "{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif" manager: type: default docker: hostid: default # идентификатор используемого docker-хоста containernametemplate: "theia-1-46-{{.StartArgs.SnapshotID}}" image: name: theia-blueprint tag: 1.46.0.sarif.clang sourcetype: file sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar containerconfiglabels: - "com.docker.compose.project": svacer container: config: env: - THEIA_WEBVIEW_EXTERNAL_ENDPOINT={{hostname}} hostconfig: autoremove: true portbindings: "3000/tcp": - hostport: 0 networkconfig: healthcheck: starttoreadyretries: 10 starttoreadyperiod: 200ms default: <<: *1-46-0 order: 0 disabled: false
Внимание! По умолчанию используется docker-хост с идентификаторомdefault
. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокетunix:///var/run/docker.sock
. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).
Внимание! При наличии разделаxsvacer/webide
в конфигурационном файлеsvacer.cfg
будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.
Изменение конфигурационных параметров с помощью переменных окружения
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}
.
Например, для активации rootless-хоста xsvacer/hosts/local
и переключения запуска IDE с идентификатором default
на этот хост можно указать такие значения переменных окружения при запуске svacer'а:
XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local
Очистка системы: удаление артефактов функциональности
В процессе использования функциональности IDE создаются следующие артефакты:
- Исходные файлы снимков скачиваются в "корневые папки", заданные в параметре
xsvacer/webide/theia/{id конфигурации}/sourcesroot
; - Артефакты docker:
- образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в
xsvacer/webide/theia/{id конфигурации}/docker/hostid
; - названия docker-образов будут соответствовать параметрам в
xsvacer/webide/theia/{id конфигурации}/docker/image
; - названия docker-контейнеров будут соответствовать параметру
xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate
; - наборы меток doker-контейнеров будут содержать:
- метки, перечисленные в
xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels
; - метки, перечисленные в
xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels
; - метки с названиями
svacer.service.id
,svacer.service.type
,svacer.theia.start_args
;
- метки, перечисленные в
- образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в
- При использовании rootless-хоста docker'а будут созданы папки согласно Help:XSvacer:Docker#Специфичные настройки для rootless-хоста.
Рекомендации
Предварительная загрузка docker-образа с IDE
По умолчанию параметр xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl
содержит значение https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar
. По этому адресу находится архив с docker-образом для Theia IDE.
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:
- Скачать файл архива;
- Выполнить команду
docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar
;
Информация о docker-образе Theia IDE
Docker-образ, используемый по умолчанию, построен на базе Eclipse Theia IDE версии [[1]]
При этом была изменена компоновка расширений theia (результат выполнения git diff
):
diff --git a/browser.Dockerfile b/browser.Dockerfile index efe591e..a4ebb6a 100644 --- a/browser.Dockerfile +++ b/browser.Dockerfile @@ -42,7 +42,7 @@ RUN chmod g+rw /home && \ RUN apt-get update && apt-get install -y wget apt-transport-https && \ wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc && \ echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list && \ - apt-get update && apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven && \ + apt-get update && apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd && \ apt-get purge -y wget && \ apt-get clean diff --git a/package.json b/package.json index 9044595..9d0dcc8 100644 --- a/package.json +++ b/package.json @@ -54,10 +54,8 @@ "theiaPluginsDir": "plugins", "theiaPlugins": { "eclipse-theia.builtin-extension-pack": "https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix", - "ms-vscode.js-debug": "https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix", - "ms-vscode.js-debug-companion": "https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix", - "vscjava.vscode-java-pack": "https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix", - "vscjava.vscode-java-dependency": "https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix" + "llvm-vs-code-extensions.vscode-clangd": "https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix", + "ms-sarifvscode.sarif-viewer": "https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix" }, "theiaPluginsExcludeIds": [ "ms-vscode.js-debug-companion",
Команда построения docker-образа:
docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .
Команда экспорта docker-образа:
docker image save theia-blueprint:1.46.0 > /path/to/tar/theia-blueprint.1.46.0.docker.command.tar
Известные проблемы
При открытии sarif-файла в IDE открывается пустая панель "SARIF Results"
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин SARIF Viewer. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.
В Theia IDE для открытия webview применяется Service Worker API. В целях обеспечения безопасности применение Service Worker API [2], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost
.
Поэтому для решения данной проблемы svacer должен открываться по https или быть доступен по адресу http://localhost:...