diff --git a/README.md b/README.md index 115ea641540d06e66c23747cc48161e61c0f8cf9..3d633b3c4e847484a28e11bdb68fdf00d5fd3eec 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This project implements a GitLab CI/CD template to build, test and analyse your ## Usage -This template can be used both as a [CI/CD component](https://docs.gitlab.com/ee/ci/components/#use-a-component-in-a-cicd-configuration) +This template can be used both as a [CI/CD component](https://docs.gitlab.com/ee/ci/components/#use-a-component-in-a-cicd-configuration) or using the legacy [`include:project`](https://docs.gitlab.com/ee/ci/yaml/index.html#includeproject) syntax. ### Use as a CI/CD component @@ -266,6 +266,23 @@ In addition to logs in the console, this job produces the following reports, kep | -------------- | ---------------------------------------------------------------------------- | ----------------- | | `$PYTHON_PROJECT_DIR/reports/py-sbom.cyclonedx.json` | [CycloneDX JSON](https://cyclonedx.org/docs/latest/json/) | [Security & Compliance integration](https://docs.gitlab.com/ee/ci/yaml/artifacts_reports.html#artifactsreportscyclonedx) | +### `py-black` job + +This job **disabled by default** and runs [black](https://black.readthedocs.io) on the repo. It is bound to the build stage. + +| Input / Variable | Description | Default value | +| ---------------- | ----------------------------------------------------------------------- | ----------------- | +| `black-enabled` / `PYTHON_BLACK_ENABLED` | Set to `true` to enable black job | _none_ (disabled) | + +### `py-isort` job + +This job **disabled by default** and runs [isort](https://pycqa.github.io/isort/) on the repo. It is bound to the build stage. + +| Input / Variable | Description | Default value | +| ---------------- | ----------------------------------------------------------------------- | ----------------- | +| `isort-enabled` / `PYTHON_ISORT_ENABLED` | Set to `true` to enable isort job | _none_ (disabled) | + + ### SonarQube analysis If you're using the SonarQube template to analyse your Python code, here is a sample `sonar-project.properties` file: @@ -413,7 +430,6 @@ variables: PIP_EXTRA_INDEX_URL: "${CI_SERVER_PROTOCOL}://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/api/v4/groups/<group-id>/-/packages/pypi/simple" ``` - ## Variants The Python template can be used in conjunction with template variants to cover specific cases. diff --git a/kicker.json b/kicker.json index 95cade1954ec8d88642fa64ff49ad34760e2c75b..8ec4b4564901eca6193f79a01d99416f03bb3275 100644 --- a/kicker.json +++ b/kicker.json @@ -240,6 +240,18 @@ "default": "$CI_JOB_TOKEN" } ] + }, + { + "id": "black", + "name": "black", + "description": "Code formatting based on [black](https://black.readthedocs.io)", + "enable_with": "PYTHON_BLACK_ENABLED" + }, + { + "id": "isort", + "name": "isort", + "description": "Check imports order with [isort](https://pycqa.github.io/isort)", + "enable_with": "PYTHON_ISORT_ENABLED" } ], "variants": [ diff --git a/templates/gitlab-ci-python.yml b/templates/gitlab-ci-python.yml index d802ddae7dfefd0fcf5af3b53633e736e4d17f78..680bd42bb216b51f9f6684aecf8c166794a35c6f 100644 --- a/templates/gitlab-ci-python.yml +++ b/templates/gitlab-ci-python.yml @@ -147,6 +147,14 @@ spec: _defaults to [GitLab project's packages repository](https://docs.gitlab.com/ee/user/packages/pypi_repository/)_ default: ${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/packages/pypi + black-enabled: + description: Enable black + type: boolean + default: false + isort-enabled: + description: Enable isort + type: boolean + default: false --- # default workflow rules: Merge Request pipelines workflow: @@ -260,6 +268,9 @@ variables: PYTHON_SBOM_DISABLED: $[[ inputs.sbom-disabled ]] PYTHON_RELEASE_ENABLED: $[[ inputs.release-enabled ]] + PYTHON_BLACK_ENABLED: $[[ inputs.black-enabled ]] + PYTHON_ISORT_ENABLED: $[[ inputs.isort-enabled ]] + .python-scripts: &python-scripts | # BEGSCRIPT @@ -860,6 +871,32 @@ py-compile: when: never - !reference [.test-policy, rules] +py-black: + extends: .python-base + stage: build + script: + - install_requirements + - _pip install black + - _run black . --check + rules: + # exclude if $PYTHON_BLACK_ENABLED not set + - if: '$PYTHON_BLACK_ENABLED != "true"' + when: never + - !reference [.test-policy, rules] + +py-isort: + extends: .python-base + stage: build + script: + - install_requirements + - _pip install isort + - _run isort . --check-only + rules: + # exclude if $PYTHON_ISORT_ENABLED not set + - if: '$PYTHON_ISORT_ENABLED != "true"' + when: never + - !reference [.test-policy, rules] + ############################################################################################### # test stage # ###############################################################################################