Веб-проект публикуется как статический сайт из папки dist. Android-сборка создаётся отдельно из dist-android; подробности приведены в ANDROID.md.
Основная публикация выполняется как часть workflow:
.github/workflows/auto-release.yml
Она запускается только после успешной проверки версии и создания GitHub Release. Отдельный .github/workflows/deploy-pages.yml предназначен для ручной повторной публикации уже существующего release-тега.
Что делает:
- собирает сайт в repository scope из уже проверенной версии;
- проверяет состав PWA-артефакта;
- запускает production E2E в repository scope, включая автономный запуск;
- публикует
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 или вручную.
Что делает:
- читает версию из
package.json; - проверяет, что в
CHANGELOG.mdесть раздел для этой версии; - устанавливает зависимости;
- запускает обязательный блокирующий audit production-зависимостей;
- запускает ESLint;
- запускает тесты;
- собирает переносимый архив сайта и проверяет его PWA/E2E;
- собирает и проверяет отдельный Pages-артефакт в repository scope;
- создаёт и отправляет тег
vX.Y.Z, если такого тега ещё нет; - создаёт или обновляет GitHub Release с архивом
credit-calculator-dist.zip; - параллельно публикует проверенный Pages-артефакт и вызывает сборку подписанного Android APK.
Audit, ESLint и unit-тесты выполняются один раз. Android workflow при автоматическом вызове использует этот результат и не повторяет те же проверки.
Workflow:
.github/workflows/release-dist.yml
Запускается вручную для повторной сборки архива уже существующего release-тега.
Что делает:
- проверяет формат тега
vX.Y.Z; - проверяет, что указанный тег существует в репозитории;
- checkout указанного тега;
- устанавливает зависимости;
- запускает обязательный блокирующий audit production-зависимостей;
- запускает ESLint;
- запускает тесты;
- собирает проект с
VITE_BASE_PATH=./; - проверяет состав PWA-артефакта и автономный запуск;
- архивирует содержимое
dist; - прикрепляет
credit-calculator-dist.zipк GitHub Release.
VITE_BASE_PATH=./ делает архив пригодным для размещения на любом статическом хостинге, а не только на GitHub Pages.
- Внести изменения в код и документацию.
- Обновить версию в
package.json. - Добавить раздел в
CHANGELOG.md. - Прогнать проверки:
pnpm lint:workflows
pnpm lint
pnpm typecheck
pnpm test
pnpm test:coverage
pnpm build
pnpm test:pwa
pnpm test:e2e
pnpm audit --prod- Создать release-ветку, коммит и PR в
main.
После merge release-ветки в main workflow создаст тег, GitHub Release с архивом готового сайта, вызовет подписанную Android-сборку и запустит публикацию GitHub Pages из созданного тега.
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 сборку из того же тега.