/poetry-publish

Helper to build and upload a project that used poetry to PyPi, with prechecks

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

about poetry-publish

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 master
  • Abort publish if git repository contains changes
  • Abort if git repository is not up-to-date
  • Abort if poetry check fails
  • Abort if git version tag already exists

After a successfull upload to PyPi:

  • create a git version tag
  • git push tag to remote server

Compatible Python Versions (see tox.ini or .travis.yml):

  • 3.8, 3.7, 3.6
  • PyPy3
Build Status on github github.com/jedie/poetry-publish/actions
Build Status on travis-ci.org travis-ci.org/jedie/poetry-publish
Coverage Status on codecov.io codecov.io/gh/jedie/poetry-publish
Status on landscape.io landscape.io/github/jedie/poetry-publish/master
PyPi version pypi.org/project/poetry-publish/

example

~/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

setup usage in projects

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

unittests

# 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

make targets

To see all make targets, just call make:

~/poetry-publish$ make
help                 List all commands
install-poetry       install or update poetry
install              install poetry-publish via poetry
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*
pytest               Run pytest
update-rst-readme    update README.rst from README.creole
publish              Release new version to PyPi

history

first source code was written 27.11.2008: Forum thread (de)

Project links

GitHub https://github.com/jedie/poetry-publish/
PyPi https://pypi.org/project/poetry-publish/

donation