diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..16cd390 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,28 @@ +name: Publish + +on: + push: + tags: + - 'v*' + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.10' + - name: Install + run: python -m pip install setuptools wheel twine + - name: Build + run: | + python setup.py check + python setup.py sdist bdist_wheel + python -m twine check dist/* + - name: Publish + run: python -m twine upload dist/* + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e7d95e5..a67ad5e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,8 @@ from the repo: ``` $ python3 -m venv .venv $ . .venv/bin/activate -(.venv) $ pip3 install .[dev,test] +(.venv) $ pip3 install .[test] +(.venv) $ pip3 install -r requirements-dev.txt (.venv) $ check_patroni ``` @@ -48,4 +49,26 @@ The `README.md` can be geneated with `./docs/make_readme.sh`. ## Executing Tests The pytests are in `./tests` and use a moker to provide a json response instead -of having to call the patroni API. +of having to call the patroni API. To manually run the tests use one of these +commands : + +``` +pytest ./tests # just the tests +tox # pytests for all supported version of python + mypy + flake8 +tox -e py # pytests + mypy + flake8 or the default version of python +``` + +The tests are executed automatically for each PR using the ci (see +`.github/workflow/lint.yml` and `.github/workflow/tests.yml`). + +## Release + +The package is generated and uploaded to pypi when a `v*` tag is created (see +`.github/workflow/publish.yml`). + +Alternatively, the release can be done manually with: + +``` +tox -e build +tox -e upload +``` diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..03ee4c6 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,9 @@ +include *.md +include mypy.ini +include pytest.ini +include tox.ini +include .flake8 +include pyproject.toml +recursive-include docs *.sh +recursive-include tests *.json +recursive-include tests *.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8fd8d67 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "setuptools-scm"] +build-backend = "setuptools.build_meta" diff --git a/setup.py b/setup.py index 7aaf56c..60ed932 100644 --- a/setup.py +++ b/setup.py @@ -44,13 +44,6 @@ setup( "click >= 8.0.1", ], extras_require={ - "dev": [ - "wheel", - "black", - "check-manifest", - "flake8", - "mypy == 0.961", - ], "test": [ "pytest", "pytest-mock", diff --git a/tox.ini b/tox.ini index 4fe7bee..573ca8b 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,9 @@ envlist = lint, mypy, py36, py37, py38, py39, py310 skip_missing_interpreters = True [testenv] -extras = test +deps = + pytest + pytest-mock commands = pytest {toxinidir}/check_patroni {toxinidir}/tests {posargs:-vv} @@ -21,3 +23,24 @@ deps = mypy == 0.961 commands = mypy {toxinidir}/check_patroni + +[testenv:build] +deps = + wheel + setuptools + twine +allowlist_externals = + rm +commands = + rm --verbose --recursive --force {toxinidir}/dist/ + python setup.py check + python setup.py sdist bdist_wheel + python -m twine check dist/* + +[testenv:upload] +# requires a check_patroni section in ~/.pypirc +skip_install = True +deps = + twine +commands = + python -m twine upload --repository check_patroni dist/*