Commit 525b427e authored by Natalia Grigoriadou's avatar Natalia Grigoriadou
Browse files

updated gitlab-ci.yml file

parent 29d5e3cc
Loading
Loading
Loading
Loading
Loading
+38 −77
Changes for .gitlab-ci.yml: 38 added lines, 77 removed lines.
Original line number Diff line number Diff line
@@ -2,12 +2,13 @@ default:
  image: python:3.12-slim
  cache:
    paths:
      - .cache/pip
      - .cache/uv
  before_script:
    - pip install -r "$CI_PROJECT_DIR/mcp_module/requirements.txt"
    - pip install -r "$CI_PROJECT_DIR/ai_agent/requirements.txt"
    - pip install mypy pytest ruff import-linter
    - export PYTHONPATH="$CI_PROJECT_DIR:$PYTHONPATH"
    - cd "$CI_PROJECT_DIR/${BACKEND_DIR:-.}"
    - pip install uv
    - export UV_SYSTEM_CERTS=1
    - uv sync --locked --extra dev
    - . .venv/bin/activate

stages:
  - type
@@ -15,103 +16,63 @@ stages:
  - lint
  - format
  - test
  - build
  - build-and-push

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
  SOURCE_DIRS: "mcp_module/ ai_agent/"
  TEST_DIRS: "tests/"

include:
  - template: Security/SAST.gitlab-ci.yml

sast:
  stage: test
  UV_CACHE_DIR: "$CI_PROJECT_DIR/.cache/uv"

type:
  stage: type
  tags:
    - docker
  script:
    - mypy $SOURCE_DIRS
    - mypy src/ tests/

architecture:
  stage: architecture
  tags:
    - docker
  script:
    - |
      if [ -f "$CI_PROJECT_DIR/.importlinter" ] || \
         [ -f "$CI_PROJECT_DIR/.importlinter.ini" ] || \
         [ -f "$CI_PROJECT_DIR/pyproject.toml" ] || \
         [ -f "$CI_PROJECT_DIR/setup.cfg" ]; then
        lint-imports
      else
        echo "No import-linter config found; skipping architecture check."
      fi
    - lint-imports

lint:
  stage: lint
  tags:
    - docker
  script:
    - ruff check $SOURCE_DIRS $TEST_DIRS
    - ruff check src/ tests/

format:
  stage: format
  tags:
    - docker
  script:
    - ruff format --check $SOURCE_DIRS $TEST_DIRS
    - ruff format --check src/ tests/

test:
  stage: test
  tags:
    - docker
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""
  services:
    - docker:dind
  script:
    - pytest
    - pytest tests/unit tests/integration --cov=src/open_exposure_gateway --cov-branch --cov-report=term-missing || [ $? -eq 5 ] #bypass no tests found error.
  coverage: '/TOTAL.+ ([0-9]{1,3}(?:\.[0-9]+)?%)/'

.variables-template:
  tags:
    - shell
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
    - |
      if [ -n "$CI_COMMIT_TAG" ]; then
        export IMAGE_TAG="$CI_COMMIT_TAG"
      elif [ "$CI_COMMIT_REF_NAME" = "main" ]; then
        export IMAGE_TAG="latest"
      elif [ "$CI_COMMIT_REF_NAME" = "develop" ]; then
        export IMAGE_TAG="develop"
      else
        export IMAGE_TAG="$(echo "$CI_COMMIT_REF_NAME" | tr '/' '-')"
      fi
      echo "Using image tag: $IMAGE_TAG"

build-ai-agent:
  stage: build
  extends: .variables-template
  variables:
    IMAGE_NAME: "ai_agent"
conformance:
  stage: test
  allow_failure: true
  script:
    - echo "Building ${IMAGE_NAME} image..."
    - docker build --network=host -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -f "$CI_PROJECT_DIR/$IMAGE_NAME/Dockerfile" "$CI_PROJECT_DIR/$IMAGE_NAME"
    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
  only:
    - main
    - develop
    - tags
    - pytest tests/conformance

build-mcp-module:
  stage: build
  extends: .variables-template
build-and-push:
  stage: build-and-push
  image: docker:cli
  variables:
    IMAGE_NAME: "mcp_module"
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""
  services:
    - docker:dind
  before_script:
    - docker info
  script:
    - echo "Building ${IMAGE_NAME} image..."
    - docker build --network=host -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -f "$CI_PROJECT_DIR/$IMAGE_NAME/Dockerfile" "$CI_PROJECT_DIR/$IMAGE_NAME"
    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
  only:
    - main
    - develop
    - tags
 No newline at end of file
    - export TEST_IMAGE_TAG="ci-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}"
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
    - docker buildx build --provenance=false --network=host -t "$CI_REGISTRY_IMAGE:$TEST_IMAGE_TAG" --push .
    - docker logout "$CI_REGISTRY"
  rules:
    - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "develop"'