Files
Encelado/TradingBot/deployment/PUBLISHING_GUIDE.md
Alberto Balbo cc34d2b57f Riorganizzazione deployment, doc e publish automatico
- Spostata tutta la configurazione di deployment in /deployment (docker-compose, unraid-template, guide)
- Aggiunte e aggiornate guide dettagliate: publishing su Gitea, installazione Unraid, struttura progetto
- Migliorato target MSBuild: publish automatico su Gitea Registry da Visual Studio, log dettagliati, condizioni più robuste
- Aggiornato e ampliato .gitignore per escludere build, dati e file locali
- Rimossi file obsoleti dalla root (ora tutto in /deployment)
- Struttura più chiara, zero script esterni, documentazione completa e workflow di deploy semplificato
2025-12-17 23:15:46 +01:00

9.2 KiB

?? Publishing Guide - TradingBot

Guida completa per pubblicare TradingBot su Gitea Container Registry usando SOLO Visual Studio e MSBuild integrato.


? Setup Prerequisiti (Una Volta)

1. Login Gitea Registry

Apri PowerShell/Terminal:

docker login gitea.encke-hake.ts.net
# Username: Alby96
# Password: [Personal Access Token Gitea]

Output:

Login Succeeded ?

2. Verifica Docker Desktop

Assicurati che Docker Desktop sia in running:

docker --version
# Docker version 24.x.x o superiore

?? Publishing Workflow

Metodo Unico: Visual Studio + MSBuild Automatico

Step 1: Seleziona Release Configuration

  1. Build menu ? Configuration Manager
  2. Active solution configuration: Seleziona Release
  3. Click Close

Step 2: Publish con Profilo Docker

  1. Solution Explorer ? Right-click TradingBot
  2. Click Publish...
  3. Seleziona profilo "Docker"
  4. Click sul pulsante "Publish"

Step 3: Automatico! ?

Visual Studio esegue automaticamente:

1. ? Compila progetto in Release mode
2. ? Build immagine Docker (tradingbot:latest)
3. ? Post-build MSBuild target (AUTOMATICO):
   - Verifica condizioni (Release + Docker profile)
   - Tag gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
   - Tag gitea.encke-hake.ts.net/alby96/encelado/tradingbot:1.0.0
   - Push entrambi i tag su Gitea Registry
4. ? Mostra conferma nell'Output Window

?? Tempo: 3-5 minuti (prima volta), 1-2 minuti (successive)


?? Verifica Output

Output Window

Durante il publish, monitora l'Output Window:

View ? Output (Ctrl+Alt+O)
Dropdown: "Build"

Dovresti vedere:

========== Build started ==========
1> Building Docker image...
...
1> Successfully built abc123def456
1> Successfully tagged tradingbot:latest

========================================
?? Gitea Container Registry Push
========================================

???  Tagging images...
? Tagged successfully

?? Pushing to gitea.encke-hake.ts.net...
The push refers to repository [gitea.encke-hake.ts.net/alby96/encelado/tradingbot]
latest: digest: sha256:... size: 1234

========================================
? Successfully pushed to Gitea Registry!
========================================

?? Published images:
   - gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
   - gitea.encke-hake.ts.net/alby96/encelado/tradingbot:1.0.0

?? Verify at:
   https://gitea.encke-hake.ts.net/Alby96/Encelado/-/packages

========== Publish: 1 succeeded ==========

?? Verifica su Gitea

Dopo il publish, apri browser:

https://gitea.encke-hake.ts.net/Alby96/Encelado/-/packages

Dovresti vedere:

?? tradingbot
   ??? latest (280 MB)
   ?   ??? Pushed 2 minutes ago
   ??? 1.0.0 (280 MB)
       ??? Pushed 2 minutes ago

?? Aggiornamento Versione

Incrementa Versione

Modifica TradingBot.csproj:

<PropertyGroup>
  <Version>1.0.1</Version>  <!-- Incrementa qui -->
  <AssemblyVersion>1.0.1.0</AssemblyVersion>
  <FileVersion>1.0.1.0</FileVersion>
</PropertyGroup>

Publish Nuova Versione

Esegui di nuovo il workflow di publish. Verranno creati:

  • gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest (aggiornato)
  • gitea.encke-hake.ts.net/alby96/encelado/tradingbot:1.0.1 (nuovo)

?? Come Funziona (Dettagli Tecnici)

Post-Build MSBuild Target

Il file TradingBot.csproj contiene un target MSBuild che si attiva automaticamente:

<Target Name="PushToGiteaRegistry" 
        AfterTargets="Publish"
        Condition="'$(Configuration)' == 'Release' And 
                   '$(DOTNET_RUNNING_IN_CONTAINER)' != 'true' And 
                   '$(DockerPublish)' == 'true'">
  <!-- Tag e push automatici -->
</Target>

Condizioni di attivazione:

  1. ? Configuration = Release
  2. ? Non siamo dentro un container Docker
  3. ? Profilo Docker in uso (DockerPublish='true')

Cosa fa:

  1. Tag immagine locale tradingbot:latest
  2. Tag con gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
  3. Tag con gitea.encke-hake.ts.net/alby96/encelado/tradingbot:{Version}
  4. Push entrambi i tag su Gitea Registry
  5. Mostra messaggi nell'Output Window

?? Troubleshooting

Errore: "docker: command not found"

Causa: Docker non in PATH o non installato

Fix:

  1. Verifica Docker Desktop sia installato e running
  2. Restart Visual Studio
  3. Verifica in PowerShell: docker --version

Errore: "unauthorized: authentication required"

Causa: Non loggato a Gitea Registry

Fix:

docker logout gitea.encke-hake.ts.net
docker login gitea.encke-hake.ts.net
# Inserisci credenziali

Errore: "denied: requested access to the resource is denied"

Causa: Permessi insufficienti o repository non esiste

Fix:

  1. Verifica che il repository packages esista su Gitea
  2. Verifica che il token abbia scope write:packages
  3. Verifica username corretto nel .csproj (ContainerRepository)

Post-Build Non Si Attiva

Causa: Condizioni non soddisfatte

Fix - Verifica:

  1. ? Configuration Manager ? Release attivo
  2. ? Profilo "Docker" selezionato (non altri profili)
  3. ? Docker Desktop running
  4. ? docker login eseguito

Diagnosi:

# Verifica immagine locale esista dopo publish
docker images | findstr tradingbot

# Dovresti vedere: tradingbot latest ...

Se l'immagine locale esiste ma il push non parte:

  • Controlla Output Window per messaggi di errore
  • Verifica che DockerPublish='true' sia nel profilo Docker.pubxml

Errore: "La ricompilazione non è riuscita"

Causa: Errore durante build o post-build

Fix:

  1. View ? Output ? Dropdown: Build
  2. Cerca errori specifici (linea rossa)
  3. Se errore docker: verifica Docker Desktop running
  4. Se errore MSBuild: verifica sintassi .csproj

Clean & Rebuild:

Build ? Clean Solution
Build ? Rebuild Solution
Build ? Publish (retry)

?? Checklist Publish

Pre-Publish

  • Docker Desktop running
  • docker login gitea.encke-hake.ts.net successful
  • Configuration Manager ? Release
  • Codice committato su Git (opzionale ma consigliato)

During Publish

  • Visual Studio ? Build ? Publish
  • Profilo "Docker" selezionato
  • Build completa senza errori
  • Output mostra "Successfully pushed to Gitea Registry!"

Post-Publish

  • Verifica su Gitea Packages
  • Tag latest e versione presenti
  • (Opzionale) Deploy su Unraid

?? Best Practices

Versioning

Usa Semantic Versioning:

  • MAJOR: Breaking changes (2.0.0)
  • MINOR: New features (1.1.0)
  • PATCH: Bug fixes (1.0.1)

Git Workflow

# 1. Sviluppo feature
git checkout -b feature/new-feature

# 2. Commit changes
git add .
git commit -m "feat: Add new feature"

# 3. Merge in main
git checkout main
git merge feature/new-feature

# 4. Tag release
git tag -a v1.0.1 -m "Release 1.0.1"
git push origin main --tags

# 5. Publish Docker image (Visual Studio)

Testing

Prima di ogni publish:

  1. Test locale (F5 in Debug)
  2. Test in Docker locale (profilo Docker, F5)
  3. Verifica funzionalità critiche
  4. Publish su Gitea (Release mode)
  5. Deploy su Unraid per test finale

?? Workflow Completo: Dev ? Production

1. ?? Sviluppo in Visual Studio
   ?? F5 per test locale (HTTP profile)
   ?? F5 con Docker profile per test container
   ?? Commit su Git

2. ?? Build & Publish
   ?? Configuration ? Release
   ?? Build ? Publish (Docker profile)
   ?? MSBuild automatico: tag & push Gitea ?

3. ?? Verifica Gitea Packages
   ?? Browser: packages disponibili

4. ?? Deploy su Unraid
   ?? Docker tab ? Stop
   ?? Force Update (pull latest)
   ?? Start

5. ? Test in Production
   ?? http://192.168.30.23:8080

Tempo totale: ~10 minuti (compresi test)


?? Risorse

File di Configurazione

  • TradingBot.csproj: Contiene il post-build target PushToGiteaRegistry
  • Properties/PublishProfiles/Docker.pubxml: Profilo publish Docker
  • Dockerfile: Multi-stage build configuration

?? Tips & Tricks

Debug Post-Build Target

Per vedere cosa sta facendo il post-build:

  1. Output Window ? Dropdown: Build
  2. Cerca sezione:
========================================
?? Gitea Container Registry Push
========================================

Build Solo Docker (Senza Push)

Se vuoi solo buildare l'immagine senza push:

Opzione 1: Usa Debug mode

Configuration Manager ? Debug
Build ? Publish (Docker)
# Post-build NON si attiva (serve Release)

Opzione 2: Build manuale

docker build -t tradingbot:latest .
# Crea solo immagine locale

Push Manuale (Se Serve)

Se hai già l'immagine locale e vuoi solo push:

docker tag tradingbot:latest gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
docker push gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest

?? Publish integrato completamente in Visual Studio!

Zero script esterni, tutto automatico con MSBuild! ?