140 lines
3.5 KiB
YAML
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
|
|
|