Чеклист ревью
Что обязательно (MUST) и что желательно (SHOULD) проверить.
На этой странице
Этот чеклист можно использовать двумя способами: для самопроверки перед отправкой пакета и для ревью чужих пакетов.
MUST — обязательные требования
Пакет не принимается в community, если не выполнен хотя бы один пункт MUST.
Метаданные SPEC
-
Nameсоответствует upstream -
Versionсоответствует реальной версии upstream -
License— корректный SPDX-идентификатор, проверен по исходникам -
URL— рабочая ссылка на проект -
Source0— доступный URL или файл в репозитории -
Summary— информативное описание на английском -
%description— понятное описание
Сборка и качество
- Пакет собирается на ABF без ошибок
-
rpmlintне выдаёт ошибок (E:) - Пакет устанавливается и запускается
-
Все
BuildRequiresуказаны явно (сборка проходит в чистом окружении) - Зависимости корректны (нет лишних, нет пропущенных)
Файлы
-
%licenseуказан для файлов лицензий - Нет файлов, принадлежащих другим пакетам
-
Конфиги помечены
%config(noreplace) -
Нет
.laфайлов (libtool) - Используются макросы путей, а не жёсткие пути
Безопасность
- Исходники из доверенного источника
- Нет подозрительного кода в патчах
- Скриптлеты безопасны и идемпотентны
Подпакеты (если есть)
-
.soбез версии — только в-devel -
-develзависит от основного пакета с%{?_isa} -
ldconfigвызывается для пакетов с.so.*
SHOULD — желательные требования
Предупреждения rpmlint (W:) и нарушения SHOULD не блокируют приём, но ревьюер может попросить исправить.
-
%checkсекция присутствует (тесты запускаются) - Man-страницы для бинарников
-
%docдля документации (README, AUTHORS) - Changelog содержит осмысленные записи
- Нет предупреждений rpmlint (W:), или они объяснены
- Hardening-флаги не отключены без причины
-
Bundled-зависимости документированы (
Provides: bundled(...)) - Патчи отправлены upstream (или объяснено, почему нет)
Как проводить ревью
Шаг 1: Скачать и изучить SPEC
git clone git@abf.io:username_personal/mypackage.git
cd mypackage
less mypackage.spec
Шаг 2: Проверить исходники
# Откуда скачиваются?
spectool -l mypackage.spec
# Лицензия совпадает?
tar xf mypackage-1.0.tar.gz
cat mypackage-1.0/LICENSE
Шаг 3: Собрать локально
# Скопировать файлы
cp mypackage-1.0.tar.gz ~/rpmbuild/SOURCES/
cp *.patch ~/rpmbuild/SOURCES/
cp mypackage.spec ~/rpmbuild/SPECS/
# Собрать
rpmbuild -ba ~/rpmbuild/SPECS/mypackage.spec
# Проверить rpmlint
rpmlint ~/rpmbuild/RPMS/*/*.rpm
Шаг 4: Установить и проверить
sudo dnf install ~/rpmbuild/RPMS/x86_64/mypackage-*.rpm
mypackage --version
mypackage --help
Шаг 5: Написать результат
Ревью пакета mypackage-1.0.0-1
MUST:
[+] License: MIT — проверено, совпадает с исходниками
[+] Собирается без ошибок
[+] rpmlint clean (0 errors)
[+] Устанавливается и запускается
[-] BuildRequires: pkgconfig(libfoo) отсутствует
SHOULD:
[~] Нет man-страницы (upstream не предоставляет)
[+] %check включён
Результат: НУЖНА ДОРАБОТКА
Замечание: добавить отсутствующий BuildRequires
Проверьте понимание
- Чем MUST отличается от SHOULD?
- Как проверить, что лицензия в SPEC соответствует исходникам?
- Как убедиться, что все BuildRequires указаны?
- Что делать, если man-страница отсутствует в upstream?