stages:
  - test
  - build

stress_test:
  stage: test
  services:
    - name: rabbitmq:3-management
      alias: rabbitmq
  before_script:
    - python setup.py install
    - coverage run --append -m compile_definitions
  script:
    - coverage run --append -m stress_tests
    - COOLAMQP_FORCE_SELECT_LISTENER=1 coverage run --append -m stress_tests
  after_script:
    - mv .coverage .coverage.stress
  artifacts:
    paths:
      - ".coverage.stress"

unittest:
  stage: test
  image: python:3.11
  services:
    - name: rabbitmq:3-management
      alias: rabbitmq
  before_script:
    - python setup.py install
    - pip install --break-system-packages nose2 coverage
    - coverage run --append -m compile_definitions
  script:
    - coverage run --append -m nose2 -F -vv
  after_script:
    - mv .coverage .coverage.units
  artifacts:
    paths:
      - ".coverage.units"


calc_coverage:
  stage: build
  dependencies:
    - unittest
    - stress_test
  script:
    - coverage combine
    - coverage xml
    - coverage report
  coverage: /TOTAL.*\s+(\d+\%)/


pages:
  image: zoo.smok.co/build/build:latest
  stage: build
  script:
    - cd docs
    - make html
    - cd ..
    - mv docs/_build/html public
  artifacts:
    paths:
      - public


build_python:
  stage: build
  before_script:
    - pip install --break-system-packages --upgrade setuptools pip twine
  script:
    - python setup.py bdist_wheel
    - mv dist/*.whl .
  artifacts:
    paths:
      - "*.whl"
  after_script:
    - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python3 -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi *.whl
  only:
    - tags
  except:
    - branches