Loading templates/gitlab-ci-python.yml +23 −59 Original line number Diff line number Diff line Loading @@ -955,7 +955,7 @@ stages: - production ############################################################################################### # Generic python job # # Generic python jobs # ############################################################################################### .python-base: image: $PYTHON_IMAGE Loading @@ -980,6 +980,25 @@ stages: - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - cd ${PYTHON_PROJECT_DIR} - guess_build_system - mkdir -p -m 777 reports .python-test: extends: .python-base stage: build coverage: /^TOTAL.+?(\d+(?:\.\d+)?\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" ############################################################################################### # build stage # Loading @@ -1001,7 +1020,6 @@ py-lint: extends: .python-base stage: build script: - mkdir -p -m 777 reports - install_requirements - _pip install pylint_gitlab # codeclimate reports # run pylint and generate reports all at once Loading Loading @@ -1062,7 +1080,6 @@ py-ruff: extends: .python-base stage: build script: - mkdir -p -m 777 reports - | if [[ ${BANDIT_ENABLED} == "true" || ${PYLINT_ENABLED} == "true" || ${PYTHON_ISORT_ENABLED} == "true" ]]; then log_warn "Ruff can replace isort, Bandit, Pylint" Loading Loading @@ -1095,7 +1112,6 @@ py-ruff-format: extends: .python-base stage: build script: - mkdir -p -m 777 reports - | if [[ ${PYTHON_BLACK_ENABLED} == "true" ]]; then log_warn "Ruff can replace Black" Loading @@ -1115,7 +1131,6 @@ py-mypy: variables: MYPY_CACHE_DIR: "$CI_PROJECT_DIR/.cache/mypy" script: - mkdir -p -m 777 reports - install_requirements - _pip install mypy mypy-to-codeclimate - _run mypy ${MYPY_ARGS} ${MYPY_FILES:-$(find -type f -name "*.py" -not -path "./.cache/*" -not -path "./.venv/*")} | tee reports/py-mypy.console.txt || true Loading @@ -1139,10 +1154,8 @@ py-mypy: # test stage # ############################################################################################### py-unittest: extends: .python-base stage: build extends: .python-test script: - mkdir -p -m 777 reports - install_requirements # code coverage - _pip install coverage Loading @@ -1151,20 +1164,6 @@ py-unittest: - _run coverage run -m xmlrunner discover -o "reports/" $UNITTEST_ARGS - _run coverage report -m - _run coverage xml -o "reports/py-coverage.cobertura.xml" coverage: /^TOTAL.+?(\d+\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" rules: # skip if $UNITTEST_ENABLED not set - if: '$UNITTEST_ENABLED != "true"' Loading @@ -1172,27 +1171,11 @@ py-unittest: - !reference [.test-policy, rules] py-pytest: extends: .python-base stage: build extends: .python-test script: - mkdir -p -m 777 reports - install_requirements - _pip install pytest pytest-cov coverage - _python -m pytest --junit-xml=reports/TEST-pytests.xml --cov --cov-report term --cov-report xml:reports/py-coverage.cobertura.xml ${PYTEST_ARGS} coverage: /^TOTAL.+?(\d+\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" rules: # skip if $PYTEST_ENABLED not set - if: '$PYTEST_ENABLED != "true"' Loading @@ -1200,26 +1183,10 @@ py-pytest: - !reference [.test-policy, rules] py-nosetests: extends: .python-base stage: build extends: .python-test script: - mkdir -p -m 777 reports - install_requirements - _run nosetests --with-xunit --xunit-file=reports/TEST-nosetests.xml --with-coverage --cover-erase --cover-xml --cover-xml-file=reports/py-coverage.cobertura.xml ${NOSETESTS_ARGS} coverage: /^TOTAL.+?(\d+\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" rules: # skip if $NOSETESTS_ENABLED not set - if: '$NOSETESTS_ENABLED != "true"' Loading @@ -1233,7 +1200,6 @@ py-bandit: # force no dependencies dependencies: [] script: - mkdir -p -m 777 reports - install_requirements - _pip install bandit # CSV (for SonarQube) Loading Loading @@ -1269,7 +1235,6 @@ py-trivy: # force no dependencies dependencies: [] script: - mkdir -p -m 777 reports - | if [[ -z "$PYTHON_TRIVY_DIST_URL" ]] then Loading Loading @@ -1348,7 +1313,6 @@ py-sbom: dependencies: [] needs: [] script: - mkdir -p -m 777 reports - | case "$PYTHON_BUILD_SYSTEM" in poetry*|pipenv*) Loading Loading
templates/gitlab-ci-python.yml +23 −59 Original line number Diff line number Diff line Loading @@ -955,7 +955,7 @@ stages: - production ############################################################################################### # Generic python job # # Generic python jobs # ############################################################################################### .python-base: image: $PYTHON_IMAGE Loading @@ -980,6 +980,25 @@ stages: - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - cd ${PYTHON_PROJECT_DIR} - guess_build_system - mkdir -p -m 777 reports .python-test: extends: .python-base stage: build coverage: /^TOTAL.+?(\d+(?:\.\d+)?\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" ############################################################################################### # build stage # Loading @@ -1001,7 +1020,6 @@ py-lint: extends: .python-base stage: build script: - mkdir -p -m 777 reports - install_requirements - _pip install pylint_gitlab # codeclimate reports # run pylint and generate reports all at once Loading Loading @@ -1062,7 +1080,6 @@ py-ruff: extends: .python-base stage: build script: - mkdir -p -m 777 reports - | if [[ ${BANDIT_ENABLED} == "true" || ${PYLINT_ENABLED} == "true" || ${PYTHON_ISORT_ENABLED} == "true" ]]; then log_warn "Ruff can replace isort, Bandit, Pylint" Loading Loading @@ -1095,7 +1112,6 @@ py-ruff-format: extends: .python-base stage: build script: - mkdir -p -m 777 reports - | if [[ ${PYTHON_BLACK_ENABLED} == "true" ]]; then log_warn "Ruff can replace Black" Loading @@ -1115,7 +1131,6 @@ py-mypy: variables: MYPY_CACHE_DIR: "$CI_PROJECT_DIR/.cache/mypy" script: - mkdir -p -m 777 reports - install_requirements - _pip install mypy mypy-to-codeclimate - _run mypy ${MYPY_ARGS} ${MYPY_FILES:-$(find -type f -name "*.py" -not -path "./.cache/*" -not -path "./.venv/*")} | tee reports/py-mypy.console.txt || true Loading @@ -1139,10 +1154,8 @@ py-mypy: # test stage # ############################################################################################### py-unittest: extends: .python-base stage: build extends: .python-test script: - mkdir -p -m 777 reports - install_requirements # code coverage - _pip install coverage Loading @@ -1151,20 +1164,6 @@ py-unittest: - _run coverage run -m xmlrunner discover -o "reports/" $UNITTEST_ARGS - _run coverage report -m - _run coverage xml -o "reports/py-coverage.cobertura.xml" coverage: /^TOTAL.+?(\d+\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" rules: # skip if $UNITTEST_ENABLED not set - if: '$UNITTEST_ENABLED != "true"' Loading @@ -1172,27 +1171,11 @@ py-unittest: - !reference [.test-policy, rules] py-pytest: extends: .python-base stage: build extends: .python-test script: - mkdir -p -m 777 reports - install_requirements - _pip install pytest pytest-cov coverage - _python -m pytest --junit-xml=reports/TEST-pytests.xml --cov --cov-report term --cov-report xml:reports/py-coverage.cobertura.xml ${PYTEST_ARGS} coverage: /^TOTAL.+?(\d+\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" rules: # skip if $PYTEST_ENABLED not set - if: '$PYTEST_ENABLED != "true"' Loading @@ -1200,26 +1183,10 @@ py-pytest: - !reference [.test-policy, rules] py-nosetests: extends: .python-base stage: build extends: .python-test script: - mkdir -p -m 777 reports - install_requirements - _run nosetests --with-xunit --xunit-file=reports/TEST-nosetests.xml --with-coverage --cover-erase --cover-xml --cover-xml-file=reports/py-coverage.cobertura.xml ${NOSETESTS_ARGS} coverage: /^TOTAL.+?(\d+\%)$/ artifacts: name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" expire_in: 1 day when: always reports: junit: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" coverage_report: coverage_format: cobertura path: "$PYTHON_PROJECT_DIR/reports/py-coverage.cobertura.xml" paths: - "$PYTHON_PROJECT_DIR/reports/TEST-*.xml" - "$PYTHON_PROJECT_DIR/reports/py-coverage.*" rules: # skip if $NOSETESTS_ENABLED not set - if: '$NOSETESTS_ENABLED != "true"' Loading @@ -1233,7 +1200,6 @@ py-bandit: # force no dependencies dependencies: [] script: - mkdir -p -m 777 reports - install_requirements - _pip install bandit # CSV (for SonarQube) Loading Loading @@ -1269,7 +1235,6 @@ py-trivy: # force no dependencies dependencies: [] script: - mkdir -p -m 777 reports - | if [[ -z "$PYTHON_TRIVY_DIST_URL" ]] then Loading Loading @@ -1348,7 +1313,6 @@ py-sbom: dependencies: [] needs: [] script: - mkdir -p -m 777 reports - | case "$PYTHON_BUILD_SYSTEM" in poetry*|pipenv*) Loading