自以為是的GitHub動作,可以使用詩歌和GitHub發行,將發布包完全自動化為PYPI。
我們之所以發布此操作,是因為我們在項目中使用它,並認為它也對他人也有用。此操作對任何類型的合作和貢獻都開放- 我們很高興收到反饋,問題,拉扯請求或僅僅榮譽。
main , master , beta ,等。跳到示例: - 與私人依賴關係發佈到公共PYPI-與私人依賴關係的私人PYPI
此操作假設您將詩歌用作軟件包管理器,並將pyproject.toml和poetry.lock文件放在存儲庫的根目錄中。
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
如果您不使用自定義跑步者,則可以將內置功能
GITHUB_TOKEN帶有寫入權限作為第一個示例中所示的ACCESS_TOKEN。請參閱[https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-token-in-a-workflow](https://docs.github。com/com/en/en en/en en/en en/en en in/en ant Actions/actions/security-security-withatomatic-token-token-authentication#the-githe-the-github_tflow)
配x 我們建議您與Test 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 | 註冊表用戶的密碼,或與__token__一起使用PUBLISH_REGISTRY_USERNAME令牌 | ✓ | |
PUBLISH_REGISTRY_USERNAME | PYPI註冊表的用戶名 | __token__ | |
PACKAGE_DIRECTORY | 包裝的目錄位於./src/中, ./example_package | './' | |
POETRY_VERSION | 詩歌版本與 | 1.1.8 | |
POETRY_CORE_VERSION | 詩歌代碼版本可以執行構建 | 1.0.4 | |
PYTHON_VERSION | Python版本可以執行構建 | 3.10 | |
BRANCH | 從 | master | |
PUBLISH_REGISTRY | 出版至EG 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許可。
出版
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_PASSWORD帶有有效令牌ACCESS_TOKEN訪問令牌具有寫入GitHub存儲庫的寫入訪問權限出版
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_PASSWORD帶有PUBLISH_REGISTRY_USER用戶的密碼ACCESS_TOKEN訪問令牌具有寫入GitHub存儲庫的寫入訪問權限出版
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_PASSWORD帶有PUBLISH_REGISTRY_USER用戶的密碼POETRY_DEPENDENCY_REGISTRY_USERNAME註冊表POETRY_DEPENDENCY_REGISTRY_PASSWORD密碼的自定義註冊表出版
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 " }