From f82b1dc35906f4374e545ee2c06bb38562a26584 Mon Sep 17 00:00:00 2001 From: Parth Shandilya Date: Wed, 2 Dec 2020 09:41:35 +0100 Subject: [PATCH] global: migrate CI to GH Actions closes #93 --- .editorconfig | 4 +- .github/workflows/pypi-release.yml | 37 +++++++++++++++ .github/workflows/tests.yml | 72 ++++++++++++++++++++++++++++++ .travis.yml | 69 ---------------------------- CONTRIBUTING.rst | 4 +- MANIFEST.in | 1 + README.rst | 4 +- pytest.ini | 2 +- run-tests.sh | 18 ++++++-- setup.py | 10 +---- 10 files changed, 133 insertions(+), 88 deletions(-) create mode 100644 .github/workflows/pypi-release.yml create mode 100644 .github/workflows/tests.yml delete mode 100644 .travis.yml diff --git a/.editorconfig b/.editorconfig index bbc3937..13466b8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -34,8 +34,8 @@ indent_size = 4 [*.{css,html,js,json,yml}] indent_size = 2 -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] +# Matches the exact files either package.json or .github/workflows/*.yml +[{package.json,.github/workflows/*.yml}] indent_size = 2 # Dockerfile diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml new file mode 100644 index 0000000..0fb5393 --- /dev/null +++ b/.github/workflows/pypi-release.yml @@ -0,0 +1,37 @@ +name: Publish + +on: + push: + tags: + - v* + +jobs: + Publish: + + runs-on: ubuntu-20.04 + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.7 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install setuptools wheel + + - name: Build package + # Remove `compile_catalog` if the package has no translations. + run: | + python setup.py compile_catalog sdist bdist_wheel + + - name: Publish on PyPI + uses: pypa/gh-action-pypi-publish@v1.3.1 + with: + user: __token__ + # The token is provided by the inveniosoftware organization + password: ${{ secrets.pypi_token }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..58fa0a3 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,72 @@ +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] + + exclude: + - python-version: 3.8 + requirements-level: min + + include: + - db-service: postgresql9 + DB: postgresql + POSTGRESQL_VERSION: POSTGRESQL_9_LATEST + SQLALCHEMY_DATABASE_URI: "postgresql+psycopg2://invenio:invenio@localhost:5432/invenio" + EXTRAS: "all,postgresql" + + env: + SQLALCHEMY_DATABASE_URI: ${{matrix.SQLALCHEMY_DATABASE_URI}} + POSTGRESQL_VERSION: ${{matrix.POSTGRESQL_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: | + pip uninstall -y six + 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/.travis.yml b/.travis.yml deleted file mode 100644 index cd0a267..0000000 --- a/.travis.yml +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# -# This file is part of Invenio. -# Copyright (C) 2015-2018 CERN. -# -# 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. - -addons: - postgresql: 9.4 - -notifications: - email: false - -language: python - -matrix: - fast_finish: true - allow_failures: - - env: REQUIREMENTS=devel SQLALCHEMY_DATABASE_URI="postgresql+psycopg2://postgres@localhost:5432/invenio" - -cache: - - pip - -services: - - postgresql - - redis - -env: - - REQUIREMENTS=lowest SQLALCHEMY_DATABASE_URI="postgresql+psycopg2://postgres@localhost:5432/invenio" - - REQUIREMENTS=release SQLALCHEMY_DATABASE_URI="postgresql+psycopg2://postgres@localhost:5432/invenio" DEPLOY=true - - REQUIREMENTS=devel SQLALCHEMY_DATABASE_URI="postgresql+psycopg2://postgres@localhost:5432/invenio" - -python: - - "3.6" - - "3.7" - -before_install: - - "pip uninstall -y six" - - "nvm install 6; nvm use 6" - - "travis_retry pip install --upgrade pip setuptools py" - - "travis_retry pip install twine wheel coveralls requirements-builder" - - "requirements-builder --level=min setup.py > .travis-lowest-requirements.txt" - - "requirements-builder --level=pypi setup.py > .travis-release-requirements.txt" - - "requirements-builder --level=dev --req requirements-devel.txt setup.py > .travis-devel-requirements.txt" - - "psql -c 'CREATE DATABASE invenio;' -U postgres" - -install: - - "travis_retry pip install -r .travis-${REQUIREMENTS}-requirements.txt" - - "travis_retry pip install -e .[all]" - -script: - - "./run-tests.sh" - -after_success: - - coveralls - -deploy: - provider: pypi - user: inveniosoftware - password: - secure: "XMDOpWARuHXAqJmQoFU4sJF1iNwlgJs8MI48fN2UeiqYRIWAV6kJG/hB6mVLVuWxwpEm7K4wtL97HTzLpzGtDwk2zxgMIc0dm8R0N6+rcXvnc0Rs3X1A0dOJIofrIe21yai6yqtF1zPDtMsg5DirJNF37+UzZ9mgx8jplRvKIGQIHtgxkQJX/IWonvFhsSD5DKZFixy7yrukxRpXxzT0XpejTu8yWTtEdl95ruMT5xTi9nnuy9NjmfW4A/mSvcjc/JttnhcAQX0VhewkRGHY4DzQooPs4zoFmwK8OTzWDpowskNqnH/+d8ianji2Ra6OqZF3rGb2BPoWoUEywVjzoUAM6Y7jDhlubJyrGj/ZQLmAFkorkQsr5CyLD4pTz1oHJ1O2LTRe/xrnM3iF4nvrnYCwgasu/Jbso94UMxR+DPVfx3WjFSgHrbRr4oXweVQ0Lp9/gsYeAo4HD4LGRa7w7RhcIwPhPxVfufhqJ3jGDeDAMnNaeuQp3JI4JPEOq5SBEPR7XxEAIySe9wjCgmecS3YT/tU4dBJAoIZDc37U44RNetkgwaah0aZZ/e5UILg0oPW2Xy4GQopLelGOVePqLNPdwhiCFffy5MkCzz6Ubk0yZzDOI9anWZSCZaNilUMo7ZjJHzOR/3RveBgPbebAfHS/p9UyrK0uCVO/GxhBmJE=" - distributions: "compile_catalog sdist bdist_wheel" - skip_existing: true - on: - tags: true - python: "3.6" - repo: inveniosoftware/invenio-records-ui - condition: $DEPLOY = true diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 64d50ad..278c9f5 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -120,6 +120,6 @@ Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests and must not decrease test coverage. 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring. -3. The pull request should work for Python 2.7, 3.5 and 3.6. Check - https://travis-ci.org/inveniosoftware/invenio-records-ui/pull_requests +3. The pull request should work for Python 3.6, 3.7 and 3.8. Check + https://github.com/inveniosoftware/invenio-records-ui/actions?query=event%3Apull_request and make sure that the tests pass for all supported Python versions. diff --git a/MANIFEST.in b/MANIFEST.in index 4ea5600..8967fde 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -24,6 +24,7 @@ recursive-include docs Makefile recursive-include examples *.py recursive-include examples *.sh recursive-include examples *.txt +recursive-include .github/workflows *.yml recursive-include invenio_records_ui *.html recursive-include invenio_records_ui *.po *.pot *.mo recursive-include tests *.py diff --git a/README.rst b/README.rst index 691347c..232c27d 100644 --- a/README.rst +++ b/README.rst @@ -12,8 +12,8 @@ .. image:: https://img.shields.io/github/license/inveniosoftware/invenio-records-ui.svg :target: https://github.com/inveniosoftware/invenio-records-ui/blob/master/LICENSE -.. image:: https://img.shields.io/travis/inveniosoftware/invenio-records-ui.svg - :target: https://travis-ci.org/inveniosoftware/invenio-records-ui +.. image:: https://github.com/inveniosoftware/invenio-records-ui/workflows/CI/badge.svg + :target: https://github.com/inveniosoftware/invenio-records-ui/actions .. image:: https://img.shields.io/coveralls/inveniosoftware/invenio-records-ui.svg :target: https://coveralls.io/r/inveniosoftware/invenio-records-ui diff --git a/pytest.ini b/pytest.ini index 0ee1509..02e33d8 100644 --- a/pytest.ini +++ b/pytest.ini @@ -8,6 +8,6 @@ [pytest] pep8ignore = docs/conf.py ALL -addopts = --pep8 --doctest-glob="*.rst" --doctest-modules --cov=invenio_records_ui --cov-report=term-missing +addopts = --isort --pydocstyle --pycodestyle --doctest-glob="*.rst" --doctest-modules --cov=invenio_records_ui --cov-report=term-missing tests invenio_records_ui testpaths = docs tests invenio_records_ui filterwarnings = ignore::pytest.PytestDeprecationWarning diff --git a/run-tests.sh b/run-tests.sh index c749b9c..23b307d 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -7,8 +7,18 @@ # 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. -pydocstyle invenio_records_ui tests docs && \ -isort invenio_records_ui tests --check-only --diff && \ -check-manifest --ignore ".travis-*" && \ -sphinx-build -qnNW docs docs/_build/html && \ +# Quit on errors +set -o errexit + +# Quit on unbound symbols +set -o nounset + +pydocstyle invenio_records_ui tests docs +isort invenio_records_ui tests --check-only --diff +check-manifest --ignore ".*-requirements.txt" +sphinx-build -qnNW docs docs/_build/html +docker-services-cli up ${DB} python setup.py test +tests_exit_code=$? +docker-services-cli down +exit "$tests_exit_code" diff --git a/setup.py b/setup.py index 80ad648..70d1d8c 100644 --- a/setup.py +++ b/setup.py @@ -16,16 +16,10 @@ history = open('CHANGES.rst').read() tests_require = [ - 'check-manifest>=0.25', - 'coverage>=4.0', 'invenio-access>=1.0.0', - 'invenio-accounts>=1.2.0', + 'invenio-accounts>=1.2.2', 'invenio-db[versioning,mysql,postgresql]>=1.0.0', - 'isort>=4.2.2', - 'pydocstyle>=1.0.0', - 'pytest-cov>=1.8.0', - 'pytest-pep8>=1.0.6', - 'pytest>=2.8.0', + 'pytest-invenio>=1.4.0', ] extras_require = {