Skip to content

Latest commit

 

History

History
121 lines (84 loc) · 6.82 KB

File metadata and controls

121 lines (84 loc) · 6.82 KB

Публикация и релизы

Веб-проект публикуется как статический сайт из папки dist. Android-сборка создаётся отдельно из dist-android; подробности приведены в ANDROID.md.

GitHub Pages

Основная публикация выполняется как часть workflow:

.github/workflows/auto-release.yml

Она запускается только после успешной проверки версии и создания GitHub Release. Отдельный .github/workflows/deploy-pages.yml предназначен для ручной повторной публикации уже существующего release-тега.

Что делает:

  1. собирает сайт в repository scope из уже проверенной версии;
  2. проверяет состав PWA-артефакта;
  3. запускает production E2E в repository scope, включая автономный запуск;
  4. публикует dist через GitHub Pages.

Для GitHub Pages используется переменная:

VITE_BASE_PATH=/${{ github.event.repository.name }}/

Она нужна, чтобы приложение корректно работало в подпапке репозитория.

Production Pages публикуется только из release tag. Кодовые коммиты в main без повышения версии не меняют опубликованный сайт, поэтому интерфейсная версия, release tag и исходный код деплоя остаются связаны между собой.

Сборка Pages находится в том же workflow, что и тег с GitHub Release. Поэтому публикация не зависит от запуска следующего workflow через tag push.

Автоматический релиз версии

Workflow:

.github/workflows/auto-release.yml

Это единственный автоматический release-процесс. Он запускается при изменении package.json в ветке main или вручную.

Что делает:

  1. читает версию из package.json;
  2. проверяет, что в CHANGELOG.md есть раздел для этой версии;
  3. устанавливает зависимости;
  4. запускает обязательный блокирующий audit production-зависимостей;
  5. запускает ESLint;
  6. запускает тесты;
  7. собирает переносимый архив сайта и проверяет его PWA/E2E;
  8. собирает и проверяет отдельный Pages-артефакт в repository scope;
  9. создаёт и отправляет тег vX.Y.Z, если такого тега ещё нет;
  10. создаёт или обновляет GitHub Release с архивом credit-calculator-dist.zip;
  11. параллельно публикует проверенный Pages-артефакт и вызывает сборку подписанного Android APK.

Audit, ESLint и unit-тесты выполняются один раз. Android workflow при автоматическом вызове использует этот результат и не повторяет те же проверки.

GitHub Release с архивом сайта

Workflow:

.github/workflows/release-dist.yml

Запускается вручную для повторной сборки архива уже существующего release-тега.

Что делает:

  1. проверяет формат тега vX.Y.Z;
  2. проверяет, что указанный тег существует в репозитории;
  3. checkout указанного тега;
  4. устанавливает зависимости;
  5. запускает обязательный блокирующий audit production-зависимостей;
  6. запускает ESLint;
  7. запускает тесты;
  8. собирает проект с VITE_BASE_PATH=./;
  9. проверяет состав PWA-артефакта и автономный запуск;
  10. архивирует содержимое dist;
  11. прикрепляет credit-calculator-dist.zip к GitHub Release.

VITE_BASE_PATH=./ делает архив пригодным для размещения на любом статическом хостинге, а не только на GitHub Pages.

Рекомендуемый порядок выпуска версии

  1. Внести изменения в код и документацию.
  2. Обновить версию в package.json.
  3. Добавить раздел в CHANGELOG.md.
  4. Прогнать проверки:
pnpm lint:workflows
pnpm lint
pnpm typecheck
pnpm test
pnpm test:coverage
pnpm build
pnpm test:pwa
pnpm test:e2e
pnpm audit --prod
  1. Создать release-ветку, коммит и PR в main.

После merge release-ветки в main workflow создаст тег, GitHub Release с архивом готового сайта, вызовет подписанную Android-сборку и запустит публикацию GitHub Pages из созданного тега.

Подписанный Android APK

Workflow .github/workflows/android-release.yml автоматически вызывается из auto-release.yml после создания release-тега и web-релиза. Он проверяет версию, собирает APK с тем же SemVer, создаёт файл SHA-256 и прикрепляет их к существующему GitHub Release. Audit, ESLint и unit-тесты уже выполнены основным workflow и автоматически не дублируются. При ручном запуске для существующего тега они включены по умолчанию. Публиковать в RuStore нужно тот же подписанный APK, чтобы обе площадки использовали одинаковую подпись.

Ручной релиз

Если тег уже существует, можно вручную запустить release-dist.yml, deploy-pages.yml или android-release.yml и указать тег, например:

vX.Y.Z

Замените vX.Y.Z на существующий тег релиза. release-dist.yml соберёт проект именно из этого тега и обновит/создаст релиз с архивом credit-calculator-dist.zip. deploy-pages.yml опубликует на GitHub Pages сборку из того же тега.