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}}/.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}}/.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$ 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 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..caaa5fb 100644 --- a/{{cookiecutter.repo_name}}/setup.py +++ b/{{cookiecutter.repo_name}}/setup.py @@ -1,48 +1,34 @@ -# -*- 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'] - - -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) +requires = ["click"] +tests_requires = ["pytest", "pytest-cache", "pytest-cov"] +lint_requires = ["flake8", "black"] +dev_requires = ["bumpversion"] + requires + tests_requires + lint_requires 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']}, + 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}, - cmdclass={'test': PyTest}) + "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}, +) 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} 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" diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py index 7516646..483cd86 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.package_name}}/cli.py @@ -1,8 +1,6 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals, absolute_import, print_function import click @click.command() def main(): - print('I am {{cookiecutter.cli_name}}') + print("I am {{cookiecutter.cli_name}}")