Skip to content
Snippets Groups Projects
.gitlab-ci.yml 5.19 KiB
Newer Older
Johan Bregeon's avatar
Johan Bregeon committed
variables:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  DIRAC_DIR: "/home/dirac"
stages:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  - linting
  - sonarqube
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  - build
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  - tests
  - upload
Natthan.Pigoux's avatar
Natthan.Pigoux committed
# Run hadolint Dockerfile linter
hadolint:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
      - DESY-IT
  stage: linting
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    name: ghcr.io/hadolint/hadolint:latest-debian
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  rules:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - changes:
        - docker/dirac-client/Dockerfile
    - if: $CI_COMMIT_BRANCH =~ /^.*docker.*/
      when: manual
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - hadolint ${CI_PROJECT_DIR}/docker/dirac-client/Dockerfile
  allow_failure: true
# Run pytest coverage
pytest_coverage:
  stage: sonarqube
  image:
    name: mambaorg/micromamba:latest
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - changes:
      - test/Unit/
  script:
    - eval "$(micromamba shell hook --shell bash)"
    - micromamba env create -y --file ${CI_PROJECT_DIR}/utils/ci/env/coverage.yml
    - micromamba activate coverage
    - python -m pip install .
    - python -m pytest tests/Unit --verbose --cov=src/CTADIRAC/ --cov-report=xml --cov-report=term
  artifacts:
    paths:
      - coverage.xml
    expire_in: 1 day
  allow_failure: true

# Run Sonar scanner using pytest cov
Natthan.Pigoux's avatar
Natthan.Pigoux committed
sonarqube:
  stage: sonarqube
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  image:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    name: sonarsource/sonar-scanner-cli:latest
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    entrypoint: [""]
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  needs: ["pytest_coverage"]
  dependencies:
    - pytest_coverage
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
    GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis task
  cache:
    key: "${CI_JOB_NAME}"
    paths:
      - .sonar/cache
  script:
    - sonar-scanner -Dsonar.branch.name="${CI_COMMIT_BRANCH}" -Dsonar.sources=${CI_PROJECT_DIR} -Dsonar.projectKey=${SONAR_PROJECT_KEY} -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_TOKEN -X
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  allow_failure: true

# Build DIRAC Client Docker image
Natthan.Pigoux's avatar
Natthan.Pigoux committed
# and push it to Gitlab container registry using Kaniko:
build_dirac_client_image:
Johan Bregeon's avatar
Johan Bregeon committed
  tags:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - DESY-IT
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  stage: build
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  image:
    name: gcr.io/kaniko-project/executor:v1.9.0-debug
    entrypoint: [""]
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  rules:
    - if: $CI_COMMIT_TAG
      changes:
        - docker/dirac-client/Dockerfile
Natthan.Pigoux's avatar
Natthan.Pigoux committed
        - src/CTADIRAC
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - if: $CI_COMMIT_BRANCH =~ /^.*docker.*/
      when: manual
    - if: $CI_COMMIT_BRANCH =~ /^.*system_test.*/
      when: manual
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  variables:
    IMAGE_NAME: dirac-client
Johan Bregeon's avatar
Johan Bregeon committed
  script:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - /kaniko/executor
        --context "${CI_PROJECT_DIR}"
        --dockerfile "${CI_PROJECT_DIR}/docker/dirac-client/Dockerfile"
Natthan.Pigoux's avatar
Natthan.Pigoux committed
        --destination "${CI_REGISTRY_IMAGE}/dirac-client:$CI_COMMIT_TAG"
Natthan.Pigoux's avatar
Natthan.Pigoux committed
        --destination "${CI_REGISTRY_IMAGE}/dirac-client:latest"
Natthan.Pigoux's avatar
Natthan.Pigoux committed
        # Use --no-push to not push the image instead of destination
Natthan.Pigoux's avatar
Natthan.Pigoux committed
# Run CTADIRAC System tests:
system_tests:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - DESY-IT
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  needs: ["build_dirac_client_image"]
  variables:
    BEGIN_CERT: "-----BEGIN CERTIFICATE-----"
    END_CERT: "-----END CERTIFICATE-----"
    BEGIN_KEY: "-----BEGIN ENCRYPTED PRIVATE KEY-----"
    END_KEY: "-----END ENCRYPTED PRIVATE KEY-----"
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  rules:
    - if: $CI_COMMIT_TAG
      changes:
        - src/CTADIRAC/
        - tests/System/
    - if: $CI_COMMIT_BRANCH =~ /^.*system_test.*/
      when: manual
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  stage: tests
  image: gitlab.cta-observatory.org:5555/cta-computing/dpps/ctadirac/dirac-client:latest
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - source ${DIRAC_DIR}/diracos/diracosrc
    - pip show CTADIRAC
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - cd $DIRAC_DIR
    - mkdir -p $DIRAC_DIR/.globus/
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - echo "$USER_CERT_ATTR" > $DIRAC_DIR/.globus/usercert.pem
    - echo "$BEGIN_CERT" >> $DIRAC_DIR/.globus/usercert.pem
    - echo "$USER_CERT" >> $DIRAC_DIR/.globus/usercert.pem
    - echo "$END_CERT" >> $DIRAC_DIR/.globus/usercert.pem
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - echo "$USER_KEY_ATTR" > $DIRAC_DIR/.globus/userkey.pem
    - echo "$BEGIN_KEY" >> $DIRAC_DIR/.globus/userkey.pem
    - echo "$USER_KEY" >> $DIRAC_DIR/.globus/userkey.pem
    - echo "$END_KEY" >> $DIRAC_DIR/.globus/userkey.pem
    - echo "$USER_CERT_PWD" | dirac-proxy-init --nocs --Cert $DIRAC_DIR/.globus/usercert.pem --Key $DIRAC_DIR/.globus/userkey.pem -ddd -p
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - dirac-configure -F -C https://majestix-vm1.zeuthen.desy.de:9135/Configuration/Server -S CTADIRAC-alma -ddd
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - echo "$USER_CERT_PWD" | dirac-proxy-init -g cta_prod --Cert $DIRAC_DIR/.globus/usercert.pem --Key $DIRAC_DIR/.globus/userkey.pem -ddd -p
Luisa Arrabito's avatar
Luisa Arrabito committed
    - cd $CI_PROJECT_DIR
Luisa Arrabito's avatar
Luisa Arrabito committed
    - python ${CI_PROJECT_DIR}/tests/System/runTestSuite.py JobExecutionTests TransformationExecutionTests ProductionExecutionTests ProductionConfigurationTests ProdSystemFullTests
Natthan.Pigoux's avatar
Natthan.Pigoux committed

Natthan.Pigoux's avatar
Natthan.Pigoux committed
# Upload CTADIRAC Package to Pypi
Natthan.Pigoux's avatar
Natthan.Pigoux committed
pypi_upload:
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - DESY-IT
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  needs: ["system_tests"]
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  only:
    - tags
  except:
    - branches
Natthan.Pigoux's avatar
Natthan.Pigoux committed
  stage: upload
  image: python:latest
  script:
    - ${CI_PROJECT_DIR}/utils/ci/checkSetupVersion.sh
Natthan.Pigoux's avatar
Natthan.Pigoux committed
    - pip install build twine
    - rm -Rf build; rm -Rf dist
    - python setup.py sdist bdist_wheel
    - python3 -m twine upload --repository-url https://upload.pypi.org/legacy/ --username "__token__" --password "$PYPI_TOKEN" dist/*

# To upload to the Gitlab pkg registry add:
# python3 -m twine upload
# --repository-url https://gitlab.cta-observatory.org/api/v4/projects/${CI_PROJECT_ID}/packages/pypi
Natthan.Pigoux's avatar
Natthan.Pigoux committed
#--username gitlab-ci-token --password "${CI_JOB_TOKEN}" dist/*