--- image: python:latest before_script: - python -V # Print out python version for debugging stages: - test - build .cache_python: variables: FF_USE_FASTZIP: 1 # enable faster caching/artifacting PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" cache: key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" paths: # cache the venv and pip cache (you may opt to use just 1 of these) - $PIP_CACHE_DIR .test: stage: test script: - python -m venv venv - source venv/bin/activate - pip install pytest-cov - py.test -q --cov=musicpd test.py rules: - changes: - musicpd.py - test.py - if: $CI_PIPELINE_SOURCE == "schedule" test-py3.12: extends: - .cache_python - .test image: "python:3.12" test-py3.11: extends: - .cache_python - .test image: "python:3.11" test-py3.10: extends: - .cache_python - .test image: "python:3.10" coverage: '/musicpd.py\s+\d+\s+\d+\s+(\d+)%/' test-py3.9: extends: - .cache_python - .test image: "python:3.9" test-py3.8: extends: - .cache_python - .test image: "python:3.8" test-py3.7: extends: - .cache_python - .test image: "python:3.7" test-py3.6: extends: - .cache_python - .test image: "python:3.6" build: stage: build extends: - .cache_python script: - python -m venv venv - source venv/bin/activate - pip install build # packaging test - python3 -m build -s -w - pip install dist/*.whl - pip install twine - twine check dist/* artifacts: expire_in: 1 week paths: - dist/*.* rules: - if: $CI_PIPELINE_SOURCE == "push" changes: - .gitlab-ci.yml - musicpd.py - test.py - MANIFEST.in - pyproject.toml - if: $CI_PIPELINE_SOURCE == "schedule" tag_release: stage: build extends: - .cache_python script: - python -m venv venv - source venv/bin/activate - pip install build - python3 -m build -s -w artifacts: paths: - dist/*.* name: "$CI_PROJECT_NAME-$CI_COMMIT_TAG" rules: - if: $CI_COMMIT_TAG # Documentation build_doc: stage: build script: - pip install sphinx sphinx_rtd_theme - sphinx-build doc/source -b html ./html -D html_theme=sphinx_rtd_theme -E -W -n --keep-going rules: - if: $CI_PIPELINE_SOURCE == "push" changes: - doc/source/* - if: $CI_PIPELINE_SOURCE == "schedule" pages: stage: build script: - pip install sphinx sphinx_rtd_theme - sphinx-build -d ./build/doctrees doc/source -b html ./public -D html_theme=sphinx_rtd_theme artifacts: paths: - public rules: - if: $CI_COMMIT_BRANCH == "master"