image: python:3.10 stages: - build - linter - tests - deploy variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" # Trigger only if python file changes .py_changes: &py_changes only: refs: - merge_requests - branches - tags changes: - .gitlab-ci.yml - "**/*.py" .poetry: &poetry <<: *py_changes before_script: - python -m pip install poetry>=1.7 - poetry config virtualenvs.in-project true - poetry install # Build Poetry install: stage: build <<: *poetry script: - poetry version # Linter Ruff check: stage: linter <<: *poetry script: - poetry run ruff check . Ruff format: stage: linter <<: *poetry script: - poetry run ruff format # Tests Pytest: stage: tests <<: *poetry script: - poetry run pytest --cov-report xml:coverage.xml --junitxml=report.xml coverage: '/^TOTAL\s+\d+\s+\d+\s+(\d+\%)$/' artifacts: expire_in: 1 day reports: junit: report.xml coverage_report: coverage_format: cobertura path: coverage.xml # Deployment Deploy2PyPI: stage: deploy cache: {} rules: - if: '$CI_COMMIT_TAG =~ /^(v|V)?(\d+)(\.\d+)+?$/ && $PYPI_TOKEN' variables: POETRY_PYPI_TOKEN_PYPI: $PYPI_TOKEN before_script: - python -m pip install poetry>=1.7 script: - poetry publish --build environment: name: PyPI url: https://pypi.org/project/glicid-spawner/ Deploy2SWH: stage: deploy cache: {} rules: - if: '$CI_COMMIT_TAG =~ /^(v|V)?(\d+)(\.\d+)+?$/' script: - curl -X POST https://archive.softwareheritage.org/api/1/origin/save/git/url/${CI_PROJECT_URL}/ environment: name: Software Heritage url: https://archive.softwareheritage.org/browse/origin/?origin_url=${CI_PROJECT_URL}