CI работни потоци
Всяко хранилище изпълнява собствените си работни потоци на runner-и на
Blacksmith. Продукцията се разгръща от
entrosity-infra след преминаването (cutover) на 2026-09-26; работните
потоци deploy, agent-builds, release и platform-cutover на
монорепото entrosity/RMM са изключени.
| Хранилище | Работен поток | Задействане | Какво прави |
|---|---|---|---|
entrosity-shared-go | ci.yml | Push, pull request, тагове | Проверка с go mod tidy, golangci-lint, go vet за Linux и Windows, тестове под Linux и Windows. |
security.yml | Push, pull request, седмично | govulncheck (Linux и Windows), gosec, gitleaks. | |
entrosity-axis.backend, entrosity-hub.backend | ci.yml | Push, pull request | Проверка с go mod tidy, make gen не оставя разлики, golangci-lint, модулни и интеграционни тестове; в main, след като минат успешно, задачата image качва ghcr.io/entrosity/{axis,hub}-backend:main и :main-<sha12> и изпраща deploy към entrosity-infra. |
security.yml | Push, pull request, седмично | govulncheck, gosec, gitleaks, изграждане на образа с Trivy и SPDX SBOM. | |
release.yml | Таг v* | Качва ghcr.io/entrosity/{axis,hub}-backend:X.Y.Z (и latest, освен ако тагът няма -suffix), GitHub release. | |
openapi-changed.yml | Push към main, който променя api/openapi.yaml | repository_dispatch openapi-updated към приложението и към entrosity-docs. | |
entrosity-axis.frontend, entrosity-hub.frontend | ci.yml | Push, pull request | pnpm gen:api не оставя разлики, lint, форматиране, проверка на типовете, тестове, изграждане; в main качва статичния образ ghcr.io/entrosity/{axis,hub}-frontend:main и изпраща deploy към entrosity-infra. |
ui-bump.yml | Dispatch ui-released, ръчно | Обновява @entrosity/ui, изпълнява всички проверки и качва обновлението в main само ако всички минат успешно. | |
openapi-bump.yml | Dispatch openapi-updated, ръчно | Опреснява api/openapi.yaml, генерира наново клиента и качва в main, когато проверката на типовете и тестовете минат успешно. | |
entrosity-ui | ci.yml | Push, pull request | Lint, форматиране, проверка на типовете, тестове, изграждане, съдържание на пакета. |
release.yml | Таг v* | Публикува @entrosity/ui в GitHub Packages, GitHub release, dispatch ui-released към двете приложения. | |
entrosity-axis-agent, entrosity-axis-connector | ci.yml | Push, pull request | Lint, vet и тестове под Linux; тестове под Windows, изграждане на MSI, smoke тест за инсталиране/деинсталиране; за конектора: LDAP тестове срещу Samba AD. |
dev-release.yml | Push към main, ръчно | MSI и изпълним файл като версия 0.1.<run>-dev.<sha> в плъзгащото се pre-release издание dev. | |
release.yml | Таг v* | MSI и изпълним файл в GitHub release. | |
entrosity-edge-connector | ci.yml | Push, pull request | Проверка с go mod tidy, vet за Linux и Windows, тестове под Linux и Windows, изграждане на MSI, smoke тест за инсталиране/деинсталиране. |
dev-release.yml | Push към main, ръчно | MSI и изпълним файл като версия 0.0.<build>-dev.<commit> в плъзгащото се pre-release издание dev; публикува се в Edge в канала beta (по-долу). | |
release.yml | Таг v* | MSI и изпълним файл в GitHub release; публикува се в Edge (stable или beta за таг с -suffix). | |
entrosity-sphere-connector | ci.yml | Push, pull request | Проверка с go mod tidy, vet за Linux и Windows, тестове под Linux и Windows, изграждане на MSI, smoke тест за инсталиране/деинсталиране. |
dev-release.yml | Push към main, ръчно | MSI и изпълним файл като версия 0.0.<build>-dev.<commit> в плъзгащото се pre-release издание dev; публикува се в Sphere в канала dev (по-долу). | |
release.yml | Таг v* | MSI и изпълним файл в GitHub release; публикува се в Sphere (stable или dev за таг с -suffix). | |
entrosity-infra | ci.yml | Push, pull request | actionlint, shellcheck, compose config, персонализираното изграждане на Caddy, Trivy върху deploy/, gitleaks. |
integration.yml | 02:30 UTC, ръчно | Срещу клоновете main: двата комплекта Playwright тестове (scripts/e2e.sh), smoke тестът на конектора и Windows тестът от край до край (реален MSI на агента, внедряване на 7-Zip). | |
deploy.yml | Dispatch deploy, push към main, който променя deploy/, ръчно | Разгръщане в продукция (Непрекъснато разгръщане). | |
web-image.yml | Ръчно | Изгражда и качва ghcr.io/entrosity/entrosity-web:<tag> от публикуваните образи на приложенията и документацията. | |
entrosity-docs | ci.yml | Push, pull request | Изграждане на сайта (проваля се при счупени връзки и котви); в main качва ghcr.io/entrosity/docs:main и изпраща deploy към entrosity-infra. |
openapi-updated.yml | Dispatch openapi-updated, ръчно | Опреснява specs/*.yaml и качва в main, когато сайтът се изгражда успешно. |
Dependabot поддържа актуални Go модулите, npm пакетите, actions и Docker
образите във всяко хранилище. Приложенията игнорират @entrosity/ui там
(с него се занимава ui-bump.yml).
Публикуване на самообновявания
Работните потоци на агента и конектора могат да публикуват MSI към сървъра
на Axis като издание за самообновяване (go run ./cmd/publish-agent от
изтеглено копие на entrosity-axis.backend). Тази стъпка се пропуска,
освен ако променливата на хранилището RELEASE_PUBLISH_ENABLED е true.
За продукцията на Entrosity тя е включена и в двете хранилища (от
2026-09-26, заедно с тайните RELEASE_PUBLIC_KEY и RMM_RELEASE_TOKEN),
така че всеки push към main публикува dev компилация, която сървърът
разпространява, а всеки етикет – издание. Компилациите не са подписани:
SIGNING_CERT_* не е зададена. Dev компилациите са с версия
0.1.<run>-dev.<sha>, така че се подреждат над последните dev компилации
на монорепото (0.0.<run>-dev, до 0.0.25-dev), въпреки че новите
хранилища започнаха номерата на изпълненията си отначало.
Издания на конектора на Edge
dev-release.yml и release.yml на конектора на Edge публикуват MSI в
Edge (стъпка Publish to Edge), който го подписва и го разпространява
към конекторите (Работа с Entrosity Edge):
етикетите vX.Y.Z в канала stable, етикетите с -suffix и всяка dev
компилация в beta. Стъпката се изпълнява само когато е зададена
променливата на хранилището EDGE_RELEASE_API (адресът на Edge,
https://hub.entrosity.com/edge), и се проваля без тайната
EDGE_RELEASE_TOKEN. Компилациите вграждат RELEASE_PUBLIC_KEY –
публичната половина на EDGE_RELEASE_SIGNING_KEY на сървъра; компилация
без него предупреждава и отказва обновявания.
Издания на конектора на Sphere
dev-release.yml и release.yml на конектора на Sphere качват MSI в
Sphere (стъпка Publish for self-update, scripts/publish-release.sh),
който го подписва и го предлага на конекторите
(Работа с Entrosity Sphere):
таговете vX.Y.Z в канала stable, таговете с -suffix и всяка dev
компилация в dev. Стъпката се изпълнява само когато променливата на
хранилището RELEASE_PUBLISH_ENABLED е true, и се проваля без тайната
SPHERE_RELEASE_TOKEN; версия, която Sphere вече има (409), се приема за
успех. Компилациите вграждат RELEASE_PUBLIC_KEY – публичната половина
на SPHERE_RELEASE_SIGNING_KEY на сървъра; компилация без него
предупреждава и не се обновява сама.
Runner-и
| Етикет | Използва се от |
|---|---|
blacksmith-4vcpu-ubuntu-2404 | CI на бекендите, изграждане на образи, CI и обновления на версии на приложенията, интеграционни тестове |
blacksmith-2vcpu-ubuntu-2404 | Проверки за сигурност, малки задачи |
blacksmith-4vcpu-windows-2025 | Windows задачи на агента и конектора, Windows тестът от край до край |
.github/actionlint.yaml във всяко хранилище изброява етикетите за
actionlint.
Тайни и променливи
| Име | Вид | Къде | Използва се за |
|---|---|---|---|
ENTROSITY_CI_TOKEN | тайна | всяко хранилище (и като Dependabot тайна в приложенията) | Четене на частните хранилища, entrosity-shared-go и @entrosity/ui; repository_dispatch; качване на автоматичните обновления на версии |
SIGNING_CERT_PFX, SIGNING_CERT_PASSWORD | тайна | агент, конектор | Подписване с Authenticode (по избор) |
RELEASE_PUBLIC_KEY | тайна | агент, конектор | Компилира се в изпълнимите файлове (проверка на обновленията) |
RMM_RELEASE_TOKEN | тайна | агент, конектор | Публикуване на издания за самообновяване |
RELEASE_PUBLISH_ENABLED | променлива | агент, конектор | true включва публикуването на самообновявания |
RMM_API_URL, DEV_RELEASE_CHANNEL, RMM_RELEASE_ROLLOUT | променлива | агент, конектор | Цел на публикуването, dev канал, процент на пускане |
RELEASE_PUBLIC_KEY | тайна | entrosity-edge-connector | Компилира се в конектора на Edge (проверка на обновленията); от edge-server release-keygen |
EDGE_RELEASE_TOKEN | тайна | entrosity-edge-connector | Публикуване на издания в Edge (EDGE_RELEASE_TOKEN на сървъра) |
EDGE_RELEASE_API | променлива | entrosity-edge-connector | Адресът на Edge; ако липсва, компилациите не се публикуват в Edge |
RELEASE_PUBLIC_KEY | тайна | entrosity-sphere-connector | Компилира се в конектора на Sphere (проверка на обновленията); публичната половина на SPHERE_RELEASE_SIGNING_KEY |
SPHERE_RELEASE_TOKEN | тайна | entrosity-sphere-connector | Качване на издания в Sphere (SPHERE_RELEASE_TOKEN на сървъра) |
RELEASE_PUBLISH_ENABLED | променлива | entrosity-sphere-connector | true качва всяка компилация в Sphere |
SPHERE_RELEASE_API | променлива | entrosity-sphere-connector | Адрес за качване (по избор), по подразбиране https://hub.entrosity.com/sphere/api/releases/v1 |
DEPLOY_HOST, DEPLOY_SSH_KEY, DEPLOY_KNOWN_HOSTS | тайна | entrosity-infra | Разгръщане в продукция |
DEPLOY_ENABLED, DEPLOY_URL | променлива | entrosity-infra | true разрешава разгръщанията (аварийно спиране); старият хост на Axis за последната проверка (по избор) |