Перейти к содержимому
SafePass

Процесс выпуска SafePass

Руководство описывает подготовку релиза по тегу, упаковку артефактов, проверку целостности и меры защиты цепочки поставок.

Обзор

Workflow .github/workflows/release.yml создаёт черновик GitHub Release. Перед публикацией команда проверяет сборки, заметки и результаты финального ревью. GitHub Actions в этом репозитории отключены, поэтому наличие workflow не означает, что релиз уже собран или доступен.

Запуск выпуска

  • Отправка тега версии: git push origin v0.1.0. Поддерживаются шаблоны v*.*.* и v*.*.*-*.
  • Ручной запуск через Actions → SafePass draft release → Run workflow (workflow_dispatch). Выберите исходную ссылку и существующий тег версии, указывающий на тот же коммит.

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

Артефакты релиза

Workflow упаковывает перечисленные файлы и публикует контрольные суммы SHA-256. Подпись платформенных сборок и подписанное подтверждение происхождения пока не настроены.

Платформа или цель Файл Содержимое
Linux safepass-<version>-linux-x64.tar.gz Клиент Flutter для Linux x64
Windows safepass-<version>-windows-x64.zip Клиент Flutter для Windows x64
macOS safepass-<version>-macos-universal.zip Универсальный .app для Apple Silicon и Intel
Android safepass-<version>-android.apk APK приложения
Chromium safepass-<version>-browser-chromium.zip Расширение Manifest V3 для Chrome, Brave и Chromium
Firefox safepass-<version>-browser-firefox.zip Расширение Manifest V3 для Firefox
Native Messaging safepass-<version>-native-host-linux-x64.tar.gz и safepass-<version>-native-host-windows-x64.zip Необязательный нативный процесс и установщик регистрации
ASP.NET Core API safepass-<version>-api-linux-x64.tar.gz Сервис синхронизации и OPAQUE
SPDX SBOM dependencies.spdx.json Список зависимостей Cargo, npm, pub и NuGet в SPDX 2.3
Отчёт об уязвимостях osv-results.json Результаты OSV-Scanner
Отчёт о лицензиях license-report.csv Проверка сторонних лицензий по правилам репозитория
Контрольные суммы checksums.sha256 SHA-256 каждого файла релиза

Локальная упаковка в Linux

Соберите доступные в Linux артефакты и проверьте упаковку без CI:

bash scripts/package-release-artifacts.sh --version 0.1.0-preview
  • --output-dir <DIR> задаёт каталог архивов. По умолчанию это .artifacts/release относительно корня репозитория. Указанный относительный путь отсчитывается от каталога запуска.
  • --version <VER> задаёт тег или идентификатор версии.
  • --skip-build упаковывает уже собранные результаты.
  • --components <LIST> ограничивает набор компонентов, например linux,extensions,api,supply-chain.

Для упаковки API с --skip-build положите результат публикации в .artifacts/api-publish в корне репозитория. Пример:

dotnet publish services/api/SafePass.Api/SafePass.Api.csproj \
  --configuration Release --output .artifacts/api-publish
bash scripts/package-release-artifacts.sh --version 0.1.0-preview \
  --components api --skip-build

Вторая команда архивирует результат без вызова dotnet и может работать без .NET SDK. При отсутствии каталога публикации упаковщик сообщает об этом и пропускает API. Отчёты о цепочке поставок генерируются отдельно от компиляции, если выбран соответствующий компонент.

Проверка контрольных сумм

Каждый релиз содержит манифест checksums.sha256. В Linux или macOS выполните:

sha256sum --check --ignore-missing checksums.sha256

В Windows используйте PowerShell:

Get-FileHash -Algorithm SHA256 safepass-*-windows-x64.zip

Сверьте полученный хеш со значением из checksums.sha256.

Подпись кода и происхождение сборок

Когда будут настроены Android keystore, сертификат Apple Developer и notarization, а также Windows Authenticode, шаги подписи добавят в соответствующие задания до упаковки. Состояние этой работы отслеживается в TODO.md.

Входные данные подписи Android можно проверить до сборки:

python3 scripts/check-android-release-signing.py --require-keytool

Проверка завершается ошибкой при отсутствии переменной SAFEPASS_ANDROID_*, нечитаемом или неподдерживаемом хранилище, неверном пароле хранилища или ключа, псевдониме без закрытого ключа и сроке сертификата менее 25 лет для Google Play. Пароли поступают в keytool через окружение и не попадают в список процессов или журнал сборки.

Документация