Участие в W Linux
Спасибо, что заглянули. Баг-репорты, вопросы и патчи — всё приветствуется.
Прежде всего одна особенность этого репозитория, непривычная и стоящая двух минут вашего времени, потому что она меняет судьбу вашего pull request'а.
Как публикуется этот репозиторий
W разрабатывается в приватном репозитории и публикуется здесь серией релизных
снапшотов. Каждый коммит в main — это один релиз: полное, протестированное
дерево с тегом vX.Y.Z и списком изменений в сообщении коммита. Повседневной
истории коммитов здесь нет и не будет.
Два следствия:
Эта ветка только дополняется. Установленные машины с W следуют за ней через
git pull --ff-only. Переписанная или форс-запушенная история оставила бы за
бортом каждую из них, поэтому такого не происходит.
Pull request'ы приземляются руками, а не кнопкой «merge». Слияние PR здесь
положило бы в ветку не-релизный коммит и сломало бы описанную выше модель.
Вместо этого ваш патч применяется к дереву разработки, там ревьюится и
тестируется и приезжает в следующем релизе. Когда этот релиз выходит, ваш PR
закрывается со ссылкой на него — закрывается, а не отклоняется. Ваше авторство
сохраняется через Co-authored-by, и вы упоминаетесь в release notes.
Итак: закрытый PR здесь обычно означает «отгружено», а релиз, в котором он отгружен, будет указан в закрывающем комментарии.
Как сообщить о баге
Откройте issue. Что действительно помогает:
- Строки
IMAGE_VERSIONиW_BUILD_DATEиз/etc/os-release w-sync status— на каком канале и ref'е находится машина- Относящийся к делу лог. W логирует собственную работу в
/var/log/w/;sudo /var/lib/w/src/scripts/collect-logs.shсобирает полный диагностический комплект, если вы хотите его приложить. Прочитайте его перед тем, как прикладывать, — это системная диагностика, и в ней могут оказаться имена хостов, пользователей, сетей или пути, которые вы предпочли бы не публиковать. - Железо, когда баг выглядит железозависимым (GPU, модель ноутбука, конфигурация мониторов)
По всему, что чувствительно с точки зрения безопасности, issue не открывайте — см. SECURITY.md.
Как прислать патч
-
Сделайте форк, ветку и правку относительно
main. -
Прогоните проверки.
scripts/check.sh— статический гейт проекта: линтеры shell и Python, инварианты прав и манифестов, маршрутизация доставки, слоёный конфиг, i18n, линт QML и юнит-тесты. Это занимает секунды и обязано быть зелёным:./scripts/check.sh # всё ./scripts/check.sh --bash # один сьютОтсутствующие линтеры пропускают свой сьют с предупреждением, а не роняют прогон, так что и с неполным набором инструментов вы пройдёте бо́льшую часть пути.
-
Если правка затрагивает что-либо видимое пользователю, расскажите, как вы проверили это на настоящей машине или в VM. В
vm/лежит собственный стенд проекта:vm/start.shподнимает dev-VM,vm/e2e.shпрогоняет установку без участия человека от начала до конца. -
Откройте PR. Объясните, что ломается без вашей правки, — это полезнее, чем пересказ диффа.
Как должен выглядеть код
Так же, как то, что уже есть. Конкретно:
- Shell — это bash с
set -euo pipefail, чистый по shellcheck. Python — чистый по ruff. И то, и другое проверяетсяcheck.sh. - Комментарии объясняют «почему», а не «что». Существующий код тяжело нагружен обоснованиями — в какую ловушку наступили, какую альтернативу отвергли и по какой причине. Это сделано намеренно; продолжайте в том же духе. Комментарий, пересказывающий строку под собой, — шум.
- Уважайте границу владения. Файлы, которыми управляет W, перезаписываются
при каждом обновлении; файлы, которыми владеет пользователь, засеваются один
раз и больше не трогаются. Что к чему относится — объявлено в манифестах
модулей под
rootfs/usr/share/w/update/*.manifest, иcheck.shэто проверяет. Добавляете поставляемый файл — добавьте строку в манифест в той же правке. - Новый модуль — новая маршрутизация.
rootfs/usr/share/w/update/sync-mapрешает, какой модульapply.shзапускается при изменении данного пути. Сьютroutingпадает, если поставляемому файлу некуда идти. - Держите дифф в рамках задачи. Попутное переформатирование нетронутого кода усложняет ревью, и его обычно попросят убрать.
О чём стоит спросить заранее
Откройте issue до начала работы, если ваша правка добавляет зависимость, новую
директорию верхнего уровня, новый инструмент w-* или меняет поток шагов
инсталлятора. Это архитектурные вещи, и обсудить их дешевле, чем переделать.
Лицензия
Внося вклад, вы соглашаетесь, что ваша работа лицензируется под GPL-3.0-or-later — лицензией этого проекта, — а вносимая вами графика лицензируется под CC BY-SA 4.0; это разделение описано в COPYING.assets. CLA нет, передачи авторских прав нет; вы сохраняете своё авторское право.