Files
NDF/.gitea/workflows/ci.yml
T
msaid-soighiri 9b3e31fec7
CI-CD NDF Complet / test-and-quality (push) Successful in 1m18s
CI-CD NDF Complet / deploy (push) Failing after 2m25s
Actualiser .gitea/workflows/ci.yml
2026-05-29 11:41:14 +02:00

104 lines
4.1 KiB
YAML

name: CI-CD NDF Complet
run-name: Pipeline exécuté par ${{ github.actor }}
on:
push:
branches:
- master
jobs:
test-and-quality:
runs-on: ubuntu-latest
steps:
- name: Récupération du code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Installation et Tests Node.js (Backend)
run: |
cd ndf/public/backend
npm install
if grep -q '"test":' package.json; then
echo "Script de test trouvé - Lancement des tests..."
npm test -- --coverage --watchAll=false
else
echo "Aucun script de test configuré. Passage à la suite."
fi
- name: Analyse SonarQube
uses: sonarsource/sonarqube-scan-action@master
continue-on-error: true
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
with:
args: >
-Dsonar.projectKey=ndf-Gitea
-Dsonar.sources=ndf/public/backend
-Dsonar.javascript.lcov.reportPaths=ndf/public/backend/coverage/lcov.info
deploy:
needs: test-and-quality
runs-on: ubuntu-latest
env:
PORTAINER_API: "https://myportainer.ensup-adm.net/api"
steps:
- name: Récupération du code pour le déploiement
uses: actions/checkout@v3
- name: Préparation du fichier docker-compose pour Gitea
run: |
sed -i '/build:/d' docker-compose.yml
sed -i '/context:/d' docker-compose.yml
sed -i '/dockerfile:/d' docker-compose.yml
sed -i 's/8024:3024/8025:3024/g' docker-compose.yml
sed -i 's/3025:81/3026:81/g' docker-compose.yml
sed -i 's/container_name: ndf-backend/container_name: gitea-ndf-backend/g' docker-compose.yml
sed -i 's/container_name: ndf-frontend/container_name: gitea-ndf-frontend/g' docker-compose.yml
echo "Contenu du compose après modification :"
cat docker-compose.yml
- name: Envoi à l'API Portainer
run: |
echo "--- 1. Authentification ---"
printf '{"username":"%s","password":"%s"}' "${{ secrets.PORTAINER_USER }}" "${{ secrets.PORTAINER_PASS }}" > auth.json
TOKEN=$(curl -s -k -X POST "${PORTAINER_API}/auth" -H "Content-Type: application/json" -d @auth.json | grep -o '"jwt":"[^"]*"' | cut -d'"' -f4)
rm -f auth.json
if [ -z "$TOKEN" ]; then
echo "Echec Login Portainer"
exit 1
fi
echo "Authentification réussie"
echo "--- 2. Récupération des IDs ---"
ENDPOINT_ID=$(curl -s -k -H "Authorization: Bearer $TOKEN" "${PORTAINER_API}/endpoints" | grep -o '"Id":[0-9]*,"Name":"myportainer-cgy-dev"' | grep -o '[0-9]*' | head -n 1)
echo "Endpoint ID : $ENDPOINT_ID"
STACK_ID=$(curl -s -k -H "Authorization: Bearer $TOKEN" "${PORTAINER_API}/stacks" | grep -o '"Id":[0-9]*,"Name":"gitea-action-dev"' | grep -o '[0-9]*' | head -n 1)
echo "Stack ID : $STACK_ID"
echo "--- 3. Génération du Payload ---"
node -e '
const fs = require("fs");
const compose = fs.readFileSync("docker-compose.yml", "utf8");
const payload = { stackFileContent: compose, pullImage: true, prune: true };
fs.writeFileSync("payload.json", JSON.stringify(payload));
console.log("Payload size:", JSON.stringify(payload).length, "bytes");
'
echo "--- 4. Envoi à Portainer ---"
RESPONSE=$(curl -s -k --max-time 300 --retry 3 --retry-delay 10 --retry-all-errors -o response_body.json -w "%{http_code}" -X PUT "${PORTAINER_API}/stacks/${STACK_ID}?endpointId=${ENDPOINT_ID}" -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d @payload.json)
echo "HTTP Code : $RESPONSE"
cat response_body.json
if [ "$RESPONSE" = "200" ]; then
echo "✅ DEPLOIEMENT REUSSI - Frontend: 3026 / Backend: 8025"
else
echo "❌ ECHEC - Erreur Portainer (Code HTTP $RESPONSE)"
exit 1
fi
rm -f payload.json response_body.json