From 056a5ca8ad7730bcc022fa5cff6ef55fe68dc2a0 Mon Sep 17 00:00:00 2001 From: Sebastian Vetter Date: Sun, 3 Jun 2018 10:23:08 -0600 Subject: [PATCH 1/6] Replace Travis with Circle CI --- .../.circleci/config.yml | 73 +++++++++++++++++++ {{cookiecutter.repo_name}}/.travis.yml | 13 ---- 2 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 {{cookiecutter.repo_name}}/.circleci/config.yml delete mode 100644 {{cookiecutter.repo_name}}/.travis.yml diff --git a/{{cookiecutter.repo_name}}/.circleci/config.yml b/{{cookiecutter.repo_name}}/.circleci/config.yml new file mode 100644 index 0000000..6806c6d --- /dev/null +++ b/{{cookiecutter.repo_name}}/.circleci/config.yml @@ -0,0 +1,73 @@ +machine: + python: + version: 3.6.1 + services: + - redis + - postgresql + +dependencies: + pre: + +test: + pre: + + +# Python CircleCI 2.0 configuration file +# +# Check https://circleci.com/docs/2.0/language-python/ for more details +# +version: 2 +jobs: + build: + docker: + - image: circleci/python:3.6.1 + + - image: circleci/postgres:9.6-alpine + environment: + POSTGRES_USER: ubuntu + POSTGRES_DB: circle_test + POSTGRES_PASSWORD: "" + + environment: + DATABASE_URL: postgresql://ubuntu@127.0.0.1:5432/circle_test + REDIS_URL: redis://127.0.0.1:6379/0 + DJANGO_SECRET_KEY: secret key just for testing + + working_directory: ~/repo + + steps: + - checkout + + {% raw %} + # Download and cache dependencies + - restore_cache: + keys: + - v1-dependencies-{{ checksum "setup.py" }} + # fallback to using the latest cache if no exact match is found + - v1-dependencies- + + - run: + name: install dependencies + command: | + python3 -m venv venv + . venv/bin/activate + pip install -e ".[dev]" + + - save_cache: + paths: + - ./venv + key: v1-dependencies-{{ checksum "setup.py" }} + {% endraw %} + + # run tests! + - run: + name: run tests + command: | + . venv/bin/activate + py.test --cov {{cookiecutter.package_name}} + flake8 {{cookiecutter.package_name}} + black --check {{cookiecutter.package_name}} + + - store_artifacts: + path: test-reports + destination: test-reports diff --git a/{{cookiecutter.repo_name}}/.travis.yml b/{{cookiecutter.repo_name}}/.travis.yml deleted file mode 100644 index 43fd74b..0000000 --- a/{{cookiecutter.repo_name}}/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: python - -env: - matrix: - - TOX_ENV=py27 - - TOX_ENV=py34 - -before_script: - - pip install tox - -script: - - tox -e ${TOX_ENV} - - rstcheck README.rst From bccf998ab8993289e22f36cf416f43158dc75167 Mon Sep 17 00:00:00 2001 From: Sebastian Vetter Date: Sun, 3 Jun 2018 10:24:21 -0600 Subject: [PATCH 2/6] Replace CI service and update setup files --- {{cookiecutter.repo_name}}/pytest.ini | 0 {{cookiecutter.repo_name}}/setup.cfg | 8 ++++++++ {{cookiecutter.repo_name}}/setup.py | 16 ++++++++-------- .../{{cookiecutter.package_name}}/cli.py | 2 -- 4 files changed, 16 insertions(+), 10 deletions(-) delete mode 100644 {{cookiecutter.repo_name}}/pytest.ini diff --git a/{{cookiecutter.repo_name}}/pytest.ini b/{{cookiecutter.repo_name}}/pytest.ini deleted file mode 100644 index e69de29..0000000 diff --git a/{{cookiecutter.repo_name}}/setup.cfg b/{{cookiecutter.repo_name}}/setup.cfg index 5e40900..49ccc53 100644 --- a/{{cookiecutter.repo_name}}/setup.cfg +++ b/{{cookiecutter.repo_name}}/setup.cfg @@ -1,2 +1,10 @@ [wheel] universal = 1 + +[flake8] +ignore = F401 +max_line_length = 100 +exclude = .git,__pycache__,venv + +[tool:pytest] +norecursedirs = .* build dist docs docker diff --git a/{{cookiecutter.repo_name}}/setup.py b/{{cookiecutter.repo_name}}/setup.py index d8724c8..96172fb 100644 --- a/{{cookiecutter.repo_name}}/setup.py +++ b/{{cookiecutter.repo_name}}/setup.py @@ -1,11 +1,12 @@ -# -*- coding: utf-8 -*- import sys from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand requires = ['click'] -tests_require = ['pytest', 'pytest-cache', 'pytest-cov'] +tests_requires = ['pytest', 'pytest-cache', 'pytest-cov'] +lint_requires = ['flake8', 'black'] +dev_requires = requires + tests_requires + lint_requires class PyTest(TestCommand): @@ -35,14 +36,13 @@ def run_tests(self): entry_points={'console_scripts': [ '{{cookiecutter.cli_name}} = {{cookiecutter.package_name}}.cli:main']}, classifiers=[ - 'Development Status :: 1 - Planning', 'License :: OSI Approved :: MIT License', - 'Intended Audience :: Developers', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: Implementation :: CPython'], - extras_require={'test': tests_require}, + extras_require={ + 'test': tests_requires, + 'dev': dev_requires, + 'lint': lint_requires, + }, cmdclass={'test': PyTest}) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py index 7516646..5f37ffd 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals, absolute_import, print_function import click From a8a80cadf21111dfb9426b109f1835467b21c004 Mon Sep 17 00:00:00 2001 From: Sebastian Vetter Date: Tue, 19 Jun 2018 13:55:51 -0600 Subject: [PATCH 3/6] Use black formatting --- {{cookiecutter.repo_name}}/setup.py | 36 ++++++++++--------- .../{{cookiecutter.package_name}}/cli.py | 2 +- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/{{cookiecutter.repo_name}}/setup.py b/{{cookiecutter.repo_name}}/setup.py index 96172fb..463ba36 100644 --- a/{{cookiecutter.repo_name}}/setup.py +++ b/{{cookiecutter.repo_name}}/setup.py @@ -3,9 +3,9 @@ from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand -requires = ['click'] -tests_requires = ['pytest', 'pytest-cache', 'pytest-cov'] -lint_requires = ['flake8', 'black'] +requires = ["click"] +tests_requires = ["pytest", "pytest-cache", "pytest-cov"] +lint_requires = ["flake8", "black"] dev_requires = requires + tests_requires + lint_requires @@ -18,31 +18,33 @@ def finalize_options(self): def run_tests(self): # import here, cause outside the eggs aren't loaded import pytest + errno = pytest.main(self.test_args) sys.exit(errno) setup( name="{{cookiecutter.repo_name}}", - version='0.0.0', + version="00.0.0.0", description="{{cookiecutter.description}}", long_description="\n\n".join([open("README.rst").read()]), - license='MIT', + license="MIT", author="{{cookiecutter.author_name}}", author_email="{{cookiecutter.author_email}}", url="https://{{cookiecutter.repo_name}}.readthedocs.org", packages=find_packages(), install_requires=requires, - entry_points={'console_scripts': [ - '{{cookiecutter.cli_name}} = {{cookiecutter.package_name}}.cli:main']}, - classifiers=[ - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: Implementation :: CPython'], - extras_require={ - 'test': tests_requires, - 'dev': dev_requires, - 'lint': lint_requires, + entry_points={ + "console_scripts": [ + "{{cookiecutter.cli_name}} = {{cookiecutter.package_name}}.cli:main" + ] }, - cmdclass={'test': PyTest}) + classifiers=[ + "License :: OSI Approved :: MIT License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + ], + extras_require={"test": tests_requires, "dev": dev_requires, "lint": lint_requires}, + cmdclass={"test": PyTest}, +) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py index 5f37ffd..483cd86 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py @@ -3,4 +3,4 @@ @click.command() def main(): - print('I am {{cookiecutter.cli_name}}') + print("I am {{cookiecutter.cli_name}}") From 0cda87be9e1081f03034979a204c5ed008a85edf Mon Sep 17 00:00:00 2001 From: Sebastian Vetter Date: Tue, 19 Jun 2018 13:56:28 -0600 Subject: [PATCH 4/6] Remove tox test runner --- {{cookiecutter.repo_name}}/tox.ini | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 {{cookiecutter.repo_name}}/tox.ini diff --git a/{{cookiecutter.repo_name}}/tox.ini b/{{cookiecutter.repo_name}}/tox.ini deleted file mode 100644 index 20a887b..0000000 --- a/{{cookiecutter.repo_name}}/tox.ini +++ /dev/null @@ -1,9 +0,0 @@ -[tox] -envlist = {py27,py34} - -[testenv] -deps = - -rrequirements.txt -commands = - pip install -e . - py.test --cov {{cookiecutter.package_name}} {posargs} From dc2b7e078f438ed89fa7f8e56cb7f3997df72013 Mon Sep 17 00:00:00 2001 From: Sebastian Vetter Date: Fri, 22 Jun 2018 12:15:20 -0600 Subject: [PATCH 5/6] Add pre-commit config for black & flake8 --- {{cookiecutter.repo_name}}/.pre-commit-config.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 {{cookiecutter.repo_name}}/.pre-commit-config.yaml diff --git a/{{cookiecutter.repo_name}}/.pre-commit-config.yaml b/{{cookiecutter.repo_name}}/.pre-commit-config.yaml new file mode 100644 index 0000000..e6d10d3 --- /dev/null +++ b/{{cookiecutter.repo_name}}/.pre-commit-config.yaml @@ -0,0 +1,14 @@ +repos: +- repo: https://github.com/ambv/black + rev: stable + hooks: + - id: black + args: [--line-length=88, --safe] + python_version: python3.6 +- repo: local + hooks: + - id: flake8 + name: flake8 + language: system + entry: flake8 --config=setup.cfg + files: ({{cookiecutter.package_name}}|tests)/.*\.py$ From 0be75e2e95e1b37abd0a172084c450e827684708 Mon Sep 17 00:00:00 2001 From: Sebastian Vetter Date: Fri, 22 Jun 2018 12:17:58 -0600 Subject: [PATCH 6/6] Add bumpversion with CalVer configuration --- {{cookiecutter.repo_name}}/.bumpversion.cfg | 11 +++++++++++ {{cookiecutter.repo_name}}/setup.py | 18 +----------------- .../{{cookiecutter.package_name}}/__init__.py | 1 + 3 files changed, 13 insertions(+), 17 deletions(-) create mode 100644 {{cookiecutter.repo_name}}/.bumpversion.cfg diff --git a/{{cookiecutter.repo_name}}/.bumpversion.cfg b/{{cookiecutter.repo_name}}/.bumpversion.cfg new file mode 100644 index 0000000..ba9bc59 --- /dev/null +++ b/{{cookiecutter.repo_name}}/.bumpversion.cfg @@ -0,0 +1,11 @@ +[bumpversion] +current_version = 00.0.0.0 +serialize = {now:%y.%-m.%-d}.{release} +parse = \d{2}.\d{1,2}.\d{1,2}.(?P\d+) +commit = True +tag = True +tag_name = v{new_version} + +[bumpversion:file:setup.py] +[bumpversion:file:{{cookiecutter.package_name}}.__init__.py] + diff --git a/{{cookiecutter.repo_name}}/setup.py b/{{cookiecutter.repo_name}}/setup.py index 463ba36..caaa5fb 100644 --- a/{{cookiecutter.repo_name}}/setup.py +++ b/{{cookiecutter.repo_name}}/setup.py @@ -1,26 +1,11 @@ import sys from setuptools import setup, find_packages -from setuptools.command.test import test as TestCommand requires = ["click"] tests_requires = ["pytest", "pytest-cache", "pytest-cov"] lint_requires = ["flake8", "black"] -dev_requires = requires + tests_requires + lint_requires - - -class PyTest(TestCommand): - def finalize_options(self): - TestCommand.finalize_options(self) - self.test_args = [] - self.test_suite = True - - def run_tests(self): - # import here, cause outside the eggs aren't loaded - import pytest - - errno = pytest.main(self.test_args) - sys.exit(errno) +dev_requires = ["bumpversion"] + requires + tests_requires + lint_requires setup( @@ -46,5 +31,4 @@ def run_tests(self): "Programming Language :: Python :: Implementation :: CPython", ], extras_require={"test": tests_requires, "dev": dev_requires, "lint": lint_requires}, - cmdclass={"test": PyTest}, ) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/__init__.py b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/__init__.py index e69de29..cdc9782 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/__init__.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/__init__.py @@ -0,0 +1 @@ +__version__ = "00.0.0.0"