Helper to build and upload a project that used poetry to PyPi, with prechecks:
- User must confirm:
- If __version__ contains 'dev' or 'rc'
- If git repository is not on main or master
- Abort publish if git repository contains changes
- Abort if git repository is not up-to-date
- Abort if poetry check fails
- Abort if twine check fails
- Abort if git version tag already exists
After a successful upload to PyPi:
- create a git version tag
- git push tag to remote server
Compatible Python Versions (see tox.ini or .travis.yml):
- 3.10, 3.9, 3.8, 3.7, 3.6
- PyPy3
github.com/jedie/poetry-publish/actions | |
travis-ci.org/jedie/poetry-publish | |
codecov.io/gh/jedie/poetry-publish | |
landscape.io/github/jedie/poetry-publish/master | |
pypi.org/project/poetry-publish/ |
~/repos/python-creole$ poetry run publish Check if we are on "master" branch: Call: 'git branch --no-color' OK Set version in "pyproject.toml" to: v1.4.3 Call: 'poetry version 1.4.3' Bumping version from 1.4.3 to 1.4.3 check if if git repro is clean: Call: 'git status --porcelain' OK Run "poetry check": OK check if pull is needed Call: 'git fetch --all' Fordere an von origin Call: 'git log HEAD..origin/master --oneline' OK Call: 'git push' Everything up-to-date Cleanup old builds: remove tree: /home/jens/repos/python-creole/dist build but do not upload... Call: 'poetry build' Build log file is here: 'publish.log' check git tag OK Upload to PyPi via poetry: Call: 'poetry publish' Publishing python-creole (1.4.3) to PyPI - Uploading python-creole-1.4.3.tar.gz 100% - Uploading python_creole-1.4.3-py3-none-any.whl 100% git tag version Call: 'git tag v1.4.3' git push tag to server Call: 'git push --tags' Total 0 (delta 0), reused 0 (delta 0) To github.com:jedie/python-creole.git * [new tag] v1.4.3 -> v1.4.3
Create a publish hook in you project, e.g. create your_project/publish.py with:
from pathlib import Path import your_project from poetry_publish.publish import poetry_publish def publish(): poetry_publish( package_root=Path(your_project.__file__).parent.parent, version=your_project.__version__, )
Add this to your poetry pyproject.toml, e.g.:
[tool.poetry.scripts] publish = 'your_project:publish'
To publish do this:
~$ cd your_project ~/your_project$ poetry run publish
Note: Don't miss the run ! It's not the same as poetry publish
based on: https://github.com/jedie/python-code-snippets/blob/master/CodeSnippets/setup_publish.py
# clone repository (or use your fork): ~$ git clone https://github.com/jedie/poetry-publish.git ~$ cd poetry-publish # install or update poetry: ~/poetry-publish$ make install-poetry # install poetry-publish via poetry: ~/poetry-publish$ make install # Run pytest: ~/poetry-publish$ make pytest # Run pytest via tox with all environments: ~/poetry-publish$ make tox # Run pytest via tox with one Python version: ~/poetry-publish$ make tox-py38 ~/poetry-publish$ make tox-py37 ~/poetry-publish$ make tox-py36
To see all make targets, just call make:
~/poetry-publish$ make help List all commands install-poetry install or update poetry install install python-poetry_publish via poetry update Update the dependencies as according to the pyproject.toml file lint Run code formatters and linter fix-code-style Fix code formatting tox-listenvs List all tox test environments tox Run pytest via tox with all environments tox-py36 Run pytest via tox with *python v3.6* tox-py37 Run pytest via tox with *python v3.7* tox-py38 Run pytest via tox with *python v3.8* tox-py39 Run pytest via tox with *python v3.9* pytest Run pytest update-rst-readme update README.rst from README.creole publish Release new version to PyPi
- *dev* - compare v0.5.0...master
- TBC
- v0.5.0 - 2022-07-19 - compare v0.4.1...v0.5.0
- Test with Python 3.10
- Fix twine check call.
- Fix poetry publish call.
- v0.4.1 - 2021-03-19 - compare v0.4.0...v0.4.1
- Bugfix if git main branch is used, instead of master
- v0.4.0 - 2020-10-17 - compare v0.3.2...v0.4.0
- Call twine check dist/*.*, too.
- Some meta updates to project setup
- v0.3.2 - 2020-10-16 - compare v0.3.1...v0.3.2
- Create git annotated tags instead of a lightweight tag. Contributed by sebhmg in #9
- Make python-creole to an optional dependency. Based on a contribution by sebhmg
- Allow main beside master as stable branch.
- Add make update
- Update pytest.ini
- Change supported Python version in pyproject.toml
- Run tests with Python 3.9, too
- v0.3.1 - 2020-02-19 - compare v0.3.0...v0.3.1
- v0.3.0 - 2020-02-10 - compare v0.2.3...v0.3.0
- Poetry publish error -> fallback and use twine
- call poetry publish with -vvv
- call git push with origin <current-branch>
- add isort config
- v0.2.3 - 2020-02-02 - compare v0.2.2...v0.2.3
- make poetry_publish.tests.test_project_setup usable for external packages
- v0.2.2 - 2020-02-01 - compare v0.2.1...v0.2.2
- Fix missing project description on PyPi
- v0.2.1 - 2020-02-01 - compare v0.2.0...v0.2.1
- call "poetry version" after "branch is master" check
- add many tests
- test with PyPy v3, too
- Upload coverage reports
- fix code style
- update README
- v0.2.0 - 2020-02-01 - compare 92e584...v0.2.0
- first released version cut out from python-creole
first source code was written 27.11.2008: Forum thread (de)
GitHub | https://github.com/jedie/poetry-publish/ |
PyPi | https://pypi.org/project/poetry-publish/ |