From 8a897c6fa0e9a6d1a60c925ecfe59942db40a199 Mon Sep 17 00:00:00 2001 From: Parth Shandilya Date: Tue, 1 Dec 2020 15:00:31 +0100 Subject: [PATCH] global: migrate CI to GH Actions closes #219 --- .github/workflows/tests.yml | 96 +++++++++++++++++++++++++++++++++++++ run-tests.sh | 15 ++++-- 2 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..e7a00123 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,96 @@ +name: CI + +on: + push: + branches: master + pull_request: + branches: master + schedule: + # * is a special character in YAML so you have to quote this string + - cron: '0 3 * * 6' + workflow_dispatch: + inputs: + reason: + description: 'Reason' + required: false + default: 'Manual trigger' + +jobs: + Tests: + runs-on: ubuntu-20.04 + strategy: + matrix: + python-version: [3.6, 3.7, 3.8] + requirements-level: [min, pypi] + db-service: [postgresql9, postgresql11, mysql5, mysql8] + + exclude: + - python-version: 3.8 + requirements-level: min + + - db-service: postgresql11 + python-version: 3.6 + + - db-service: mysql8 + python-version: 3.6 + + include: + - db-service: postgresql9 + DB: postgresql + POSTGRESQL_VERSION: POSTGRESQL_9_LATEST + SQLALCHEMY_DATABASE_URI: "postgresql+psycopg2://invenio:invenio@localhost:5432/invenio" + EXTRAS: "all,postgresql" + + - db-service: postgresql11 + DB: postgresql + POSTGRESQL_VERSION: POSTGRESQL_11_LATEST + SQLALCHEMY_DATABASE_URI: "postgresql+psycopg2://invenio:invenio@localhost:5432/invenio" + EXTRAS: "all,postgresql" + + - db-service: mysql5 + DB: mysql + MYSQL_VERSION: MYSQL_5_LATEST + SQLALCHEMY_DATABASE_URI: "mysql+pymysql://invenio:invenio@localhost:3306/invenio" + EXTRAS: "all,mysql" + + - db-service: mysql8 + DB: mysql + MYSQL_VERSION: MYSQL_8_LATEST + SQLALCHEMY_DATABASE_URI: "mysql+pymysql://invenio:invenio@localhost:3306/invenio" + EXTRAS: "all,mysql" + + env: + SQLALCHEMY_DATABASE_URI: ${{matrix.SQLALCHEMY_DATABASE_URI}} + POSTGRESQL_VERSION: ${{matrix.POSTGRESQL_VERSION}} + MYSQL_VERSION: ${{matrix.MYSQL_VERSION}} + DB: ${{ matrix.DB }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Generate dependencies + run: | + python -m pip install --upgrade pip setuptools py wheel requirements-builder + requirements-builder -e ${{ matrix.EXTRAS }} ${{ matrix.requirements-file }} --level=${{ matrix.requirements-level }} setup.py > .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt + + - name: Cache pip + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('.${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt') }} + + - name: Install dependencies + run: | + pip install -r .${{matrix.requirements-level}}-${{ matrix.python-version }}-requirements.txt + pip install .[${{ matrix.EXTRAS }}] + pip freeze + + - name: Run tests + run: | + ./run-tests.sh diff --git a/run-tests.sh b/run-tests.sh index c3ad65e1..0a0820c1 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -6,10 +6,15 @@ # Invenio is free software; you can redistribute it and/or modify it # under the terms of the MIT License; see LICENSE file for more details. +# Quit on errors +set -o errexit -pydocstyle invenio_oauth2server && \ -isort -rc -c -df **/*.py && \ -check-manifest --ignore ".travis-*" && \ -sphinx-build -qnNW docs docs/_build/html && \ -python setup.py test && \ +# Quit on unbound symbols +set -o nounset + +pydocstyle invenio_oauth2server +isort -rc -c -df **/*.py +check-manifest --ignore ".travis-*" +sphinx-build -qnNW docs docs/_build/html +python setup.py test sphinx-build -qnNW -b doctest docs docs/_build/doctest