ng-implementation/devops/gitlab-ci.yml
2025-10-03 11:08:34 +02:00

140 lines
3.5 KiB
YAML

stages:
- setup
- build
- test
- package
- deploy
variables:
NODE_OPTIONS: --max_old_space_size=4096
# Répertoires (à adapter à votre mono-repo)
FRONTEND_DIR: "frontend"
DESIGN_SYSTEM_DIR: "design-system"
STREAMLIT_DIR: "streamlit"
default:
before_script:
- echo "Node $(node -v) / NPM $(npm -v)"
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- ${FRONTEND_DIR}/.npm/
- ${DESIGN_SYSTEM_DIR}/.npm/
setup:node:
image: node:24
stage: setup
script:
- node -v && npm -v
rules:
- when: always
build:angular:
image: node:24
stage: build
needs: ["setup:node"]
variables:
# Variables .env pour le build Angular (optionnelles)
NG_APP_REQUIRE_AUTH: "true"
NG_APP_LOGIN_ROUTE: "/login"
before_script:
- cd ${FRONTEND_DIR}
- npm ci
script:
- echo "NG_APP_REQUIRE_AUTH=${NG_APP_REQUIRE_AUTH}" >> .env.production
- echo "NG_APP_LOGIN_ROUTE=${NG_APP_LOGIN_ROUTE}" >> .env.production
- npm run build -- --configuration=production
artifacts:
when: always
expire_in: 1 week
paths:
- ${FRONTEND_DIR}/dist/
rules:
- if: $CI_COMMIT_BRANCH
build:storybook:
image: node:24
stage: build
needs: ["setup:node"]
before_script:
- cd ${DESIGN_SYSTEM_DIR}
- npm ci
script:
- npm run build --if-present
- npm run storybook:build
artifacts:
when: always
expire_in: 1 week
paths:
- ${DESIGN_SYSTEM_DIR}/storybook-static/
rules:
- if: $CI_COMMIT_BRANCH
setup:streamlit:
image: python:3.11
stage: setup
before_script:
- cd ${STREAMLIT_DIR}
script:
- if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
artifacts:
when: on_failure
rules:
- when: always
test:streamlit-imports:
image: python:3.11
stage: test
needs: ["setup:streamlit"]
before_script:
- cd ${STREAMLIT_DIR}
script:
- python -c "import importlib,sys; importlib.import_module('streamlit'); print('streamlit ok')"
- if [ -f app.py ]; then python -m py_compile app.py; fi
rules:
- if: $CI_COMMIT_BRANCH
build:openapi-from-streamlit:
image: python:3.11
stage: build
needs: ["setup:streamlit"]
before_script:
- pip install --no-cache-dir astunparse || true
script:
- python devops/streamlit-to-swagger.py --src ${STREAMLIT_DIR} --out openapi.json --title "Streamlit API" --version ${CI_COMMIT_SHORT_SHA}
artifacts:
when: always
expire_in: 1 week
paths:
- openapi.json
rules:
- if: $CI_COMMIT_BRANCH
package:docker-images:
stage: package
image: docker:27
services:
- docker:27-dind
variables:
DOCKER_DRIVER: overlay2
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
script:
- docker build -f devops/frontend-dockerfile.yml -t $CI_REGISTRY_IMAGE/frontend:${CI_COMMIT_SHORT_SHA} ${FRONTEND_DIR}
- docker build -f devops/design-system-dockerfile.yml -t $CI_REGISTRY_IMAGE/design-system:${CI_COMMIT_SHORT_SHA} ${DESIGN_SYSTEM_DIR}
- docker build -f devops/streamlit-dockerfile.yml -t $CI_REGISTRY_IMAGE/streamlit:${CI_COMMIT_SHORT_SHA} ${STREAMLIT_DIR}
- docker push $CI_REGISTRY_IMAGE/frontend:${CI_COMMIT_SHORT_SHA}
- docker push $CI_REGISTRY_IMAGE/design-system:${CI_COMMIT_SHORT_SHA}
- docker push $CI_REGISTRY_IMAGE/streamlit:${CI_COMMIT_SHORT_SHA}
rules:
- if: $CI_COMMIT_BRANCH
deploy:preview:
stage: deploy
image: alpine:3.19
script:
- echo "Déploiement de preview (placeholder)"
rules:
- if: $CI_COMMIT_BRANCH