diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 000000000..25051eaff
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,40 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ build:
+ if: github.repository == 'jazzband/django-oauth-toolkit'
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.8
+
+ - name: Install dependencies
+ run: |
+ python -m pip install -U pip
+ python -m pip install -U setuptools twine wheel
+
+ - name: Build package
+ run: |
+ python setup.py --version
+ python setup.py sdist --format=gztar bdist_wheel
+ twine check dist/*
+
+ - name: Upload packages to Jazzband
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
+ uses: pypa/gh-action-pypi-publish@master
+ with:
+ user: jazzband
+ password: ${{ secrets.JAZZBAND_RELEASE_KEY }}
+ repository_url: https://jazzband.co/projects/django-oauth-toolkit/upload
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 000000000..e659cf70d
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,49 @@
+name: Test
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ max-parallel: 5
+ matrix:
+ python-version: ['3.5' ,'3.6', '3.7', '3.8', '3.9']
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v2
+ with:
+ python-version: ${{ matrix.python-version }}
+
+
+ - name: Get pip cache dir
+ id: pip-cache
+ run: |
+ echo "::set-output name=dir::$(pip cache dir)"
+
+ - name: Cache
+ uses: actions/cache@v2
+ with:
+ path: ${{ steps.pip-cache.outputs.dir }}
+ key:
+ ${{ matrix.python-version }}-v1-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/tox.ini') }}
+ restore-keys: |
+ ${{ matrix.python-version }}-v1-
+
+ - name: Install Python dependencies
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install --upgrade tox tox-gh-actions
+
+ - name: Tox tests
+ run: |
+ tox -v
+
+ - name: Upload coverage
+ uses: codecov/codecov-action@v1
+ with:
+ name: Python ${{ matrix.python-version }}
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1505d8cf3..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,67 +0,0 @@
-# https://travis-ci.org/jazzband/django-oauth-toolkit
-dist: bionic
-
-language: python
-
-cache:
- directories:
- - $HOME/.cache/pip
- - $TRAVIS_BUILD_DIR/.tox
-
-# Make sure to coordinate changes to envlist in tox.ini.
-matrix:
- allow_failures:
- - env: TOXENV=py36-djangomaster
- - env: TOXENV=py37-djangomaster
- - env: TOXENV=py38-djangomaster
- - env: TOXENV=py39-djangomaster
-
- include:
- - python: 3.7
- env: TOXENV=py37-flake8
- - python: 3.7
- env: TOXENV=py37-docs
-
- - python: 3.9
- env: TOXENV=py39-djangomaster
- - python: 3.9
- env: TOXENV=py39-django30
- - python: 3.9
- env: TOXENV=py39-django22
-
- - python: 3.8
- env: TOXENV=py38-django31
- - python: 3.8
- env: TOXENV=py38-django30
- - python: 3.8
- env: TOXENV=py38-django22
- - python: 3.8
- env: TOXENV=py38-djangomaster
-
- - python: 3.7
- env: TOXENV=py37-django31
- - python: 3.7
- env: TOXENV=py37-django30
- - python: 3.7
- env: TOXENV=py37-django22
- - python: 3.7
- env: TOXENV=py37-djangomaster
-
- - python: 3.6
- env: TOXENV=py36-django31
- - python: 3.6
- env: TOXENV=py36-django30
- - python: 3.6
- env: TOXENV=py36-django22
-
- - python: 3.5
- env: TOXENV=py35-django22
-
-install:
- - pip install coveralls tox tox-travis
-
-script:
- - tox
-
-after_script:
- - coveralls
diff --git a/README.rst b/README.rst
index 1a5adcd06..b90d7b2e3 100644
--- a/README.rst
+++ b/README.rst
@@ -10,14 +10,13 @@ Django OAuth Toolkit
.. image:: https://badge.fury.io/py/django-oauth-toolkit.png
:target: http://badge.fury.io/py/django-oauth-toolkit
-.. image:: https://travis-ci.org/jazzband/django-oauth-toolkit.png
- :alt: Build Status
- :target: https://travis-ci.org/jazzband/django-oauth-toolkit
-
-.. image:: https://coveralls.io/repos/github/jazzband/django-oauth-toolkit/badge.svg?branch=master
- :alt: Coverage Status
- :target: https://coveralls.io/github/jazzband/django-oauth-toolkit?branch=master
+.. image:: https://github.com/jazzband/django-oauth-toolkit/workflows/Test/badge.svg
+ :target: https://github.com/jazzband/django-oauth-toolkit/actions
+ :alt: GitHub Actions
+.. image:: https://codecov.io/gh/jazzband/django-oauth-toolkit/branch/master/graph/badge.svg
+ :target: https://codecov.io/gh/jazzband/django-oauth-toolkit
+ :alt: Coverage
If you are facing one or more of the following:
* Your Django app exposes a web API you want to protect with OAuth2 authentication,
diff --git a/docs/contributing.rst b/docs/contributing.rst
index 39ed1a427..45f0c3765 100644
--- a/docs/contributing.rst
+++ b/docs/contributing.rst
@@ -84,7 +84,7 @@ When you begin your PR, you'll be asked to provide the following:
* Any new or changed code requires that a unit test be added or updated. Make sure your tests check for
correct error behavior as well as normal expected behavior. Strive for 100% code coverage of any new
code you contribute! Improving unit tests is always a welcome contribution.
- If your change reduces coverage, you'll be warned by `coveralls `_.
+ If your change reduces coverage, you'll be warned by `Codecov `_.
* Update the documentation (in `docs/`) to describe the new or changed functionality.
@@ -190,7 +190,7 @@ You can check your coverage locally with the `coverage =2.2,<3
- django30: Django>=3.0,<3.1
- django31: Django>=3.1,<3.2
- djangomaster: https://github.com/django/django/archive/master.tar.gz
- djangorestframework
- oauthlib>=3.1.0
- coverage
- pytest
- pytest-cov
- pytest-django
- pytest-xdist
- py27: mock
- requests
+ dj22: Django>=2.2,<3
+ dj30: Django>=3.0,<3.1
+ dj31: Django>=3.1,<3.2
+ djmaster: https://github.com/django/django/archive/master.tar.gz
+ djangorestframework
+ oauthlib>=3.1.0
+ coverage
+ pytest
+ pytest-cov
+ pytest-django
+ pytest-xdist
+ requests
passenv =
PYTEST_ADDOPTS
-[testenv:py37-docs]
-basepython = python
+[testenv:py{36,37,38,39}-djmaster]
+ignore_errors = true
+ignore_outcome = true
+
+[testenv:docs]
+basepython = python3.8
changedir = docs
whitelist_externals = make
commands = make html
deps =
- sphinx<3
- oauthlib>=3.1.0
- m2r>=0.2.1
+ sphinx<3
+ oauthlib>=3.1.0
+ m2r>=0.2.1
-[testenv:py37-flake8]
+[testenv:flake8]
+basepython = python3.8
skip_install = True
-commands =
- flake8 {toxinidir}
+commands = flake8 {toxinidir}
deps =
- flake8
- flake8-isort
- flake8-quotes
- flake8-black
+ flake8
+ flake8-isort
+ flake8-quotes
+ flake8-black
[testenv:install]
deps =
- twine
- setuptools>=39.0
- wheel
-whitelist_externals=
- rm
+ twine
+ setuptools>=39.0
+ wheel
+whitelist_externals = rm
commands =
- rm -rf dist
- python setup.py sdist bdist_wheel
- twine upload dist/*
+ rm -rf dist
+ python setup.py sdist bdist_wheel
+ twine upload dist/*
[coverage:run]