From a5cd221aee336a720f43d55d1d234c829ef859b0 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Tue, 30 Apr 2024 10:48:25 +0200
Subject: [PATCH] [ci] Use central biosignal CI file

---
 .gitlab-ci.yml | 250 +------------------------------------------------
 1 file changed, 4 insertions(+), 246 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 89bdd7aa..56a767b7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,249 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-3.0-or-later
 
-workflow:
-  rules:
-    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
-    - if: '$CI_PIPELINE_SOURCE == "web"'
-    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
-    - if: $CI_COMMIT_TAG
-
-variables:
-  PYTHONUNBUFFERED: "1"
-  OMP_NUM_THREADS: 1  # for pytorch CI tests on docker platform
-  GIT_SUBMODULE_STRATEGY: normal
-  GIT_SUBMODULE_DEPTH: 1
-  XDG_CACHE_HOME: "${CI_PROJECT_DIR}/_cache"
-  XDG_CONFIG_HOME: "${CI_PROJECT_DIR}/_config"
-  PIXI_HOME: "${CI_PROJECT_DIR}/_pixi"
-  PIXI_FROZEN: true
-
-.snippets:
-
-  setup-pixi:
-      - mkdir -p ${XDG_CACHE_HOME}/pixi
-      - mkdir -p ${XDG_CONFIG_HOME}/pixi
-      # global configuration for pixi
-      # https://pixi.sh/latest/advanced/global_configuration/#reference
-      - |
-        cat << 'EOF' > ${XDG_CONFIG_HOME}/pixi/config.toml
-        change_ps1 = false
-        tls_no_verify = true
-        [mirrors]
-        "https://conda.anaconda.org/conda-forge" = [ "http://bobconda.lab.idiap.ch:8080/conda-forge" ]
-        EOF
-      - pixi info
-      - export PATH=${PIXI_HOME}/bin:${PATH}
-      - pixi global install git
-
-      # returns a comma-separated list of supported environments
-      - |
-        function pixi_environments() { \
-          local array=($(pixi --color=never info | sed -e '/Environment:/!d;s/^ *Environment: //')); \
-          printf -v joined '%s,' "${array[@]}"; \
-          echo "${joined%,}"; \
-        }
-
-      # returns a comma-separated list of supported tasks
-      - |
-        function pixi_tasks() { \
-          local array=($(pixi --color=never task list | sed 's/* //;/^$/d')); \
-          printf -v joined '%s,' "${array[@]}"; \
-          echo "${joined%,}"; \
-        }
-
-      # returns the first occurence of a string in an array, or not-found
-      # usage: has_any_string arr1,arr2,arr3 arr1,arr2 -> arr1
-      # usage: has_any_string arr1,arr2,arr3 arr3,arr2 -> arr3
-      # usage: has_any_string arr1,arr2,arr3 arr -> not-found
-      - |
-        function has_any_string() { \
-          local array=(`echo ${1//,/ }`); \
-          local matches=(`echo ${2//,/ }`); \
-          for i in "${matches[@]}"; do \
-            if [[ " ${array[*]} " =~ [[:space:]]${i}[[:space:]] ]]; then \
-                echo $i; \
-                return; \
-            fi; \
-          done; \
-          echo "not-found"; \
-        }
-
-      # declare pixi_run function to run a task on a given environment, with
-      # multiple choices. It emits a green coloured output to the logs if both
-      # the environmetn and the task exist, otherwise it complains with a red
-      # log.
-      # usage: pixi_run env1,env2,env3 task1,task2,task3
-      - |
-        function pixi_run { \
-          local _env=$(has_any_string $(pixi_environments) "$1"); \
-          local _task=$(has_any_string $(pixi_tasks) "$2"); \
-          if [[ ${_env} == "not-found" || ${_task} == "not-found" ]]; then \
-            echo -e "\e[1m--> missing environment or task for: \e[31mpixi run -e $1 $2\e[0m"; \
-            exit 1; \
-          else \
-            echo -e "\e[1m--> \e[32mpixi run -e ${_env} ${_task}\e[0m"; \
-            pixi run -e ${_env} ${_task}; \
-          fi \
-        }
-
-      # declare pixi_run_if_exists function to run a task on a given
-      # environment, with multiple choices, if the function exists. It emits a
-      # green coloured output to the logs if both the environmetn and the task
-      # exist, otherwise it warns with an yellow log.
-      # usage: pixi_run env1,env2,env3 task1,task2,task3
-      - |
-        function pixi_run_if_exists { \
-          local _env=$(has_any_string $(pixi_environments) "$1"); \
-          local _task=$(has_any_string $(pixi_tasks) "$2"); \
-          if [[ ${_env} == "not-found" || ${_task} == "not-found" ]]; then \
-            echo -e "\e[1m--> missing environment or task for: \e[33mpixi run -e $1 $2\e[0m"; \
-          else \
-            echo -e "\e[1m--> \e[32mpixi run -e ${_env} ${_task}\e[0m"; \
-            pixi run -e ${_env} ${_task}; \
-          fi \
-        }
-
-  apt-install-libgl:
-      # apt install libgl1-mesa-glx for grad-cam
-      - |
-        if [[ ${CI_RUNNER_TAGS} =~ '"docker"' ]]; then \
-          apt update; \
-          apt install -y libgl1-mesa-glx > /dev/null; \
-        fi
-
-default:
-  tags:
-    - bob
-    - docker
-  image: ghcr.io/prefix-dev/pixi:latest
-  # do not cache pixi installs as we already have a reverse proxying cache
-  # cache:
-  #   key:
-  #     files:
-  #       - pixi.lock
-  #   paths:
-  #     - .pixi  # project packages
-  before_script:
-    - !reference [.snippets, setup-pixi]
-
-stages:
-  - qa
-  - test
-  - doc
-  - dist
-  - deploy
-
-quality:
-  stage: qa
-  rules:
-    - exists:
-      - .pre-commit-config.yaml
-  cache:
-    key: pre-commit
-    paths:
-      - _cache/pre-commit
-  script:
-      - pixi_run qa-ci,default qa-ci,qa
-
-tests:
-  stage: test
-  parallel:
-    matrix:
-      - PYTHON: ["3.12", "3.11"]
-        TAG: ["docker", "macos-arm"]
-  tags:
-    - bob
-    - ${TAG}
-  needs:
-    - job: quality
-      optional: true
-  before_script:
-    - !reference [.snippets, setup-pixi]
-    - !reference [.snippets, apt-install-libgl]
-  script:
-    - pixi_run test-ci-${PYTHON//\./},default test-ci,test-cov,test
-  coverage: '/(?:TOTAL|total|Total).*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
-  artifacts:
-    paths:
-      - html
-    reports:
-      junit: junit-coverage.xml
-      coverage_report:
-        coverage_format: cobertura
-        path: coverage.xml
-
-documentation:
-  stage: doc
-  rules:
-    - exists:
-      - doc/conf.py
-  needs:
-    - job: quality
-      optional: true
-  before_script:
-    - !reference [.snippets, setup-pixi]
-    - !reference [.snippets, apt-install-libgl]
-  script:
-    - pixi_run doc-ci,default doc-ci,doc
-    - pixi_run_if_exists doc-ci,default doctest-ci,doctest
-  artifacts:
-    paths:
-      - html
-
-python-package:
-  stage: dist
-  needs:
-    - tests
-  script:
-    - pixi_run build-ci,default build-ci,build
-    - pixi_run_if_exists build-ci,default check-ci,check
-  artifacts:
-    paths:
-      - dist
-
-docker-image:
-  stage: dist
-  needs:
-    - tests
-  image: docker:latest
-  services:
-    - docker:dind
-  rules:
-    # conditions:
-    # - the variable $CI_REGISTRY must be defined (package has a container
-    # image registry)
-    # - a file named "Dockerfile" exists on the root of the repository
-    - if: ($CI_REGISTRY != null)
-      exists:
-      - Dockerfile
-  before_script:
-    - docker info
-  script:
-    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
-    - docker build -t ${CI_REGISTRY_IMAGE}:latest .
-    - >
-      # upload image to registry if on main dev branch or tag
-      if [ "${CI_COMMIT_BRANCH}" == "${CI_DEFAULT_BRANCH}" ]; then \
-        docker push ${CI_REGISTRY_IMAGE}:latest; \
-        if [ -n "${CI_COMMIT_TAG}" ]; then \
-          docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} .; \
-          docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}; \
-        fi \
-      fi
-
-pypi:
-  stage: deploy
-  needs:
-    - python-package
-  rules:
-    # conditions:
-    # - only for tags in PEP-440 style (on any branch)
-    # - only for public packages
-    # - the variable $PYPI_TOKEN must be defined
-    - if: ($CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+([abc]\d*)?$/ && $CI_PROJECT_VISIBILITY == "public" && $PYPI_TOKEN != null)
-  variables:
-    TWINE_USERNAME: "__token__"
-    TWINE_PASSWORD: "${PYPI_TOKEN}"
-  script:
-    - pixi_run build-ci,default upload-ci,upload
+include:
+  - project: 'biosignal/templates/ci'
+    ref: main
+    file: 'python.yml'
-- 
GitLab