# Uncomment if you want to use docker-in-docker
# image: gsiupm/dockermake:latest
# services:
# - docker:dind
# When using dind, it's wise to use the overlayfs driver for
# improved performance.

stages:
  - test
  - push
  - deploy
  - clean

before_script:
  - make -e login

.test: &test_definition
  stage: test
  script:
    - make -e test-$PYTHON_VERSION
  except:
    - tags # Avoid unnecessary double testing
    
test-3.6:
  <<: *test_definition
  variables:
    PYTHON_VERSION: "3.6"

test-3.7:
  <<: *test_definition
  allow_failure: true
  variables:
    PYTHON_VERSION: "3.7"

push:
  stage: push
  script:
    - make -e push
  only:
    - tags
    - triggers
    - fix-makefiles

push-latest:
  stage: push
  script:
    - make -e push-latest
  only:
    - master
    - triggers
    - fix-makefiles

push-github:
  stage: deploy
  script:
    - make -e push-github
  only:
    - master
    - triggers
    - fix-makefiles

deploy_pypi:
  stage: deploy
  script:   # Configure the PyPI credentials, then push the package, and cleanup the creds.
    - echo "[server-login]" >> ~/.pypirc
    - echo "repository=https://upload.pypi.org/legacy/" >> ~/.pypirc
    - echo "username=" ${PYPI_USER} >> ~/.pypirc
    - echo "password=" ${PYPI_PASSWORD} >> ~/.pypirc
    - make pip_upload
    - echo "" > ~/.pypirc && rm ~/.pypirc  # If the above fails, this won't run.
  only:
    - /^v?\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
  except:
    - branches

deploy:
  stage: deploy
  environment: test
  script:
    - make -e deploy
  only:
    - master
    - fix-makefiles

push-github:
  stage: deploy
  script:
    - make -e push-github
  only:
    - master
    - triggers

clean :
  stage: clean
  script:
    - make -e clean
  when: manual

cleanup_py:
   stage: clean
   when: always   # this is important; run even if preceding stages failed.
   script:
    - rm -vf ~/.pypirc  # we don't want to leave these around, but GitLab may clean up anyway.
