93 lines
1.8 KiB
YAML
93 lines
1.8 KiB
YAML
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}
|