Loading pipeline-templates/python-package.yml 0 → 100644 +101 −0 Original line number Diff line number Diff line workflow: rules: - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$$/ variables: PUSH_PACKAGE: "true" - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+/ - if: $CI_COMMIT_BRANCH .python-pkg: image: python:3.10 variables: PIP_CACHE_DIR: $CI_PROJECT_DIR/pip-cache PIP_NO_COMPILE: "true" PIP_NO_CLEAN: "true" cache: key: $CI_JOB_IMAGE paths: [pip-cache] Check Tag: stage: .pre extends: [.python-pkg] rules: - if: $CI_COMMIT_TAG script: - pip install packaging toml - | python <<-END import sys import toml from glob import glob from packaging.version import Version with open("pyproject.toml", "r+") as proj_config: proj = toml.load(proj_config) proj_config.seek(0) version = Version(proj["project"]["version"]) tag = Version("$CI_COMMIT_TAG") if version.base_version != str(version): sys.exit("Project version should be a release version") if tag == version: sys.exit(0) if tag.base_version == str(version): proj["project"]["version"] = str(tag) toml.dump(proj, proj_config) sys.exit(0) sys.exit(f"Versions do not match: {version} != {tag}") END artifacts: paths: [pyproject.toml] Build Packages: stage: build extends: [.python-pkg] needs: - job: "Check Tag" optional: true script: - pip install build - python -m build artifacts: paths: [dist] Upload Package (Test): stage: deploy extends: [.python-pkg] dependencies: ["Build Packages"] rules: - if: $CI_COMMIT_TAG script: - pip install twine - TWINE_USERNAME=gitlab-ci-token TWINE_PASSWORD=$CI_JOB_TOKEN twine upload --verbose --non-interactive --repository-url $CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/pypi dist/* Upload Package (PyPI): stage: deploy extends: [.python-pkg] dependencies: ["Build Packages"] rules: - if: $PYPI_TOKEN && $PUSH_PACKAGE when: manual script: - pip install twine - TWINE_USERNAME=__token__ TWINE_PASSWORD=$PYPI_TOKEN twine upload --verbose --non-interactive dist/* Loading
pipeline-templates/python-package.yml 0 → 100644 +101 −0 Original line number Diff line number Diff line workflow: rules: - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$$/ variables: PUSH_PACKAGE: "true" - if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+/ - if: $CI_COMMIT_BRANCH .python-pkg: image: python:3.10 variables: PIP_CACHE_DIR: $CI_PROJECT_DIR/pip-cache PIP_NO_COMPILE: "true" PIP_NO_CLEAN: "true" cache: key: $CI_JOB_IMAGE paths: [pip-cache] Check Tag: stage: .pre extends: [.python-pkg] rules: - if: $CI_COMMIT_TAG script: - pip install packaging toml - | python <<-END import sys import toml from glob import glob from packaging.version import Version with open("pyproject.toml", "r+") as proj_config: proj = toml.load(proj_config) proj_config.seek(0) version = Version(proj["project"]["version"]) tag = Version("$CI_COMMIT_TAG") if version.base_version != str(version): sys.exit("Project version should be a release version") if tag == version: sys.exit(0) if tag.base_version == str(version): proj["project"]["version"] = str(tag) toml.dump(proj, proj_config) sys.exit(0) sys.exit(f"Versions do not match: {version} != {tag}") END artifacts: paths: [pyproject.toml] Build Packages: stage: build extends: [.python-pkg] needs: - job: "Check Tag" optional: true script: - pip install build - python -m build artifacts: paths: [dist] Upload Package (Test): stage: deploy extends: [.python-pkg] dependencies: ["Build Packages"] rules: - if: $CI_COMMIT_TAG script: - pip install twine - TWINE_USERNAME=gitlab-ci-token TWINE_PASSWORD=$CI_JOB_TOKEN twine upload --verbose --non-interactive --repository-url $CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/pypi dist/* Upload Package (PyPI): stage: deploy extends: [.python-pkg] dependencies: ["Build Packages"] rules: - if: $PYPI_TOKEN && $PUSH_PACKAGE when: manual script: - pip install twine - TWINE_USERNAME=__token__ TWINE_PASSWORD=$PYPI_TOKEN twine upload --verbose --non-interactive dist/*