Release ed esecuzione di una release
cMind viene distribuito come Release GitHub versionate. Ogni release pubblica, per un tag SemVer:
- Immagini container su GHCR —
ghcr.io/amusleh-spotware-com/cmind-{web,mcp,node-agent,copy-agent,tests}, taggate con la versione (es.1.0.0-alpha.1) esha-<commit>. Firmate (cosign keyless) con attestazioni di provenienza della build e una SBOM SPDX. - Chart Helm — inviato a
oci://ghcr.io/amusleh-spotware-com/cmind/charts/cminde allegato alla release comecmind-<version>.tgz. - Binari CtraderCliNode — ZIP self-contained per piattaforma (
linux-x64,linux-arm64,win-x64,osx-arm64) per eseguire un agente di nodo remoto senza l'SDK .NET. SHA256SUMS.txtche copre ogni artefatto allegato.
Alpha. Per ora ogni release è una pre-release (
-alpha.N). Attendi modifiche incompatibili tra le alpha; non esiste ancora una garanzia di upgrade/migrazione. Fissa una versione esatta — mailatest.
Versionamento
SemVer 2.0.0. Forma del tag vX.Y.Z[-suffix]. Un suffisso (-alpha.N, -beta.N, -rc.N) pubblica una
pre-release GitHub; il tag dell'immagine e la versione del chart Helm sono entrambi uguali alla
versione senza la v iniziale. L'app in esecuzione la espone su GET /version e nel footer della UI
(Core.VersionInfo).
Scegliere una release
Sfoglia le Release e copia il tag desiderato
(es. v1.0.0-alpha.1). Verifica un'immagine prima di eseguirla:
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
Eseguire — Kubernetes (Helm, consigliato)
L'appVersion del chart fissa già il tag immagine corrispondente, quindi passi solo la versione del
chart.
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='<secret del cluster di 32+ caratteri>'
I pacchetti GHCR privati richiedono un secret di pull dell'immagine — creane uno e passalo:
kubectl create secret docker-registry ghcr --namespace cmind \
--docker-server=ghcr.io --docker-username=<gh-user> --docker-password=<PAT-con-read:packages>
helm upgrade cmind ... --set image.pullSecrets='{ghcr}'
Opzioni complete del chart, ingress, Postgres esterno e scaling: vedi Deploy su Kubernetes e Scaling. Verifica:
kubectl -n cmind get pods
kubectl -n cmind port-forward svc/cmind-web 8080:8080
# → http://localhost:8080 ; GET /version restituisce la versione della release
Eseguire — Docker (host singolo, sguardata veloce)
Esegui l'host Web direttamente dalla sua immagine di release. Ha bisogno di Postgres e del socket Docker (l'host Web costruisce/esegue i cBot tramite la CLI Docker locale).
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
Apri http://localhost:8080. Aggiungi il server MCP (cmind-mcp) e gli agenti di nodo allo stesso modo;
per la topologia multi-servizio completa usa il chart Helm. Vedi Sviluppo locale per il
percorso Aspire dotnet run quando lavori dai sorgenti invece che da una release.
Eseguire un agente di nodo remoto da un binario
Gli host remoti che forniscono capacità di run/backtest possono eseguire CtraderCliNode senza .NET
installato. Scarica lo ZIP della piattaforma dalla release, estrailo ed eseguilo — si registra
automaticamente con l'host Web e invia 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://<il-tuo-host-web>' \
NodeAgent__DiscoveryJoinToken='<lo stesso secret del cluster di 32+ caratteri>' \
./CtraderCliNode
L'host deve eseguire Docker (l'agente avvia l'immagine della console cTrader tramite la CLI Docker). Vedi Deploy su Kubernetes per eseguire gli agenti di nodo come pod privilegiati.
Creare una release (manutentori)
Le release sono prodotte da .github/workflows/release.yml su qualsiasi tag v* inviato — il processo è
in RELEASING.md nella radice
del repository.