diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..264f8f2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +name: Tests and PyPI publishing + +on: + push: + branches: + - main + tags: + - '*' + pull_request: + workflow_dispatch: + +jobs: + tests: + name: Run tests Python ${{ matrix.python }}, Django ${{ matrix.django }}) + runs-on: ubuntu-latest + strategy: + matrix: + python: ['3.8', '3.9', '3.10', '3.11'] + django: ['3.2', '4.1', '4.2'] + exclude: + - python: '3.11' + django: '3.2' + + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python }} + + - name: Install dependencies + run: pip install tox tox-gh-actions + + - name: Run tests + run: tox + env: + PYTHON_VERSION: ${{ matrix.python }} + DJANGO: ${{ matrix.django }} + + - name: Publish coverage report + uses: codecov/codecov-action@v3 + + type-checks: + name: Run type checks on Python ${{ matrix.python }} + runs-on: ubuntu-latest + strategy: + matrix: + python: ['3.8', '3.9', '3.10', '3.11'] + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python }} + + - name: Install dependencies + run: pip install tox tox-gh-actions + + - name: Run checks + run: tox + env: + TYPE_CHECKING: 'true' + + publish: + name: Publish package to PyPI + runs-on: ubuntu-latest + needs: + - tests + - type-checks + + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Build sdist and wheel + run: | + pip install pip setuptools wheel --upgrade + python setup.py sdist bdist_wheel + + - name: Publish a Python distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_TOKEN }} + \ No newline at end of file diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml new file mode 100644 index 0000000..626246d --- /dev/null +++ b/.github/workflows/code-quality.yml @@ -0,0 +1,38 @@ +name: Linting and code quality + +on: + push: + branches: + - main + tags: + paths: + - '**.py' + - .github/workflows/code_quality.yml + pull_request: + paths: + - '**.py' + - .github/workflows/code_quality.yml + workflow_dispatch: + +jobs: + linting: + name: Code-quality checks + runs-on: ubuntu-latest + strategy: + matrix: + toxenv: + - isort + - black + - flake8 + - docs + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install dependencies + run: pip install tox + - run: tox + env: + TOXENV: ${{ matrix.toxenv }} + \ No newline at end of file diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml deleted file mode 100644 index 1b287a4..0000000 --- a/.github/workflows/tests.yaml +++ /dev/null @@ -1,51 +0,0 @@ -name: CI Testing -on: - pull_request: - branches: - - master - push: - branches: - - master - -jobs: - test: - name: "Python ${{ matrix.python }} Django ${{ matrix.django }}" - runs-on: ubuntu-latest - strategy: - # max-parallel: 8 # default is max available - fail-fast: false - matrix: - include: - # Django 2.2 - - django: "2.2" - python: "3.6" - # Django 3.1 - - django: "3.1" - python: "3.6" - # Django 3.2 - - django: "3.2" - python: "3.6" - # Django 4.0 - - django: "4.0b1" - python: "3.10" - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Setup Python ${{ matrix.python }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python }} - - - name: Install Packages - run: | - python -m pip install -U pip - python -m pip install "Django~=${{ matrix.django }}" codecov -e .[tests] - - - name: Run Tests - run: | - echo "Python ${{ matrix.python }} / Django ${{ matrix.django }}" - coverage run --rcfile=.coveragerc runtests.py - codecov - continue-on-error: ${{ contains(matrix.django, '4.0') }} diff --git a/setup.py b/setup.py index e93f121..1d8f610 100755 --- a/setup.py +++ b/setup.py @@ -38,17 +38,17 @@ def find_version(*parts): "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", - "Framework :: Django :: 1.6", - "Framework :: Django :: 1.7", - "Framework :: Django :: 1.8", - "Framework :: Django :: 1.9", + "Framework :: Django :: 3.2", + "Framework :: Django :: 4.1", + "Framework :: Django :: 4.2", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules", ], diff --git a/tox.ini b/tox.ini index 43e0557..f75c4ba 100644 --- a/tox.ini +++ b/tox.ini @@ -1,30 +1,22 @@ [tox] envlist= - py27-django{16,17,18,19,110,111}, - py33-django{16,17} - py35-django{18,19,110,111,20}, - py36-django{111,20} - # py33-django-dev, + py{38,39,310,311}-dj{32,41,42}-docs, + py{38,39,310,311}-dj{32,41,42}-docs, coverage, - docs, [testenv] deps = - django16: Django >= 1.6,<1.7 - django17: Django >= 1.7,<1.8 - django18: Django >= 1.8,<1.9 - django19: Django >= 1.9,<1.10 - django110: Django >= 1.10,<1.11 - django111: Django >= 1.11,<2.0 - django20: Django >= 2.0,<2.1 - django-dev: https://github.com/django/django/tarball/master + dj32: Django~=3.2.0 + dj41: Django~=4.1.0 + dj42: Django~=4.2.0 commands= + pip install django python runtests.py [testenv:coverage] -basepython=python3.3 +basepython=python3.8 deps= - django==1.9.4 + django~=3.2.0 coverage commands= coverage erase