feat: COMPOSE_PROJECT_NAME depuis vars CI Woodpecker
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

- COMPOSE_PROJECT_NAME construit dynamiquement : CI_REPO_OWNER-CI_COMMIT_BRANCH-prestashop
  -> plus de valeur en dur dans le fichier
- validate : PS_DOMAIN/PS_ADMIN_FOLDER/COMPOSE_PROJECT_NAME calcules dans commands
  via les vars CI injectees automatiquement par Woodpecker
- PS_DOMAIN placeholder remplace presta.syoul.fr hardcode dans validate

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
syoul
2026-03-17 23:03:31 +01:00
parent 7688e95964
commit 8cf7c4b7ca
2 changed files with 20 additions and 8 deletions

View File

@@ -5,19 +5,22 @@ when:
steps:
# Etape 1 : Validation syntaxique du docker-compose.yml
# Les vars CI (CI_REPO_OWNER, CI_COMMIT_BRANCH) sont injectees automatiquement par Woodpecker
- name: validate
image: docker:27-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
PS_DOMAIN: presta.syoul.fr
PS_ADMIN_FOLDER: admin-secure
DB_PASSWORD: placeholder
DB_ROOT_PASSWORD: placeholder
PRESTASHOP_ADMIN_EMAIL: placeholder
PRESTASHOP_ADMIN_PASSWORD: placeholder
commands:
- docker compose config --quiet
- |
export COMPOSE_PROJECT_NAME="${CI_REPO_OWNER}-${CI_COMMIT_BRANCH}-prestashop"
export PS_DOMAIN="validate.example.com"
export PS_ADMIN_FOLDER="admin-secure"
docker compose config --quiet
- echo "docker-compose.yml valide"
# Etape 2 : Verifications de securite
@@ -51,6 +54,9 @@ steps:
from_secret: db_password
commands:
- env | grep -E "^(PS_DOMAIN|PS_ADMIN_FOLDER|PRESTASHOP_ADMIN_EMAIL|PRESTASHOP_ADMIN_PASSWORD|DB_ROOT_PASSWORD|DB_PASSWORD)=" > .env.deploy
# COMPOSE_PROJECT_NAME : construit depuis les vars CI Woodpecker (pas de secret necessaire)
# Convention user-env-project : CI_REPO_OWNER-CI_COMMIT_BRANCH-prestashop
- echo "COMPOSE_PROJECT_NAME=${CI_REPO_OWNER}-${CI_COMMIT_BRANCH}-prestashop" >> .env.deploy
- echo "Fichier .env.deploy cree ($(wc -c < .env.deploy) octets)"
# Etape 3b : Deploiement sur sonic via Docker socket
@@ -70,6 +76,7 @@ steps:
- cd /opt/prestashop && docker compose up -d --remove-orphans
- cd /opt/prestashop && docker compose ps
- |
PROJECT=$(grep '^COMPOSE_PROJECT_NAME=' /opt/prestashop/.env | cut -d= -f2)
DOMAIN=$(grep '^PS_DOMAIN=' /opt/prestashop/.env | cut -d= -f2)
# --- Certificat TLS (acme.sh via sonic-acme-1) ---
@@ -101,18 +108,19 @@ steps:
- /var/run/docker.sock:/var/run/docker.sock
commands:
- |
PROJECT=$(grep '^COMPOSE_PROJECT_NAME=' .env.deploy | cut -d= -f2)
DB_PASS=$(grep '^DB_PASSWORD=' .env.deploy | cut -d= -f2)
echo "Attente fin installation PrestaShop (ps_configuration)..."
MAX=60
i=0
until [ $i -ge $MAX ]; do
READY=$(docker exec prestashop-db mysql -uprestashop -p"$DB_PASS" -se \
READY=$(docker exec "${PROJECT}-db" mysql -uprestashop -p"$DB_PASS" -se \
"SELECT COUNT(*) FROM prestashop.ps_configuration WHERE name='PS_SSL_ENABLED';" 2>/dev/null || echo 0)
if [ "$READY" -gt "0" ] 2>/dev/null; then
echo "Base prete, activation SSL..."
docker exec prestashop-db mysql -uprestashop -p"$DB_PASS" prestashop -e \
docker exec "${PROJECT}-db" mysql -uprestashop -p"$DB_PASS" prestashop -e \
"UPDATE ps_configuration SET value='1' WHERE name IN ('PS_SSL_ENABLED','PS_SSL_ENABLED_EVERYWHERE');"
docker exec prestashop rm -rf /var/www/html/var/cache/prod/ 2>/dev/null || true
docker exec "${PROJECT}-app" rm -rf /var/www/html/var/cache/prod/ 2>/dev/null || true
echo "SSL active dans DB, cache efface"
break
fi

View File

@@ -1,7 +1,11 @@
# Convention de nommage : user-env-project (ex: syoul-main-prestashop)
# Permet plusieurs instances en parallele (prod/test/multi-user) sans collision
name: ${COMPOSE_PROJECT_NAME:-syoul-main-prestashop}
services:
prestashop:
image: prestashop/prestashop:8-apache
container_name: prestashop
container_name: ${COMPOSE_PROJECT_NAME:-syoul-main-prestashop}-app
restart: unless-stopped
depends_on:
db:
@@ -41,7 +45,7 @@ services:
db:
image: mariadb:10.11
container_name: prestashop-db
container_name: ${COMPOSE_PROJECT_NAME:-syoul-main-prestashop}-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}