Skip to content

Commit

Permalink
Migrate to GitHub Actions. (#188)
Browse files Browse the repository at this point in the history
* Add GitHub Actions workflow.

* Use setuptools_scm.

* Add release workflow.

* Fix import order.

* Fix versions.

* Write coverage file.

* Remove Travis and other cruft.

* Remove extra line.
  • Loading branch information
jezdez authored Nov 27, 2020
1 parent 908359d commit a79759d
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 190 deletions.
40 changes: 40 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Release

on:
push:
tags:
- '*'

jobs:
build:
if: github.repository == 'jazzband/django-formtools'
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-formtools/upload
48 changes: 48 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
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 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 }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ docs/_build
.tox/
*.egg/
.coverage
coverage.xml
49 changes: 0 additions & 49 deletions .travis.yml

This file was deleted.

1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ include CONTRIBUTING.rst
include tox.ini
include .coveragerc
recursive-include formtools/locale *.po *.mo
recursive-include formtools/templates *.html
recursive-include docs *
recursive-include tests *
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ test:
@isort --check-only --diff formtools tests
@ coverage run `which django-admin` test tests
@coverage report
@coverage xml

.PHONY: clean docs test maketranslations pulltranslations compiletranslations
12 changes: 6 additions & 6 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ django-formtools
:alt: Supported Python versions
:target: https://pypi.org/project/django-formtools/

.. image:: https://img.shields.io/travis/jazzband/django-formtools/master.svg
:alt: TravisCI Build Status
:target: https://travis-ci.org/jazzband/django-formtools
.. image:: https://github.com/jazzband/django-formtools/workflows/Test/badge.svg
:target: https://github.com/jazzband/django-formtools/actions
:alt: GitHub Actions

.. image:: https://img.shields.io/coveralls/jazzband/django-formtools/master.svg
:alt: Coveralls Test Coverage
:target: https://coveralls.io/r/jazzband/django-formtools?branch=master
.. image:: https://codecov.io/gh/jazzband/django-formtools/branch/master/graph/badge.svg
:target: https://codecov.io/gh/jazzband/django-formtools
:alt: Test Coverage

Django's "formtools" is a set of high-level abstractions for Django forms.
Currently for form previews and multi-step forms.
Expand Down
7 changes: 6 additions & 1 deletion formtools/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import django
from pkg_resources import DistributionNotFound, get_distribution

__version__ = '2.2'
try:
__version__ = get_distribution("django-formtools").version
except DistributionNotFound:
# package is not installed
__version__ = None

if django.VERSION <= (3, 2):
default_app_config = 'formtools.apps.FormToolsConfig'
158 changes: 30 additions & 128 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,145 +1,47 @@
import codecs
import os
import re
import sys
from distutils.util import convert_path
from fnmatch import fnmatchcase

from setuptools import find_packages, setup


def read(*parts):
filename = os.path.join(os.path.dirname(__file__), *parts)
with codecs.open(filename, encoding='utf-8') as fp:
with open(filename, encoding="utf-8") as fp:
return fp.read()


def find_version(*file_paths):
version_file = read(*file_paths)
version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]",
version_file, re.M)
if version_match:
return version_match.group(1)
raise RuntimeError("Unable to find version string.")


# Provided as an attribute, so you can append to these instead
# of replicating them:
standard_exclude = ('*.py', '*.pyc', '*$py.class', '*~', '.*', '*.bak')
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build',
'./dist', 'EGG-INFO', '*.egg-info')


# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
# Note: you may want to copy this into your setup.py file verbatim, as
# you can't import this from another package, when you don't know if
# that package is installed yet.
def find_package_data(where='.', package='',
exclude=standard_exclude,
exclude_directories=standard_exclude_directories,
only_in_packages=True,
show_ignored=False):
"""
Return a dictionary suitable for use in ``package_data``
in a distutils ``setup.py`` file.
The dictionary looks like::
{'package': [files]}
Where ``files`` is a list of all the files in that package that
don't match anything in ``exclude``.
If ``only_in_packages`` is true, then top-level directories that
are not packages won't be included (but directories under packages
will).
Directories matching any pattern in ``exclude_directories`` will
be ignored; by default directories with leading ``.``, ``CVS``,
and ``_darcs`` will be ignored.
If ``show_ignored`` is true, then all the files that aren't
included in package data are shown on stderr (for debugging
purposes).
Note patterns use wildcards, or can be exact paths (including
leading ``./``), and all searching is case-insensitive.
"""

out = {}
stack = [(convert_path(where), '', package, only_in_packages)]
while stack:
where, prefix, package, only_in_packages = stack.pop(0)
for name in os.listdir(where):
fn = os.path.join(where, name)
if os.path.isdir(fn):
bad_name = False
for pattern in exclude_directories:
if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()):
bad_name = True
if show_ignored:
print("Directory %s ignored by pattern %s" % (fn, pattern),
file=sys.stderr)
break
if bad_name:
continue
if (os.path.isfile(os.path.join(fn, '__init__.py')) and not prefix):
if not package:
new_package = name
else:
new_package = package + '.' + name
stack.append((fn, '', new_package, False))
else:
stack.append((fn, prefix + name + '/', package, only_in_packages))
elif package or not only_in_packages:
# is a file
bad_name = False
for pattern in exclude:
if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()):
bad_name = True
if show_ignored:
print("File %s ignored by pattern %s" % (fn, pattern),
file=sys.stderr)
break
if bad_name:
continue
out.setdefault(package, []).append(prefix + name)
return out


setup(
name="django-formtools",
version=find_version("formtools", "__init__.py"),
url='https://django-formtools.readthedocs.io/en/latest/',
license='BSD',
use_scm_version={"version_scheme": "post-release", "local_scheme": "dirty-tag"},
setup_requires=["setuptools_scm"],
url="https://django-formtools.readthedocs.io/en/latest/",
license="BSD",
description="A set of high-level abstractions for Django forms",
long_description=read('README.rst'),
author='Django Software Foundation',
author_email='[email protected]',
packages=find_packages(exclude=['tests', 'tests.*']),
package_data=find_package_data(),
install_requires=['Django>=2.2'],
long_description=read("README.rst"),
long_description_content_type="text/x-rst",
author="Django Software Foundation",
author_email="[email protected]",
packages=find_packages(exclude=["tests", "tests.*"]),
include_package_data=True,
install_requires=["Django>=2.2"],
python_requires=">=3.5",
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Web Environment',
'Framework :: Django',
'Framework :: Django :: 2.2',
'Framework :: Django :: 3.0',
'Framework :: Django :: 3.1',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3 :: Only',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP',
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
"Framework :: Django :: 2.2",
"Framework :: Django :: 3.0",
"Framework :: Django :: 3.1",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Internet :: WWW/HTTP",
],
zip_safe=False,
)
14 changes: 8 additions & 6 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@ envlist =
{py36,py37,py38,py39}-django-{30,31,master}

[testenv]
basepython =
py35: python3.5
py36: python3.6
py37: python3.7
py38: python3.8
py39: python3.9
usedevelop = true
allowlist_externals = make
commands = make test
Expand All @@ -21,3 +15,11 @@ deps =
django-31: Django>=3.1,<3.2
django-master: https://github.com/django/django/archive/master.tar.gz
-r{toxinidir}/tests/requirements.txt

[gh-actions]
python =
3.5: py35
3.6: py36
3.7: py37
3.8: py38
3.9: py39

0 comments on commit a79759d

Please sign in to comment.