diff --git a/.gitea/workflows/cd-main.yml b/.gitea/workflows/cd-main.yml new file mode 100644 index 0000000..6798f10 --- /dev/null +++ b/.gitea/workflows/cd-main.yml @@ -0,0 +1,118 @@ +name: CD - Deploy on main + +on: + pull_request: + branches: + - main + +jobs: + deploy: + runs-on: self-hosted + + steps: + # 1) S'assurer que Node.js est installé + - name: Ensure Node.js is installed + shell: sh + run: | + if command -v node >/dev/null 2>&1; then + echo "Node.js already installed: $(node -v)" + else + echo "Node.js not found, installing..." + apk update && apk add --no-cache nodejs + echo "Node.js installed: $(node -v)" + fi + + # 2) S'assurer que Java & Maven sont installés + - name: Ensure Java & Maven are installed + shell: sh + run: | + if command -v java >/dev/null 2>&1; then + echo "Java already installed:" + java -version + else + echo "Java not found, installing OpenJDK 17..." + apk update && apk add --no-cache openjdk17-jdk + echo "Java installed:" + java -version + fi + + if command -v mvn >/dev/null 2>&1; then + echo "Maven already installed:" + mvn -version + else + echo "Maven not found, installing Maven..." + apk update && apk add --no-cache maven + echo "Maven installed:" + mvn -version + fi + + # 3) Détecter JAVA_HOME dynamiquement et le propager + - name: Detect JAVA_HOME dynamically + shell: sh + run: | + JAVA_BIN=$(readlink -f "$(command -v java)") + JAVA_HOME=$(dirname "$(dirname "$JAVA_BIN")") + echo "Detected JAVA_HOME=$JAVA_HOME" + echo "JAVA_HOME=$JAVA_HOME" >> "$GITHUB_ENV" + + # 4) Checkout du dépôt + - name: Checkout repository + uses: actions/checkout@v4 + + # 5) Afficher quelques infos utiles + - name: Show current commit and tools + shell: sh + run: | + echo "Current commit:" + git rev-parse HEAD + echo "JAVA_HOME is: $JAVA_HOME" + java -version + mvn -version + + # 6) S'assurer que le client Docker + docker-compose sont installés + - name: Ensure Docker CLI is installed + shell: sh + run: | + if command -v docker >/dev/null 2>&1; then + echo "Docker CLI already installed:" + docker version || true + else + echo "Docker CLI not found, installing..." + apk update && apk add --no-cache docker docker-compose + echo "Docker CLI installed:" + docker version || true + fi + + # 7) Générer le .env utilisé par docker-compose-prod.yml + - name: Generate .env from Gitea secrets + shell: sh + run: | + cat > .env </dev/null 2>&1; then + echo "Node.js already installed: $(node -v)" + else + echo "Node.js not found, installing..." + apk update && apk add --no-cache nodejs + echo "Node.js installed: $(node -v)" + fi + + # 2) S'assurer que Java + Maven sont installés + - name: Ensure Java & Maven are installed + shell: sh + run: | + if command -v java >/dev/null 2>&1; then + echo "Java already installed:" + java -version + else + echo "Java not found, installing OpenJDK 17..." + apk update && apk add --no-cache openjdk17-jdk + echo "Java installed:" + java -version + fi + + if command -v mvn >/dev/null 2>&1; then + echo "Maven already installed:" + mvn -version + else + echo "Maven not found, installing Maven..." + apk update && apk add --no-cache maven + echo "Maven installed:" + mvn -version + fi + + # 3) Détecter automatiquement JAVA_HOME et le propager au reste du job + - name: Detect JAVA_HOME dynamically + shell: sh + run: | + JAVA_BIN=$(readlink -f "$(command -v java)") + JAVA_HOME=$(dirname "$(dirname "$JAVA_BIN")") + echo "Detected JAVA_HOME=$JAVA_HOME" + echo "JAVA_HOME=$JAVA_HOME" >> "$GITHUB_ENV" + + # 4) Checkout du dépôt (Node est déjà garanti à ce stade) + - name: Checkout repository + uses: actions/checkout@v4 + + # 5) Vérification des versions (pour les logs) + - name: Show Java & Maven versions + shell: sh + run: | + echo "JAVA_HOME is: $JAVA_HOME" + java -version + mvn -version + + # 6) Build Maven + - name: Build with Maven + shell: sh + run: mvn -B clean verify \ No newline at end of file diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml new file mode 100644 index 0000000..23e1406 --- /dev/null +++ b/docker-compose-prod.yml @@ -0,0 +1,46 @@ +version: '3.9' + +services: + + db: + image: postgres:15 + container_name: fiscad-db + restart: always + environment: + POSTGRES_DB: ${POSTGRES_DB_FISCAD} + POSTGRES_USER: ${POSTGRES_USER_FISCAD} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD_FISCAD} + ports: + - "5432:5432" + volumes: + - db-data-fiscad:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER_FISCAD}"] + interval: 10s + timeout: 5s + retries: 5 + + app: + build: + context: . + dockerfile: Dockerfile + container_name: fiscad-app + depends_on: + - db + environment: + SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB_FISCAD} + SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER_FISCAD} + SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD_FISCAD} + SERVER_PORT: 8282 + IO_GMSS_FISCAD_PROFILE: abomey + SPRING_PROFILES_ACTIVE: abomey + ports: + - "8282:8282" + volumes: + - /fiscad/uploads:/app/uploads + - /fiscad/jasperReport:/app/jasperReport + - /fiscad/logs:/app/logs + restart: on-failure + +volumes: + db-data-fiscad: \ No newline at end of file