name: Build and Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest container: volumes: - /var/run/docker.sock:/var/run/docker.sock steps: - name: Checkout uses: actions/checkout@v4 - name: Install tools run: | apt-get update && apt-get install -y docker.io curl jq - name: Build production image run: | docker build --target frankenphp_prod -t mangarr:latest . - name: Redeploy via Portainer API env: PORTAINER_USER: ${{ secrets.PORTAINER_USER }} PORTAINER_PASSWORD: ${{ secrets.PORTAINER_PASSWORD }} run: | # Authentification JWT=$(curl -s -X POST http://portainer:9000/api/auth \ -H "Content-Type: application/json" \ -d "{\"Username\":\"$PORTAINER_USER\",\"Password\":\"$PORTAINER_PASSWORD\"}" | jq -r '.jwt') if [ -z "$JWT" ] || [ "$JWT" = "null" ]; then echo "Erreur: authentification Portainer echouee" exit 1 fi # Recuperer les infos de la stack mangarr STACK_INFO=$(curl -s http://portainer:9000/api/stacks \ -H "Authorization: Bearer $JWT") STACK_ID=$(echo "$STACK_INFO" | jq '.[] | select(.Name=="mangarr") | .Id') ENDPOINT_ID=$(echo "$STACK_INFO" | jq '.[] | select(.Name=="mangarr") | .EndpointId') if [ -z "$STACK_ID" ] || [ "$STACK_ID" = "null" ]; then echo "Erreur: stack mangarr non trouvee dans Portainer" exit 1 fi echo "Stack ID: $STACK_ID, Endpoint ID: $ENDPOINT_ID" # Recuperer le compose et les variables actuels STACK_FILE=$(curl -s "http://portainer:9000/api/stacks/$STACK_ID/file" \ -H "Authorization: Bearer $JWT" | jq -r '.StackFileContent') STACK_ENV=$(curl -s "http://portainer:9000/api/stacks/$STACK_ID" \ -H "Authorization: Bearer $JWT" | jq '.Env') # Redeployer la stack (recree les containers avec la nouvelle image) DEPLOY_RESULT=$(curl -s -w "\n%{http_code}" -X PUT \ "http://portainer:9000/api/stacks/$STACK_ID?endpointId=$ENDPOINT_ID" \ -H "Authorization: Bearer $JWT" \ -H "Content-Type: application/json" \ -d "{\"stackFileContent\":$(echo "$STACK_FILE" | jq -Rs .),\"env\":$STACK_ENV,\"prune\":true,\"pullImage\":false}") HTTP_CODE=$(echo "$DEPLOY_RESULT" | tail -1) echo "Portainer redeploy: HTTP $HTTP_CODE" if [ "$HTTP_CODE" -ge 300 ]; then echo "$DEPLOY_RESULT" | head -n -1 exit 1 fi - name: Run migrations run: | echo "Attente du demarrage de Mangarr..." sleep 15 docker exec mangarr php bin/console doctrine:migrations:migrate --no-interaction || echo "Migrations: rien a migrer" docker exec mangarr php bin/console cache:clear --env=prod || true echo "Deploy termine avec succes"