56 Commits

Author SHA1 Message Date
syoul
e04d458ea5 fix: tag image PS9 corrigé → 9.0.3-3.0-classic-8.3-apache
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Tag 9.0.3-8.3-apache inexistant sur Docker Hub.
Format correct : {ps_version}-{theme_version}-classic-{php_version}-apache

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:03:44 +01:00
syoul
5107b94210 upgrade: PrestaShop 8-apache → 9.0.3-8.3-apache (PHP 8.3)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
PHP 8.1 EOL depuis nov 2024, plus de patches sécurité.
PS9 + PHP 8.3 (maintenu jusqu'en 2027) élimine CVE-2024-3566 sur libphp/php-cli.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:01:49 +01:00
syoul
ac2b086276 fix: sbom-publish affiche le code HTTP et body DTrack pour debug
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 16:57:26 +01:00
syoul
e11617a1e1 fix: sbom-generate utilise alpine + install syft (image distroless sans shell)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 16:53:24 +01:00
syoul
66a843d502 feat: ajout pipeline SBOM (Syft + Trivy + Dependency-Track)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- sbom-generate : inventaire CycloneDX des images prestashop:8-apache et mariadb:10.11 via Syft
- sbom-scan : scan CVE depuis les SBOM via Trivy (cache /home/syoul/trivy-cache)
- sbom-publish : envoi vers dtrack.syoul.fr avec versioning date+commit SHA
- .gitignore : ajout /.reports/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 16:51:43 +01:00
syoul
a60c088c22 refactor: suppression consul_token pipeline + restart always
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- Retire consul_token du pipeline (write-env + deploy) :
  Registrator gere le routage Fabio via labels SERVICE_* automatiquement
- Supprime le bloc KV Fabio manuel dans le step deploy
- Passe prestashop et db en restart: always
- Ajoute /docs-sbom dans .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 15:08:59 +01:00
syoul
66fd51570c fix: chemin absolu pour .consul_token dans deploy
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
cd /opt/prestashop dans les commandes precedentes change le CWD,
donc cat .consul_token cherchait /opt/prestashop/.consul_token.
Copie maintenant .consul_token vers /opt/prestashop/ et utilise
le chemin absolu pour le lire.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 00:32:08 +01:00
syoul
47f09e9a7e fix: mise a jour KV Fabio automatique apres chaque deploy
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- Ajoute consul_token dans write-env (from_secret, sans volumes)
- Ecrit le token dans .consul_token (lu par deploy)
- Apres docker compose up, relit l'IP du container et met a jour
  fabio/config/$PROJECT avec les routes correctes
- Sous-cle par projet pour coexister avec les autres stacks

Corrige les 502 dus au KV stale quand le container change d'IP.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 00:29:03 +01:00
syoul
1ef176c2e0 refactor: convention COMPOSE_PROJECT_NAME user-project-branch + labels Registrator
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Convention renommée user-project-branch (syoul-prestashop-main)
- COMPOSE_PROJECT_NAME généré dynamiquement depuis CI vars (CI_REPO_OWNER/CI_REPO_NAME/CI_COMMIT_BRANCH) avec tr pour lowercase + /→-
- SERVICE_NAME → ${COMPOSE_PROJECT_NAME}-app
- SERVICE_80_NAME → ${COMPOSE_PROJECT_NAME}-app-80

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 23:50:57 +01:00
syoul
532a026aca fix: supprimer tous les ${VAR} restants dans les commands
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
${PROJECT} dans configure -> $PROJECT (boucle infinie car substitue vide)
${CI_BUILD_NUMBER}, ${CI_COMMIT_SHA}, ${CI_COMMIT_BRANCH} dans notify-failure

Regle : jamais ${VAR} dans les commands Woodpecker next.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 23:15:30 +01:00
syoul
108aa8b410 fix: COMPOSE_PROJECT_NAME hardcode (vars CI indisponibles dans alpine)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Les vars CI ne sont pas injectees comme vars shell dans les steps
sans Docker socket (write-env / alpine) -> $CI_REPO_OWNER vide.
Valeur fixe syoul-main-prestashop, conforme a la convention user-env-project.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 23:13:02 +01:00
syoul
f0bec873b5 fix: COMPOSE_PROJECT_NAME vide (${VAR} -> $VAR sans accolades)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
${CI_REPO_OWNER} et ${CI_COMMIT_BRANCH} etaient substitues vides par
Woodpecker au parse YAML -> PROJECT vide -> docker exec "-db" echoue
silencieusement -> boucle configure infinie (60 tentatives).

$VAR sans accolades n'est pas substitue au parse, resolu au shell runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 23:10:10 +01:00
syoul
8cf7c4b7ca 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>
2026-03-17 23:03:31 +01:00
syoul
7688e95964 refactor: Registrator + healthcheck Consul, suppression token Consul
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Ajout SERVICE_80_CHECK_HTTP=/ : Consul valide le service via GET /
  -> service healthy dans Consul -> Fabio route automatiquement le trafic
- SERVICE_80_TAGS sans guillemets + /* pour le glob matcher Fabio
- Suppression token Consul, enregistrement manuel et KV Fabio de la pipeline
  -> Registrator + Consul catalog suffisent (approche native sonic)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 22:38:57 +01:00
syoul
becb1b4666 fix: acme.sh exit code capture avec set -e
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
; ACME_EXIT=$? ne fonctionnait que si acme.sh retournait 0 (premier lancement).
Avec exit 2 (skip/cert valide), set -e coupait le script avant la capture.
Correction : ACME_EXIT=0 + || ACME_EXIT=$?

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:59:01 +01:00
syoul
8168082765 fix: routes Fabio /* + SSL PrestaShop via pipeline
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- Routes Fabio : / -> /* (glob matcher requiert /* pour matcher les sous-chemins)
  Sans *, presta.syoul.fr:443/ ne matchait que / exactement, les autres
  chemins (/admin-secure/, /themes/...) tombaient sur le catch-all nginx -> 404
- Ajout step configure : active PS_SSL_ENABLED + PS_SSL_ENABLED_EVERYWHERE dans
  la DB apres installation, efface le cache -> PrestaShop genere des URLs https://
  (Fabio passe X-Forwarded-Proto:https, pas de boucle de redirection)
- PS_ENABLE_SSL: 1 dans docker-compose.yml (coherence avec la config DB)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:56:29 +01:00
syoul
235321985b fix: acme.sh --home /etc/acme.sh pour stocker le cert sur le volume persistant
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Sans --home, acme.sh ecrit dans /root/.acme.sh (non persiste).
Avec --home /etc/acme.sh (volume sonic_acme), le cert survit aux recreations
du container sonic-acme-1 et le chemin de copie vers /host/certs/ est correct.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:37:00 +01:00
syoul
fb3cd6365b feat: emission cert TLS integree dans la pipeline (modele sonic)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Ajout de l'etape acme.sh dans le deploy :
- docker exec sonic-acme-1 /app/acme.sh --issue --webroot
- idempotent : skip (exit 2) si cert valide, echec si autre erreur
- copie automatique fullchain + key vers /host/certs/ pour Fabio SNI
- ordre : docker compose up > cert TLS > consul register > fabio KV

Ce pattern est le modele generique pour tout nouveau service sur sonic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:35:19 +01:00
syoul
d497a874d2 fix: routes Fabio KV avec printf pour eviter rupture indentation YAML
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
La variable multiline cassait le parser YAML (ligne sans indentation).
Utilisation de printf avec \n pour construire la chaine sur une seule ligne.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:22:23 +01:00
syoul
d97b522162 feat: cert TLS automatique via acme-companion + route HTTPS Fabio
- Ajout label LETSENCRYPT_HOST sur le container prestashop :
  sonic-acme-1 (acme-companion) emet le cert et le copie dans /host/certs/
  Fabio le detecte par SNI sans redemarrage
- Route Fabio KV mise a jour : HTTP et HTTPS (domain:443) en une seule cle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:21:30 +01:00
syoul
2a75a274f6 deploy: ecriture route Fabio via Consul KV apres enregistrement service
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Fabio ne detecte pas toujours les nouveaux services via le catalog Consul.
Ajout d'un consul kv put fabio/config avec la route urlprefix apres chaque
deploiement pour garantir le routage sans redemarrage de Fabio.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 21:03:53 +01:00
syoul
2513d3534d fix: registration Consul via docker exec sonic-consul (supprime register-consul step)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- write-env ecrit le token dans .consul_token (workspace partage)
- deploy lit .consul_token et utilise docker exec sonic-consul pour
  enregistrer le service directement sur l'agent consul local
- network_mode host non supporte par ce Woodpecker, 172.17.0.1:8500
  ne rejoignait pas le meme consul que Fabio

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 20:07:10 +01:00
syoul
9d1406c79d fix: register-consul utilise network_mode host (localhost:8500 = consul reel)
172.17.0.1:8500 passe par les regles iptables DOCKER et n'atteint pas
le meme consul que Fabio. Avec host network, localhost:8500 est direct.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 20:03:25 +01:00
syoul
6dec47a3bd fix: ecrire .container_ip dans CI_WORKSPACE (cd /opt/prestashop changeait le CWD)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 19:57:46 +01:00
syoul
4ccddc69e3 fix: enregistrement manuel dans Consul (ACL bloque Registrator sur prestashop)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Ajout etape register-consul : recupere l'IP du conteneur sur le reseau sonic
et enregistre le service dans Consul avec le token ACL via l'API HTTP.
Registrator loggue "added" mais son token n'a pas les droits service:write
sur "prestashop" -> le service disparaissait de Consul apres chaque deploy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 19:55:15 +01:00
syoul
1040f7272f fix: healthcheck evite substitution Woodpecker (SITE au lieu de PS_DOMAIN)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 19:10:45 +01:00
syoul
380d0cf7d1 fix: write-env utilise env|grep (bug Woodpecker: dollar-brace dans commands droppe secrets)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 19:06:46 +01:00
syoul
abcc517e3c debug: write-env-1 avec commande identique regression test
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 19:05:01 +01:00
syoul
d34e9b4922 debug: seul write-env-1 avec from_secret, les autres placeholder
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 19:01:35 +01:00
syoul
64262d1b1f fix: 3 steps write-env (2 secrets max par step, bug Woodpecker)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:57:59 +01:00
syoul
05f5401def debug: seuil - TEST_STATIC + 3 from_secret
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:57:12 +01:00
syoul
0a5c13a1b6 debug: TEST_STATIC hello-world + 6 from_secret
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:56:06 +01:00
syoul
9f7af2f3c6 fix: DEPLOY_ENV comme valeur statique (CI etait deduplique)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:54:08 +01:00
syoul
3c5a683540 fix: workaround bug Woodpecker - valeur statique CI requise pour from_secret
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:52:12 +01:00
syoul
3adeebc4aa debug: test 1 statique + 2 from_secret
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:51:17 +01:00
syoul
50a31ad9ff debug: regression test identique pipeline 26
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:49:15 +01:00
syoul
0401c0b3d9 debug: test valeur statique dummy + 2 from_secret
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:47:49 +01:00
syoul
74e84ea617 debug: test 2 from_secret (ps_domain + ps_admin_folder)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:46:18 +01:00
syoul
3f4ddcf914 fix: healthcheck utilise alpine:3.20 + curl (curlimages sans grep)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:42:27 +01:00
syoul
b21cd3dafe fix: contournement bug volumes+from_secret, healthcheck lit depuis workspace
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:40:46 +01:00
syoul
295e96367e debug: test volumes + from_secret sur docker:27-cli
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:38:31 +01:00
syoul
e001cf7d00 deploy: secrets OK, suppression debug-secrets, lancement deploiement
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:32:22 +01:00
syoul
d90bc558a2 debug: test from_secret ps_domain dans environment
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:31:31 +01:00
syoul
dc48cee578 debug: env | sort pour lister toutes les vars du container
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:30:07 +01:00
syoul
2c5be85a01 debug: sleep 30s in debug-secrets pour inspecter le container
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 18:27:08 +01:00
syoul
f6cf648c4c debug: test secret injection vs static env var
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 16:50:20 +01:00
syoul
ff13a4efa8 fix: remove agent label filter (agent deleted)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 16:12:35 +01:00
syoul
2662625d43 fix: use lowercase secret names (Woodpecker normalizes to lowercase) 2026-03-17 15:59:50 +01:00
syoul
17c183e460 debug: add secret injection diagnostic step
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-03-17 13:42:33 +01:00
syoul
72c84806f7 fix: use secrets array instead of from_secret 2026-03-17 13:41:09 +01:00