Verified Commit 41a3cee7 authored by Adrian DC's avatar Adrian DC
Browse files

ci(gitlab-ci): isolate '.coverage:*' to 'coverage.yml' template

Signed-off-by: default avatarAdrian DC <radian.dc@gmail.com>
parent 593e2d87
Loading
Loading
Loading
Loading
Loading
+89 −0
Changes for .gitlab-ci.d/coverage.yml: 89 added lines, 0 removed lines.
Original line number Diff line number Diff line
spec:
  inputs:
    stage:
      default: test
      description: 'Defines the coverage stage (Default: test)'
    package:
      default: undefined-package
      description: 'Defines the coverage package (Default: undefined-package)'
    alias:
      default: ''
      description: 'Defines the coverage alias (Default: "")'
---

.coverage:scripts:
  variables:
    COVERAGE_COMMON_FILE: ${CI_PROJECT_DIR}/coverage-reports/.coverage-common
    COVERAGE_COMMON_XML: ${CI_PROJECT_DIR}/coverage-reports/coverage-common.xml
    COVERAGE_EXCLUDE_ALSO: ''
    COVERAGE_RCFILE: ${CI_PROJECT_DIR}/.coveragerc
  before_script:
    # Prepare coverage reports
    - mkdir -p ./coverage-reports/
    - chmod 777 ./coverage-reports
    - |
      if [ -z "${SUITE}" ]; then
        coverage erase
      fi
    # Test coverage execution
    - coverage run --append --module --source="${PWD}/src" src --version >/dev/null
    # Prepare coverage result
    - chmod 666 "${COVERAGE_FILE}"
    # Bind coverage entrypoints
    - echo "coverage run --append --module --source='${PWD}/src' src \"\${@}\"" | tee /usr/local/bin/$[[ inputs.package ]] >/dev/null
    - chmod a+x /usr/local/bin/$[[ inputs.package ]]
    - |
      if [ ! -z '$[[ inputs.alias ]]' ]; then
        echo "coverage run --append --module --source='${PWD}/src' src \"\${@}\"" | tee /usr/local/bin/$[[ inputs.alias ]] >/dev/null
        chmod a+x '/usr/local/bin/$[[ inputs.alias ]]'
      fi
    - echo "coverage run --append --source='${PWD}/src' src \"\${@}\"" | tee /usr/local/bin/python3-coverage >/dev/null
    - chmod a+x /usr/local/bin/python3-coverage
  script:
    # Configure coverage settings
    - |
      cp -fv "${COVERAGE_RCFILE}" /tmp/.coveragerc.common
      cp -fv "${COVERAGE_RCFILE}" /tmp/.coveragerc.job
      echo "${CI_LOCAL:+pragma: no local cover}" | tr '|' '\n' | xargs -i -n1 echo '    {}' >>/tmp/.coveragerc.common
      echo "${CI_LOCAL:+pragma: no local cover}|${COVERAGE_EXCLUDE_ALSO}" | tr '|' '\n' | xargs -i -n1 echo '    {}' >>/tmp/.coveragerc.job
      echo "${CI_LOCAL:+pragma: no local cover}|${COVERAGE_EXCLUDE_ALSO}" | tr '|' '\n' | xargs -i -n1 echo '    \A(?s:.*# {} file.*)\Z' >>/tmp/.coveragerc.job
    # Generate coverage report
    - coverage xml -o "${COVERAGE_XML}"
    - sed -i 's#\(<source>\).*\(</source>\)#\1.\2#g' "${COVERAGE_XML}"
    # Show coverage report
    - COVERAGE_RCFILE='/tmp/.coveragerc.job' coverage report --show-missing --skip-covered
  after_script:
    # Combine coverage reports
    - |
      set +x
      if [ ! -z "${CI_LOCAL}" ]; then
        COVERAGE_FILE="${COVERAGE_COMMON_FILE}" coverage combine --keep ./coverage-reports/.coverage-*
        COVERAGE_FILE="${COVERAGE_COMMON_FILE}" COVERAGE_RCFILE='/tmp/.coveragerc.common' coverage report --ignore-errors --show-missing --skip-covered
        COVERAGE_FILE="${COVERAGE_COMMON_FILE}" coverage xml -o "${COVERAGE_COMMON_XML}"
        sed -i 's#\(<source>\).*\(</source>\)#\1.\2#g' "${COVERAGE_COMMON_XML}"
        rm -rf "${common}"
      fi

.coverage:template:
  extends:
    - .test:template
    - .coverage:scripts
  script:
    # Inherit script
    - !reference ['.test:template', script]
    - !reference ['.coverage:scripts', script]
  variables:
    COVERAGE_FILE: ${CI_PROJECT_DIR}/coverage-reports/.coverage-undefined
    COVERAGE_EXCLUDE_ALSO: 'pragma: undefined cover|pragma: undefined2 cover'
    COVERAGE_XML: ${CI_PROJECT_DIR}/coverage-reports/coverage-undefined.xml
    PYTHONDONTWRITEBYTECODE: 1
    PYTHONPATH: ${CI_PROJECT_DIR}
    SUITE: ''
  coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
  artifacts:
    paths:
      - coverage-reports/
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage-reports/coverage-*.xml
+14 −69
Changes for .gitlab-ci.yml: 14 added lines, 69 removed lines.
Original line number Diff line number Diff line
@@ -38,6 +38,10 @@ include:
      stage: test
      package: gitlab-projects-settings
      timeout: 10m
  - local: .gitlab-ci.d/coverage.yml
    inputs:
      stage: test
      package: gitlab-projects-settings
  - local: .gitlab-ci.d/quality.yml
    inputs:
      stage: quality
@@ -283,56 +287,7 @@ build:
    - if: $CI_COMMIT_TAG || $CI_PIPELINE_SOURCE == "trigger" || $CI_PIPELINE_SOURCE == "web" || $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
      when: on_success

.coverage-scripts:
  variables:
    COVERAGE_COMMON_FILE: ${CI_PROJECT_DIR}/coverage-reports/.coverage-common
    COVERAGE_COMMON_XML: ${CI_PROJECT_DIR}/coverage-reports/coverage-common.xml
    COVERAGE_EXCLUDE_ALSO: ''
    COVERAGE_RCFILE: ${CI_PROJECT_DIR}/.coveragerc
  before_script:
    - mkdir -p ./coverage-reports/
    - chmod 777 ./coverage-reports
    - |
      if [ -z "${SUITE}" ]; then
        coverage erase
      fi
    - coverage run --append --module --source="${PWD}/src" src --version >/dev/null
    - chmod 666 "${COVERAGE_FILE}"
    - echo "coverage run --append --module --source='${PWD}/src' src \"\${@}\"" | tee /usr/local/bin/gitlab-projects-settings >/dev/null
    - echo "coverage run --append --source='${PWD}/src' src \"\${@}\"" | tee /usr/local/bin/python3-coverage >/dev/null
    - chmod a+x /usr/local/bin/gitlab-projects-settings /usr/local/bin/python3-coverage
  script:
    - |
      cp -fv "${COVERAGE_RCFILE}" /tmp/.coveragerc.common
      cp -fv "${COVERAGE_RCFILE}" /tmp/.coveragerc.job
      echo "${CI_LOCAL:+pragma: no local cover}" | tr '|' '\n' | xargs -i -n1 echo '    {}' >>/tmp/.coveragerc.common
      echo "${CI_LOCAL:+pragma: no local cover}|${COVERAGE_EXCLUDE_ALSO}" | tr '|' '\n' | xargs -i -n1 echo '    {}' >>/tmp/.coveragerc.job
      echo "${CI_LOCAL:+pragma: no local cover}|${COVERAGE_EXCLUDE_ALSO}" | tr '|' '\n' | xargs -i -n1 echo '    \A(?s:.*# {} file.*)\Z' >>/tmp/.coveragerc.job
    - coverage xml -o "${COVERAGE_XML}"
    - COVERAGE_RCFILE='/tmp/.coveragerc.job' coverage report --show-missing --skip-covered
    - sed -i 's#\(<source>\).*\(</source>\)#\1.\2#g' "${COVERAGE_XML}"
  after_script:
    - |
      set +x
      if [ ! -z "${CI_LOCAL}" ]; then
        COVERAGE_FILE="${COVERAGE_COMMON_FILE}" coverage combine --keep ./coverage-reports/.coverage-*
        COVERAGE_FILE="${COVERAGE_COMMON_FILE}" COVERAGE_RCFILE='/tmp/.coveragerc.common' coverage report --ignore-errors --show-missing --skip-covered
        COVERAGE_FILE="${COVERAGE_COMMON_FILE}" coverage xml -o "${COVERAGE_COMMON_XML}"
        sed -i 's#\(<source>\).*\(</source>\)#\1.\2#g' "${COVERAGE_COMMON_XML}"
        rm -rf "${common}"
      fi

.coverage-template:
  extends:
    - .test:template
    - .test:rules
    - .coverage-scripts
  variables:
    PYTHONDONTWRITEBYTECODE: 1
    PYTHONPATH: ${CI_PROJECT_DIR}
  script:
    - !reference ['.test:template', script]
    - !reference [.coverage-scripts, script]
.coverage:rules:
  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
      changes:
@@ -345,21 +300,11 @@ build:
      when: on_success
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
      when: always
  coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
  artifacts:
    paths:
      - coverage-reports/
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage-reports/coverage-*.xml

# =============================================================================
# Stage: test (coverage)

coverage:linux:
  extends:
    - .coverage-template
    - .coverage:template
    - .coverage:rules
  image: registry.gitlab.com/radiandevcore/tools/gitlab-projects-settings/gitlab-projects-settings:test-coverage-linux
  needs:
    - job: registry:test-coverage-linux
@@ -372,7 +317,8 @@ coverage:linux:

coverage:windows:
  extends:
    - .coverage-template
    - .coverage:template
    - .coverage:rules
  image: registry.gitlab.com/radiandevcore/tools/gitlab-projects-settings/gitlab-projects-settings:test-coverage-windows
  needs:
    - job: registry:test-coverage-windows
@@ -384,15 +330,13 @@ coverage:windows:
    COVERAGE_XML: ${CI_PROJECT_DIR}/coverage-reports/coverage-windows.xml
    SUITE: 'colors\|versions\|windows'

# =============================================================================
# Stage: test (Python)

py3.8:
  extends:
    - .test:template
    - .test:rules
  image: registry.gitlab.com/radiandevcore/tools/gitlab-projects-settings/gitlab-projects-settings:test-oldest
  before_script:
    # Inherit before_script
    - !reference ['.test:template', before_script]

py3.12:
@@ -401,6 +345,7 @@ py3.12:
    - .test:rules
  image: registry.gitlab.com/radiandevcore/tools/gitlab-projects-settings/gitlab-projects-settings:test-latest
  before_script:
    # Inherit before_script
    - !reference ['.test:template', before_script]

quality:coverage:
@@ -411,9 +356,9 @@ quality:coverage:
    - job: coverage:linux
    - job: coverage:windows
  variables:
    COVERAGE_FILE: !reference [.coverage-scripts, variables, COVERAGE_COMMON_FILE]
    COVERAGE_RCFILE: !reference [.coverage-scripts, variables, COVERAGE_RCFILE]
  rules: !reference [.coverage-template, rules]
    COVERAGE_FILE: !reference ['.coverage:scripts', variables, COVERAGE_COMMON_FILE]
    COVERAGE_RCFILE: !reference ['.coverage:scripts', variables, COVERAGE_RCFILE]
  rules: !reference ['.coverage:rules', rules]

quality:sonarcloud:
  needs: