Кукбук · 3 из 3

Попасть в фид

Релиз даёт человеку скачивание. Фид даёт apk upgrade — единственный путь, который продолжает работать после первой установки. Ниже то, что требует owfeed-packages; другой фид будет отличаться деталями, но не устройством.

Два требования

Пакеты должны быть подписаны вашим ключом, а его публичная половина зафиксирована в фиде. Пакет, который фид не может атрибутировать, он не опубликует — и проверка живёт в пайплайне, а не в тексте: owfeed doctor валит неподписанный пакет, и дерево публикуется без него.

Это шаг 2, так что если вы его прошли — всё уже готово. Приложите к заявке author.pub.pem.

Описание говорит, что пакет такое, а не для чего он. Его показывает apk info, и оно уезжает в индекс: фактическое, техническое, до 512 байт.

Публикуйте подписанный манифест — и обновления поедут сами

Три варианта, и от выбранного зависит, сколько ручной работы будет на каждом вашем следующем релизе:

Что вы публикуетеЧто покрывает подписьАвтообновления
манифест owfeed releaseвсю опись: каждый файл, его размер и хеш, плюс репозиторий и тегда
подписанные .apkкаждый файл, но не их списокда, пока набор файлов не меняется
голые бинарники и контрольные суммыничего: контрольная сумма говорит, что скачалось без повреждений, но никогда — кто это сделалникогда

Вот честная причина публиковать манифест: это одна команда, после которой обновление доезжает в течение часа, а не ждёт, пока кто-то прочитает уведомление.

Заявка

  1. Выпустите релиз с подписанным манифестомшаг 2. Фид проверит его прежде, чем что-то трогать.
  2. Заведите issue по шаблону Request package publication: репозиторий, тег, ваши публичные ключи и их id.
  3. Бот проверит за минуту: релиз существует, манифест сходится с заявленным ключом, формат такой, какой фид умеет читать. Если что-то не так — он скажет, что именно.
  4. Ключ смотрит человек. Единственный ручной шаг, и пропустить его нельзя: зафиксировать ключ — и есть всё решение о доверии, а под мерджем стоит его имя.
  5. Дальше автоматика. Каждый новый тег подхватывается в течение часа.

Что автоматика не сделает сама

Даже когда всё настроено, на это всё равно смотрит человек — потому что подпись отвечает на вопрос автор ли это выпустил, а не стоит ли это выпускать не глядя. Апстрим с украденным релизным ключом подписывает безупречно:

С чем вы соглашаетесь

Фид раздаёт, а не рецензирует. Прося взять ваш пакет, вы утверждаете и продолжаете отвечать за:

Пакет может быть снят с публикации в любой момент и без предупреждения. Права оставаться в чужом фиде не существует. Полные условия — в CONTRIBUTING фида.

Проверьте канал, а не только пакет

owlab test --release 25.12.5 \
  --feed 'https://repo.owfeed.org/releases/25.12/x86_64/packages.adb' \
  --feed-key ./owfeed-packages.pem \
  --install my-app \
  --assert 'http 200 /cgi-bin/luci/admin/services/mine'

Установка файла доказывает, что работает пакет. Установка по имени из подписанного индекса доказывает, что работает канал: индекс парсится, URL не редиректит, а ключ на роутере тот самый, которым индекс подписан. Установка файла не может сломаться ни одним из этих способов — поэтому и обнаружить их не может.

Показать это в README

Как только фид берёт пакет, он публикует для него два бейджа, собранных из только что построенного индекса, — так что версию, которую нельзя поставить, они не покажут:

[![owfeed](https://img.shields.io/endpoint?url=https://repo.owfeed.org/badge/my-app.json)](https://owfeed.org/install/ru/)
[![owfeed](https://img.shields.io/endpoint?url=https://repo.owfeed.org/badge/my-app-releases.json)](https://owfeed.org/install/ru/)

Первый показывает версию, которую раздаёт фид; второй — линии релизов, на которых он её раздаёт.

Что дальше делают ваши пользователи

Одна команда, и она одинакова для любого фида на owfeed: wget -qO- <фид>/subscribe.sh | sh. Дайте им ссылку на страницу установки, а не свою копию инструкции: именно так задокументированный URL расходится с рабочим.