Релизы и запуск релиза
cMind поставляется как версионированные GitHub Releases. Каждый релиз публикует для одного тега SemVer:
- Образы контейнеров в GHCR —
ghcr.io/amusleh-spotware-com/cmind-{web,mcp,node-agent,copy-agent,tests}, с тегами версии (например,1.0.0-alpha.1) иsha-<commit>. Подписаны (cosign keyless) с аттестациями происхождения сборки и SBOM в формате SPDX. - Helm-чарт — отправлен в
oci://ghcr.io/amusleh-spotware-com/cmind/charts/cmindи приложен к релизу какcmind-<version>.tgz. - Бинарники CtraderCliNode — самодостаточные ZIP по платформам (
linux-x64,linux-arm64,win-x64,osx-arm64) для запуска удалённого агента узла без .NET SDK. SHA256SUMS.txtдля каждого приложенного артефакта.
Alpha. Пока каждый релиз — это предварительный выпуск (
-alpha.N). Между alpha-версиями возможны ломающие изменения; гарантий обновления/миграции пока нет. Фиксируйте точную версию — никогдаlatest.
Версионирование
SemVer 2.0.0. Форма тега vX.Y.Z[-suffix]. Суффикс (-alpha.N, -beta.N, -rc.N) публикует
предварительный выпуск GitHub; тег образа и версия Helm-чарта равны версии без ведущей v. Запущенное
приложение отображает её в GET /version и в футере UI (Core.VersionInfo).
Выбор релиза
Просмотрите Releases и скопируйте нужный тег
(например, v1.0.0-alpha.1). Проверьте образ перед запуском:
VERSION=1.0.0-alpha.1
cosign verify ghcr.io/amusleh-spotware-com/cmind-web:$VERSION \
--certificate-identity-regexp 'https://github.com/amusleh-spotware-com/cmind/.github/workflows/release.yml@.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
Запуск — Kubernetes (Helm, рекомендуется)
appVersion чарта уже фиксирует соответствующий тег образа, поэтому вы передаёте только версию чарта.
VERSION=1.0.0-alpha.1
helm install cmind oci://ghcr.io/amusleh-spotware-com/cmind/charts/cmind \
--version $VERSION \
--namespace cmind --create-namespace \
--set secrets.pgPassword='<strong>' \
--set secrets.ownerEmail='owner@example.com' \
--set secrets.ownerPassword='<Strong-Pass!>' \
--set secrets.discoveryJoinToken='<секрет кластера от 32 символов>'
Приватным пакетам GHCR нужен image pull secret — создайте его и передайте:
kubectl create secret docker-registry ghcr --namespace cmind \
--docker-server=ghcr.io --docker-username=<gh-user> --docker-password=<PAT-с-read:packages>
helm upgrade cmind ... --set image.pullSecrets='{ghcr}'
Полные опции чарта, ingress, внешний Postgres и масштабирование: см. Развёртывание в Kubernetes и Масштабирование. Проверка:
kubectl -n cmind get pods
kubectl -n cmind port-forward svc/cmind-web 8080:8080
# → http://localhost:8080 ; GET /version возвращает версию релиза
Запуск — Docker (один хост, быстрый просмотр)
Запустите Web-хост прямо из его образа релиза. Ему нужны Postgres и сокет Docker (Web-хост собирает и запускает cBot через локальный Docker CLI).
VERSION=1.0.0-alpha.1
docker network create cmind
docker run -d --name cmind-pg --network cmind \
-e POSTGRES_PASSWORD=change-me -e POSTGRES_DB=cmind postgres:17
docker run -d --name cmind-web --network cmind -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e ConnectionStrings__Default='Host=cmind-pg;Database=cmind;Username=postgres;Password=change-me' \
-e App__Owner__Email='owner@example.com' \
-e App__Owner__Password='Change-Me-Str0ng!' \
ghcr.io/amusleh-spotware-com/cmind-web:$VERSION
Откройте http://localhost:8080. Добавьте MCP-сервер (cmind-mcp) и агентов узлов таким же образом; для
полной многосервисной топологии используйте Helm-чарт. См. Локальная разработка для пути
Aspire dotnet run при работе из исходников, а не из релиза.
Запуск удалённого агента узла из бинарника
Удалённые хосты, предоставляющие мощности для запуска/бэктеста, могут запускать CtraderCliNode без
установленного .NET. Скачайте ZIP для платформы из релиза, распакуйте и запустите — он сам
регистрируется у Web-хоста и отправляет heartbeat.
VERSION=1.0.0-alpha.1
curl -LO https://github.com/amusleh-spotware-com/cmind/releases/download/v$VERSION/ctrader-cli-node-$VERSION-linux-x64.zip
sha256sum -c ctrader-cli-node-$VERSION-linux-x64.zip.sha256
unzip ctrader-cli-node-$VERSION-linux-x64.zip -d cmind-node && cd cmind-node
NodeAgent__MainBaseUrl='https://<ваш-web-хост>' \
NodeAgent__DiscoveryJoinToken='<тот же секрет кластера от 32 символов>' \
./CtraderCliNode
На хосте должен работать Docker (агент запускает образ консоли cTrader через Docker CLI). См. Развёртывание в Kubernetes, чтобы запускать агентов узлов как привилегированные поды.
Создание релиза (мейнтейнеры)
Релизы создаются .github/workflows/release.yml по любому отправленному тегу v* — процесс описан в
RELEASING.md в корне
репозитория.