diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml new file mode 100644 index 0000000..a7b16f9 --- /dev/null +++ b/.forgejo/workflows/deploy.yml @@ -0,0 +1,51 @@ +name: Deploy Bot on NAS + +on: + push: + branches: [ main, dev ] + +jobs: + deploy: + runs-on: self-hosted + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set deployment path + run: | + if [ "${{ github.ref_name }}" = "main" ]; then + echo "DEPLOY_PATH=/share/CACHEDEV1_DATA/discord-bot-prod" >> $GITHUB_ENV + elif [ "${{ github.ref_name }}" = "dev" ]; then + echo "DEPLOY_PATH=/share/CACHEDEV1_DATA/discord-bot-dev" >> $GITHUB_ENV + else + echo "Unsupported branch" && exit 1 + fi + + - name: Configure SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.NAS_SSH_KEY }}" > ~/.ssh/id_deploy + chmod 600 ~/.ssh/id_deploy + cat >> ~/.ssh/config << 'EOF' + Host nas + HostName 192.168.1.208 + User Elewyn + IdentityFile ~/.ssh/id_deploy + StrictHostKeyChecking no + EOF + + - name: Sync files to NAS + run: | + rsync -av --delete \ + --exclude='.git' \ + --exclude='.env' \ + --exclude='data/' \ + --exclude='screenshots/' \ + --exclude='logs/' \ + ./ nas:${{ env.DEPLOY_PATH }}/ + + - name: Restart bot on NAS + run: | + ssh nas "cd ${{ env.DEPLOY_PATH }} && \ + docker compose down || true && \ + docker compose up --build -d" diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..5b516f9 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,63 @@ +# CLAUDE.md + +## Contexte + +Bot Discord de tracking de Personal Best (PB) pour les clan bosses du jeu Raid Shadow Legends. +Communauté RTF (3 clans : RTF, RTFC, RTFR). + +## Branches + +| Branche | Environnement | Chemin NAS | +|---------|--------------|------------| +| `main` | Production | `/share/CACHEDEV1_DATA/discord-bot-prod` | +| `dev` | Développement | `/share/CACHEDEV1_DATA/discord-bot-dev` | + +## Déploiement + +CI/CD via Forgejo Actions → runner `vm-runner` (192.168.1.53) → rsync vers NAS QNAP (192.168.1.208). + +Push sur `main` ou `dev` déclenche le déploiement automatique. + +Secret requis dans Forgejo : `NAS_SSH_KEY` (clé privée ed25519 pour SSH Elewyn@NAS). + +## Persistance des données (NE PAS écraser) + +Ces dossiers vivent sur le NAS et sont montés dans le container — jamais dans le repo, jamais écrasés par rsync : + +| Dossier | Contenu | +|---------|---------| +| `data/` | Base SQLite (`bot_data.db`) | +| `screenshots/` | Captures d'écran des PBs | +| `logs/` | Logs du bot | + +## Variables d'environnement (.env sur le NAS) + +Fichier `.env` à créer manuellement sur le NAS dans chaque `DEPLOY_PATH` : + +``` +DISCORD_TOKEN=... +AUTHORIZED_CHANNEL_ID=... +``` + +## Structure + +``` +bot.py # Point d'entrée, charge les cogs +config.py # Config centralisée (token, chemins, boss, clans) +cogs/ # Commandes Discord (un fichier par fonctionnalité) +utils/ # Managers (DB, screenshots, mercy) et handlers +Dockerfile # Image Python 3.9-slim +docker-compose.yml # Déploiement container +``` + +## Boss supportés + +- **Hydra** : normal, hard, brutal, nightmare +- **Chimera** : easy, normal, hard, brutal, nightmare, ultra +- **CvC** : Clan vs Clan + +## Pièges connus + +- Le `.env` ne doit jamais être commité — il contient le token Discord +- `data/`, `screenshots/`, `logs/` sont gitignorés — données persistantes sur le NAS +- Le rsync exclut ces dossiers pour ne pas écraser les données en prod