feat: Initialisation du projet mainframe

Ajout de la configuration docker, gitlab CI et autres fichiers.
Suppression des fichiers compose et importmap obsolètes.
This commit is contained in:
Serreau Jovann
2025-07-16 10:14:36 +02:00
parent 5f359efe39
commit 21220f4fc4
18 changed files with 642 additions and 71 deletions

3
.gitignore vendored
View File

@@ -18,3 +18,6 @@
/public/assets/
/assets/vendor/
###< symfony/asset-mapper ###
.idea
node_modules

65
.gitlab/.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,65 @@
image: tools-registry.esy-web.dev/mainframe/mainframe # Utilisation de l'image Docker spécifiée
stages:
- install
- test
- build
- analyse
- deploy
# Services Docker définis globalement, disponibles pour tous les jobs
services:
- redis:7-alpine
- postgres:16-alpine
install_dependencies:
stage: install
script:
- echo "Starting installation stage..."
- echo "Dependencies installed successfully."
# tags:
# - docker # Retiré car l'image est spécifiée globalement
run_tests:
stage: test
script:
- echo "Starting testing stage..."
- echo "Tests completed successfully."
needs:
- install_dependencies # Ce job dépend du job 'install_dependencies'
# tags:
# - docker # Retiré car l'image est spécifiée globalement
build_application:
stage: build
script:
- echo "Starting build stage..."
- echo "Application built successfully."
needs:
- run_tests # Ce job dépend du job 'run_tests'
# tags:
# - docker # Retiré car l'image est spécifiée globalement
analyse_code:
stage: analyse
script:
- echo "Starting analysis stage..."
- echo "Running SonarQube analysis..."
- echo "Code analysis completed."
needs:
- build_application # Ce job dépend du job 'build_application'
# tags:
# - docker # Retiré car l'image est spécifiée globalement
deploy_application:
stage: deploy
script:
- echo "Starting deployment stage..."
- echo "Application deployed successfully."
needs:
- analyse_code # Ce job dépend maintenant du job 'analyse_code'
# Ce job ne s'exécutera que sur la branche 'main'
only:
- main
# tags:
# - docker # Retiré car l'image est spécifiée globalement

1
CODEOWNERS Normal file
View File

@@ -0,0 +1 @@
* @shoko

12
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,12 @@
# 🤐 Politique de Contribution
Ce projet est strictement confidentiel et **n'accepte aucune contribution externe**.
Aucune demande d'accès, pull request ou proposition de modification ne sera acceptée.
L'accès au code source est limité aux membres autorisés explicitement par SARL SITECONSEIL.
Toute tentative d'accès non autorisé ou de diffusion du contenu de ce projet pourra faire l'objet de poursuites légales.
---
Pour toute question, veuillez contacter : [s.com@siteconseil.fr]

9
LICENSE Normal file
View File

@@ -0,0 +1,9 @@
Confidentialité : ULTRA SECRÈTE
Ce projet est strictement confidentiel.
Tous les droits sont réservés. Aucune partie de ce code, de cette documentation ou de tout autre contenu du projet ne peut être copiée, reproduite, distribuée, modifiée, traduite, transmise ou utilisée, sous quelque forme ou par quelque moyen que ce soit, sans l'autorisation écrite préalable explicite de [VOTRE NOM OU ENTREPRISE].
Toute utilisation non autorisée est strictement interdite et pourra faire lobjet de poursuites judiciaires.
© 2025 SARL SITECONSEIL. Tous droits réservés.

129
README.md Normal file
View File

@@ -0,0 +1,129 @@
# 🌅 Horizon - Application de gestion Esy-Web
⚠️ **Confidentialité : ULTRA SECRÈTE**
Ce projet est strictement confidentiel. Aucune diffusion, reproduction ou utilisation non autorisée n'est permise.
---
📌 **Description**
Horizon est une application de gestion complète et centralisée conçue pour orchestrer lensemble de lécosystème Esy-Web. Elle joue un rôle clé dans lintégration, la maintenance et la supervision des différents services internes et externes.
## 🚨 Application critique
> **Horizon est une application critique pour le bon fonctionnement de lensemble de lécosystème Esy-Web.**
Elle centralise des opérations essentielles telles que :
- la supervision des services,
- la gestion commerciale,
- les accès utilisateurs,
- la sécurité des données,
- l'intégration avec des tiers (Cloudflare, DocuSign, etc.).
**Tout dysfonctionnement peut impacter directement la productivité, la conformité légale ou la sécurité des données du groupe.**
Cest pourquoi chaque modification, mise à jour ou déploiement doit suivre un processus rigoureux de validation, tests et sauvegardes.
- **Déploiement uniquement via CI/CD GitLab contrôlé**
- **Tests manuels obligatoires en environnement de préproduction**
- **Double validation pour les mises en production critiques**
- **Sauvegardes automatiques avant tout déploiement**
- **Journalisation détaillée des accès et des opérations sensibles**
### Responsabilités principales :
- Gestion du CMS Esy-Web et des services associés
- Gestion de linfrastructure (serveurs, configurations, supervision)
- Gestion de lintranet pour les ressources internes
- Gestion commerciale (facturation, suivi client, prestations)
- Sauvegardes automatisées et sécurité des données
- API publique sécurisée pour linterconnexion avec des systèmes tiers
- Interface dintégration avec des outils ou plateformes externes
Conçue pour être **modulaire**, **sécurisée** et **évolutive**, Horizon est loutil central de pilotage de la plateforme Esy-Web.
---
🛠️ **Technologies utilisées**
- **Symfony** (backend PHP)
- **Bun** (gestionnaire de paquets JavaScript ultrarapide)
- **Docker** (conteneurs de développement et déploiement)
- **Terraform** (infrastructure as code)
- **Ansible** (automatisation de configuration et de déploiement)
- **Shell scripts** (bash/sh) (automatisations et outils système)
- **Vault - HashiCorp** (chiffrement et déchiffrement des données sensibles)
- **MinIO** (stockage S3 local)
- **GitLab** (auto-hébergé pour gestion de code et CI/CD)
- **Google Cloud Platform (GCP)** (infrastructure cloud)
- **DocuSign** (signatures électroniques)
- **Cloudflare** (DNS, DDoS, CDN)
---
🔧 **Architecture technique**
L'architecture d'Horizon repose sur une approche **DevOps centrée sur la sécurité**, la scalabilité, et la modularité :
- **Back-end** :
- Framework Symfony (PHP 8.3)
- Conteneurisé avec Docker
- Configuration et déploiement automatisés via Ansible et Terraform
- **Sécurité & Données** :
- Chiffrement de bout en bout avec **Vault**
- Sauvegardes chiffrées et planifiées
- Accès limité par rôles (RBAC)
- **Stockage** :
- Objets et documents via **MinIO** (S3 compatible)
- Bases de données sécurisées (PostgreSQL / CloudSQL)
- **CI/CD & DevOps** :
- Pipelines GitLab CI intégrés
- Tests automatisés, déploiements blue-green
- Scripts shell pour la supervision et la maintenance
- **API & Interconnexion** :
- API REST sécurisée (JWT + OAuth2)
- Documentation Swagger hébergée
- Accès aux API externes via gateway
- **Infrastructure** :
- Hébergement cloud sur **Google Cloud Platform**
- Pare-feux Cloudflare, WAF, CDN actif
- Surveillance en temps réel (logs, alertes, santé système)
---
🎯 **Fonctionnalités clés**
- Authentification sécurisée
- Gestion des utilisateurs et des rôles
- Tableau de bord personnalisable
- Gestion du CMS Esy-Web
- Interface intranet
- Gestion commerciale (clients, devis, factures)
- API publique sécurisée
- Sauvegardes automatisées
- Supervision des services
---
📅 **Version**
Aucune version spécifique nest actuellement définie pour ce projet.
---
🌐 **URL**
- Application : [https://horizon.esy-web.dev](https://horizon.esy-web.dev)
- Documentation API : [https://api-doc.esy-web.dev](https://api-doc.esy-web.dev)
- API publique : [https://api.esy-web.dev](https://api.esy-web.dev)
---
👤 **Auteur**
Développé par l'équipe de direction de **SARL SITECONSEIL**
📫 Contact : **Serreau Jovann** jovann@siteconseil.fr
---
📄 **Licence**
**Non divulguée usage restreint.** Toute utilisation extérieure est strictement interdite.

BIN
bun.lockb Executable file

Binary file not shown.

View File

@@ -1,18 +0,0 @@
services:
###> doctrine/doctrine-bundle ###
database:
ports:
- "5432"
###< doctrine/doctrine-bundle ###
###> symfony/mailer ###
mailer:
image: axllent/mailpit
ports:
- "1025"
- "8025"
environment:
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
###< symfony/mailer ###

View File

@@ -1,25 +0,0 @@
services:
###> doctrine/doctrine-bundle ###
database:
image: postgres:${POSTGRES_VERSION:-16}-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
# You should definitely change the password in production
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
POSTGRES_USER: ${POSTGRES_USER:-app}
healthcheck:
test: ["CMD", "pg_isready", "-d", "${POSTGRES_DB:-app}", "-U", "${POSTGRES_USER:-app}"]
timeout: 5s
retries: 5
start_period: 60s
volumes:
- database_data:/var/lib/postgresql/data:rw
# You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
# - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###
volumes:
###> doctrine/doctrine-bundle ###
database_data:
###< doctrine/doctrine-bundle ###

184
docker-compose.yml Normal file
View File

@@ -0,0 +1,184 @@
services:
# --- Service PHP ---
# Conteneur pour exécuter l'application Symfony (requêtes web)
php:
build:
context: .
dockerfile: ./docker/php/Dockerfile
args:
# Utilise l'UID/GID de l'hôte pour éviter les problèmes de permissions
UID: ${UID:-1000}
GID: ${GID:-1000}
container_name: ecosplay_php
restart: unless-stopped
environment:
- XDEBUG_MODE=coverage
volumes:
# Monte le code source de l'application dans le conteneur
- ./:/srv/app
# Monte le socket Docker pour permettre l'exécution de commandes docker depuis le conteneur
- /var/run/docker.sock:/var/run/docker.sock
- ./coverage:/opt/phpstorm-coverage
depends_on:
# S'assure que la base de données et Redis sont démarrés avant PHP
- db
- redis
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Worker pour Symfony Messenger ---
# Conteneur dédié à l'exécution des messages en arrière-plan
messenger-worker:
build:
context: .
dockerfile: ./docker/php/Dockerfile
args:
UID: ${UID:-1000}
GID: ${GID:-1000}
container_name: ecosplay_messenger_worker
restart: unless-stopped
# Commande pour lancer le worker. 'async' est le nom du transport par défaut.
command: php bin/console messenger:consume async --memory-limit=128M --time-limit=3600
volumes:
- ./:/srv/app
# Monte aussi le socket Docker ici pour la cohérence
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- db
- redis
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Frontend (Bun + Vite) ---
# Conteneur pour compiler les assets JS/CSS en développement
bun:
image: oven/bun:1-slim
container_name: ecosplay_bun
restart: unless-stopped
# Exécute les commandes avec l'utilisateur de l'hôte pour éviter les problèmes de permissions sur node_modules
user: "${UID:-1000}:${GID:-1000}"
working_dir: /usr/src/app
volumes:
- ./:/usr/src/app
ports:
# Port par défaut du serveur de développement Vite
- "5173:5173"
# Lance le serveur de développement Vite défini dans package.json
command: bun run dev
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Serveur Web (Caddy) ---
# Serveur web moderne qui sert l'application et gère le PHP-FPM
caddy:
image: caddy:2-alpine
container_name: ecosplay_caddy
restart: unless-stopped
ports:
# Mappe le port 8000 de l'hôte au port 80 du conteneur
- "8000:80"
volumes:
# Monte le fichier de configuration de Caddy
- ./docker/caddy/Caddyfile:/etc/caddy/Caddyfile
# Monte le code source pour servir les fichiers statiques
- ./:/srv/app
depends_on:
- php
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Base de Données principale (PostgreSQL) ---
db:
image: postgres:16-alpine
container_name: ecosplay_db
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_DB: app_db
POSTGRES_USER: symfony_user
POSTGRES_PASSWORD: ChangeMeInProd!
volumes:
# Volume nommé pour la persistance des données
- db_data:/var/lib/postgresql/data
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Cache/Messenger (Redis) ---
redis:
image: redis:7-alpine
container_name: ecosplay_redis
restart: unless-stopped
networks:
- mainframe_network # Assignation au réseau commun
# --- Service de Test d'Emails (MailHog) ---
# Intercepte tous les emails envoyés en développement
mailhog:
image: mailhog/mailhog:latest
container_name: ecosplay_mailhog
restart: unless-stopped
ports:
# Port 1025 pour le serveur SMTP factice
- "1025:1025"
# Port 8025 pour l'interface web de MailHog
- "8025:8025"
networks:
- mainframe_network # Assignation au réseau commun
# --- Service de Stockage Fichiers (MinIO) ---
# Fournit une API compatible S3 pour le stockage de fichiers
minio:
image: minio/minio:RELEASE.2025-02-03T21-03-04Z
container_name: ecosplay_minio
restart: unless-stopped
ports:
# Port 9000 pour l'API S3
- "9000:9000"
# Port 9001 pour la console web de MinIO
- "9001:9001"
environment:
MINIO_ROOT_USER: minio_user
MINIO_ROOT_PASSWORD: ChangeMeInProd!
volumes:
# Volume nommé pour la persistance des fichiers
- minio_data:/data
# Commande pour démarrer MinIO et lancer la console sur le bon port
command: server /data --console-address ":9001"
networks:
- mainframe_network # Assignation au réseau commun
# --- Service de Gestion des Secrets (HashiCorp Vault) ---
vault:
image: hashicorp/vault:latest
container_name: ecosplay_vault
restart: unless-stopped
ports:
- "8210:8200" # Mappe le port 8210 de l'hôte au port 8200 du conteneur Vault
- "8211:8201" # Mappe le port 8210 de l'hôte au port 8200 du conteneur Vault
volumes:
# Volume pour la persistance des données
- vault_data:/vault
# Volume pour monter notre fichier de configuration
environment:
VAULT_DEV_ROOT_TOKEN_ID: myroot
VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8201
VAULT_LOCAL_CONFIG: '{"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true,"disable_mlock": false}'
# Lance Vault en mode serveur avec notre fichier de configuration
cap_add:
- IPC_LOCK
command: "server -dev"
networks:
- mainframe_network # Assignation au réseau commun
# Définition des volumes pour la persistance des données
volumes:
db_data: # Pour la base de données principale de Symfony
minio_data: # Pour le stockage de fichiers MinIO
vault_data: # Pour les données de HashiCorp Vault
# Définition des réseaux
networks:
mainframe_network: # Définition du réseau commun
driver: bridge # Le type de driver le plus courant

41
docker/caddy/Caddyfile Normal file
View File

@@ -0,0 +1,41 @@
# ./docker/caddy/Caddyfile
# Nous écoutons sur le port 80 (qui est mappé depuis le port 8000 de l'hôte)
:80 {
# La racine de votre application Symfony
root * /srv/app/public
# Activation de la compression (optionnel)
encode gzip zstd
# Gère les assets statiques directement (améliore les performances)
file_server
# Passe toutes les requêtes non résolues par file_server à Symfony (index.php)
php_fastcgi php:9000 { # 'php' est le nom de votre service PHP dans docker-compose
# Transmet les en-têtes X-Forwarded-* reçus de Nginx à PHP-FPM
# C'est CRUCIAL pour que Symfony détecte HTTPS
env HTTPS on # Simule que la connexion est HTTPS pour PHP
env HTTP_X_FORWARDED_PROTO {header.X-Forwarded-Proto} # Récupère le proto original de Nginx
env HTTP_X_FORWARDED_HOST {header.X-Forwarded-Host} # Récupère l'hôte original de Nginx
env HTTP_X_FORWARDED_PORT {header.X-Forwarded-Port} # Récupère le port original de Nginx
env HTTP_X_REAL_IP {header.X-Real-IP} # Récupère l'IP réelle du client (si Nginx la passe)
# Assurez-vous que l'adresse IP de Nginx est aussi trustée par Symfony
# via framework.trusted_proxies dans Symfony.
}
# Journalisation des accès (utile pour le débogage)
log {
output stdout
format json
}
# Configuration des en-têtes CORS pour les requêtes OPTIONS du profiler
# Note: Caddy a une directive 'header' mais c'est pour les réponses.
# Pour gérer spécifiquement les OPTIONS en tant que preflight, c'est plus direct
# de le faire via php_fastcgi si Symfony peut le gérer, ou avec une directive
# 'handle' ou 'route' spécifique si Caddy doit répondre directement.
# Pour l'instant, faisons confiance à Symfony pour gérer les CORS via NelmioCorsBundle
# une fois que le protocole est correct.
}

90
docker/php/Dockerfile Normal file
View File

@@ -0,0 +1,90 @@
# Utiliser une image PHP 8.3 FPM (Ubuntu-based)
FROM php:8.3-fpm
# Arguments pour les permissions de fichiers
ARG UID
ARG GID
# Mettre à jour et installer les dépendances système requises
RUN apt-get update && apt-get install -y --no-install-recommends \
# Outils de compilation et dépendances pour PHP extensions
build-essential \
libpq-dev \
libzip-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libwebp-dev \
libicu-dev \
# Dépendance pour GMP (bibliothèque de développement)
libgmp-dev \
# Outils généraux
zip \
unzip \
ffmpeg \
jq \
wget \
nodejs \
npm \
postgresql-client \
git \
# Nettoyage des listes de paquets pour réduire la taille de l'image
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Installer le client HashiCorp Vault
ENV VAULT_VERSION=1.17.1
RUN wget https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip -O vault.zip && \
unzip vault.zip -d /usr/local/bin && \
rm vault.zip
# Installer le client MinIO (mc)
RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc && \
chmod +x /usr/local/bin/mc
RUN npm install -g mjml
# Configurer et installer les extensions PHP
# Utilisation de -j$(nproc) pour paralléliser la compilation et accélérer le build
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
&& docker-php-ext-install -j$(nproc) gd pdo pdo_pgsql zip gmp bcmath intl
# Installer Redis via pecl
RUN pecl install redis && docker-php-ext-enable redis
# Installer Excimer via pecl
RUN pecl install excimer && docker-php-ext-enable excimer
# Configuration et installation de Xdebug
# Utilisation de --no-install-recommends pour éviter l'installation de paquets inutiles
RUN apt-get update && apt-get install -y --no-install-recommends git \
&& mkdir -p /usr/src/php/ext/xdebug \
&& git clone https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
&& cd /usr/src/php/ext/xdebug \
&& phpize \
&& ./configure --enable-xdebug \
&& make && make install \
&& rm -rf /usr/src/php/ext/xdebug \
&& apt-get autoremove -y build-essential git \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN echo "zend_extension=xdebug" > /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN echo "xdebug.mode=develop,debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN mkdir -p /opt/phpstorm-coverage && \
chmod -R 777 /opt/phpstorm-coverage
# Installer Composer globalement
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Créer un utilisateur et un groupe non-root pour l'application
# Utilisation de useradd/groupadd pour les systèmes basés sur Debian/Ubuntu
RUN groupadd -g $GID appuser && \
useradd -u $UID -g appuser -ms /bin/bash appuser
# Changer pour l'utilisateur non-root
USER appuser
# Définir le répertoire de travail
WORKDIR /srv/app

1
docker/vault/config.json Normal file
View File

@@ -0,0 +1 @@
{"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true}

View File

@@ -0,0 +1,4 @@
#!/bin/sh
# 'exec' remplace le processus du shell par celui de vault, ce qui est une bonne pratique.
exec vault server -dev

View File

@@ -1,28 +0,0 @@
<?php
/**
* Returns the importmap for this application.
*
* - "path" is a path inside the asset mapper system. Use the
* "debug:asset-map" command to see the full list of paths.
*
* - "entrypoint" (JavaScript only) set to true for any module that will
* be used as an "entrypoint" (and passed to the importmap() Twig function).
*
* The "importmap:require" command can be used to add new entries to this file.
*/
return [
'app' => [
'path' => './assets/app.js',
'entrypoint' => true,
],
'@hotwired/stimulus' => [
'version' => '3.2.2',
],
'@symfony/stimulus-bundle' => [
'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js',
],
'@hotwired/turbo' => [
'version' => '7.3.0',
],
];

71
makefile Normal file
View File

@@ -0,0 +1,71 @@
# Makefile pour le projet Symfony e-cosplay-contest
# --- Configuration ---
PHP_EXEC = docker compose exec php
CONSOLE = $(PHP_EXEC) php bin/console
# --- Scripts d'automatisation ---
# Note: Ces scripts sont complexes et utilisent '$$' pour échapper le '$' pour Make.
# --- Commandes Docker ---
.PHONY: pull build start stop restart logs logs-php
pull: ## Récupère les dernières images docker
@docker compose pull
build: ## Construit (ou reconstruit) les images docker du projet
@docker compose build
start: ## Démarre tous les services en mode détaché
@docker compose up -d # Ajout de -d pour le mode détaché par défaut
stop: ## Arrête tous les services
@docker compose down
restart: stop start ## Redémarre tous les services
logs: ## Affiche les logs de tous les services
@docker compose logs -f
logs-php: ## Affiche les logs du service PHP
@docker compose logs -f php
# --- Commandes d'Initialisation ---
init: ## Installation initiale du projet (sans Vault/MinIO)
@make pull
@make build
@make start
@make composer-install
@sleep 5
@make db-create
@make migrate
# --- Commandes Symfony & DB ---
.PHONY: db-create entity migration migrate composer-install deps
db-create: ## Crée la base de données
@$(CONSOLE) doctrine:database:create --if-not-exists
db-drop: ## Crée la base de données
@$(CONSOLE) doctrine:database:drop --force
entity: ## Lance la création/mise à jour d'une entité
@$(CONSOLE) make:entity
migration: ## Génère une nouvelle migration
@$(CONSOLE) make:migration
migrate: ## Applique les migrations
@$(CONSOLE) doctrine:migrations:migrate --no-interaction
composer-install: ## Installe les dépendances Composer
@$(PHP_EXEC) composer install
deps: composer-install ## Alias pour composer-install
dbtest_add: ## Crée la base de données
@$(CONSOLE) doctrine:database:create --env=test
dbtest_migrate: ## Crée la base de données
@$(CONSOLE) doctrine:migrations:migrate --env=test --no-interaction
dbtest_remove: ## Crée la base de données
@$(CONSOLE) doctrine:database:drop --env=test --force
# --- Aide ---
.PHONY: help
help: ## Affiche cet écran d'aide
@echo "Commandes disponibles pour e-cosplay-contest :"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
.DEFAULT_GOAL := help
gitlab_build:
docker build -t tools-registry.esy-web.dev/mainframe/mainframe:php docker/php
docker push tools-registry.esy-web.dev/mainframe/mainframe:php

30
package.json Normal file
View File

@@ -0,0 +1,30 @@
{
"name": "e-cosplay-contest",
"private": true,
"version": "0.0.0",
"type": "module",
"main": "index.js",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"@hotwired/stimulus": "^3.0.0",
"@symfony/stimulus-bridge": "^3.2.0 || ^4.0.0",
"@tailwindcss/postcss": "^4.1.10",
"postcss": "^8.5.6",
"postcss-scss": "^4.0.9",
"rollup-plugin-javascript-obfuscator": "^1.0.4",
"sass": "^1.89.2",
"vite": "^7.0.0"
},
"dependencies": {
"@grafikart/drop-files-element": "^1.0.9",
"@hotwired/turbo": "^8.0.13",
"@sentry/browser": "^9.34.0",
"@tailwindcss/vite": "^4.1.10",
"autoprefixer": "^10.4.21",
"tailwindcss": "^4.1.10"
}
}

2
sonar-project.properties Normal file
View File

@@ -0,0 +1,2 @@
sonar.projectKey=mainframe_mainframe_AZgSDOOmCw8KjT0jogWd
sonar.qualitygate.wait=true