パッケージをPYPIに完全に自動化するための意見のGitHubアクション - 詩とGitHubのリリースを使用してください。
私たちはこのアクションを公開しました。なぜなら、私たちはそれを私たちのプロジェクトで使用し、それが他の人にも役立つと考えていたからです。このアクションは、あらゆる種類のコラボレーションと貢献に対して開かれています。フィードバック、問題、プルリクエスト、または称賛を受けて喜んでいます。
main 、 master 、 betaなどの構成可能な分岐。例にジャンプする: - パブリックピピに公開 - プライベート依存関係で - プライベートピピへ - プライベート依存関係を持つ
このアクションは、詩をパッケージマネージャーとして使用し、リポジトリのルートディレクトリにpyproject.tomlとpoetry.lockファイルを持っていることを想定しています。
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
カスタムランナーを使用していない場合は、最初の例で見られるように、
ACCESS_TOKENのように書き込みアクセス許可を備えたビルトイン機能GITHUB_TOKENを使用できます。 [https://docs.github.com/en/actions/security-guides/automatic-token-authentication-using-the-github_token-in-a-workflow(https://docs.github。com/en/action/actions/security- authentication
ショ和 このワークフローをテストPypiレジストリEGPUBLISH_REGISTRY: "https://test.pypi.org/simple/"で使用することをお勧めします。
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
permissions :
contents : write
steps :
- name : Publish PyPi package
uses : code-specialist/pypi-poetry-publish@v1
with :
ACCESS_TOKEN : ${{ secrets.GITHUB_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PYPI_TOKEN }} 1.0.0 (トリガー)をタグ付けしますpyproject.tomlおよび__init__.pyでバージョンを調整します./pyproject.toml
[ tool . poetry ]
name = " code-specialist-example-package "
version = " 0.1.0 "
description = " Example package "
authors = [ " Code Specialist " ]
packages = [{ include = " example_package " }]
[ tool . poetry . dependencies ]
python = " ^3.10 "./example_package/init.py
__version__ = "0.1.0"アクションは、競合やバージョンの不一致を避けるために、リポジトリのコンテンツを変更します。
pyproject.toml
[ tool . poetry ]
name = " code-specialist-example-package "
version = " 1.0.0 " # adjusted to 1.0.0
description = " Example package "
authors = [ " Code Specialist " ]
packages = [{ include = " example_package " }]
[ tool . poetry . dependencies ]
python = " ^3.10 "./example_package/init.py
__version__ = "1.0.0" # adjusted to 1.0.0
POETRY_DEPENDENCY_REGISTRY_URLが設定されている場合、(✓)でマークされた入力が必要です。
| 名前 | 説明 | 必須 | デフォルト |
|---|---|---|---|
ACCESS_TOKEN | バージョンを調整するために、リポジトリへの書き込みアクセスを備えたgithubトークン | ✓✓ | |
PUBLISH_REGISTRY_PASSWORD | registryユーザーのパスワードまたは__token__と組み合わせたトークンのいずれかをPUBLISH_REGISTRY_USERNAME | ✓✓ | |
PUBLISH_REGISTRY_USERNAME | PYPIレジストリのユーザー名 | __token__ | |
PACKAGE_DIRECTORY | ディレクトリパッケージは、eg ./src/ ./example_packageにあります | './' | |
POETRY_VERSION | ビルドを実行する詩バージョン | 1.1.8 | |
POETRY_CORE_VERSION | ビルドを実行する詩コードバージョン | 1.0.4 | |
PYTHON_VERSION | ビルドを実行するPythonバージョン | 3.10 | |
BRANCH | 出版するブランチ | master | |
PUBLISH_REGISTRY | 例: https://test.pypi.org/simple/に公開するレジストリ | https://pypi.org/simple/ | |
POETRY_DEPENDENCY_REGISTRY_URL | 詩が依存関係のインストールに使用するカスタムレジストリを定義することを許可しますhttps://pypi.code-specialist.com/simple/ | ||
POETRY_DEPENDENCY_REGISTRY_NAME | 依存関係のカスタムレジストリに使用される名前。 pyproject.tomlの名前と一致する必要があります | (✓) | |
POETRY_DEPENDENCY_REGISTRY_USERNAME | カスタムレジストリのユーザー名 | (✓) | |
POETRY_DEPENDENCY_REGISTRY_PASSWORD | カスタムレジストリのパスワード | (✓) | |
POETRY_CUSTOM_REGISTRY_AUTH | カスタムレジストリの認証タイプ | http-basic |
それぞれの例では、次のことが必要です。
.github/workflows/publish.yaml1.0.0を作成すると、アクションがトリガーされ、パッケージが公開されますご覧になりたい場合の使用ケースがある場合は、問題またはプルリクエストを開いてください。
PUBLISH_REGISTRY_PASSWORD GITHUB_TOKENを使用するには、トークンにアクセス許可を提供する必要があります。この場合contents:write 。
publish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
permissions :
contents : write
steps :
- name : Publish PyPi package
uses : code-specialist/pypi-poetry-publish@v1
with :
PACKAGE_DIRECTORY : " ./example-package/ "
PYTHON_VERSION : " 3.10 "
ACCESS_TOKEN : ${{ secrets.GITHUB_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}PUBLISH_REGISTRY_PASSWORDACCESS_TOKENアクセストークンgithubリポジトリへの書き込みアクセス付きpublish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
steps :
- name : Publish PyPi package
uses : code-specialist/pypi-poetry-publish@v1
with :
PACKAGE_DIRECTORY : " ./example-package/ "
PYTHON_VERSION : " 3.10 "
ACCESS_TOKEN : ${{ secrets.ACCESS_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}
PUBLISH_REGISTRY : " https://test.pypi.org/legacy/ "PUBLISH_REGISTRY_USER pypiレジストリのユーザー名PUBLISH_REGISTRY_USERユーザーのパスワードを使用したPUBLISH_REGISTRY_PASSWORDACCESS_TOKENアクセストークンgithubリポジトリへの書き込みアクセス付きpublish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
steps :
- name : Publish PyPI package
uses : code-specialist/pypi-poetry-publish@v1
with :
PACKAGE_DIRECTORY : " ./example-package/ "
PYTHON_VERSION : " 3.10 "
ACCESS_TOKEN : ${{ secrets.ACCESS_TOKEN }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}
PUBLISH_REGISTRY_USER : ${{ secrets.PUBLISH_REGISTRY_USER }}
PUBLISH_REGISTRY : " https://pypi.code-specialist.com/simple/ "ACCESS_TOKENアクセストークンgithubリポジトリへの書き込みアクセス付きPUBLISH_REGISTRY_USER pypiレジストリのユーザー名PUBLISH_REGISTRY_USERユーザーのパスワードを使用したPUBLISH_REGISTRY_PASSWORDPOETRY_DEPENDENCY_REGISTRY_USERNAMEカスタムレジストリのユーザー名POETRY_DEPENDENCY_REGISTRY_PASSWORDカスタムレジストリのパスワードpublish.yaml
name : Build and publish python package
on :
release :
types : [ published ]
jobs :
publish-service-client-package :
runs-on : ubuntu-latest
steps :
- name : Publish PyPI package
uses : code-specialist/pypi-poetry-publish@v1
with :
ACCESS_TOKEN : ${{ secrets.ACCESS_TOKEN }}
PUBLISH_REGISTRY_USER : ${{ secrets.PUBLISH_REGISTRY_USER }}
PUBLISH_REGISTRY_PASSWORD : ${{ secrets.PUBLISH_REGISTRY_PASSWORD }}
PUBLISH_REGISTRY : " https://pypi.code-specialist.com "
POETRY_DEPENDENCY_REGISTRY_URL : " https://pypi.code-specialist.com "
POETRY_DEPENDENCY_REGISTRY_NAME : " codespecialist "
POETRY_DEPENDENCY_REGISTRY_USERNAME : ${{ secrets.CUSTOM_PUBLISH_REGISTRY_USERNAME }}
POETRY_DEPENDENCY_REGISTRY_PASSWORD : ${{ secrets.CUSTOM_PUBLISH_REGISTRY_PASSWORD }} これにより、 https://pypi.code-specialist.com/simple/からの依存関係private-code-specialist-example-packageをインストールするために、対応するpyproject.tomlは次のようになります。
[ tool . poetry ]
name = " code-specialist-example-package "
version = " 1.0.0 " # adjusted to 1.0.0
description = " Example package "
authors = [ " Code Specialist " ]
packages = [{ include = " example_package " }]
[[ tool . poetry . source ]]
name = " codespecialist "
url = " https://pypi.code-specialist.com "
[ tool . poetry . dependencies ]
python = " ^3.10 "
private-code-specialist-example-package = { version = " ^1.0.0 " , source = " codespecialist " }