시와 Github 릴리스를 사용하여 PYPI에 게시 패키지를 완전히 자동화하기위한 의견이있는 GitHub 액션.
우리는 프로젝트에서 그것을 사용하고 다른 사람들에게도 유용 할 것이라고 생각했기 때문에이 행동을 게시했습니다. 이 조치는 모든 종류의 협업 및 기여에 열려 있습니다. 우리는 피드백, 문제, 풀 요청 또는 Kudos를 받게되어 기쁩니다.
main , master , beta 등예를 들어 이동 : - 개인 의존성을 가진 Public 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-github_token-in-a-workflow] com/action/actions/actions/security-guides/automatic-token--suthentication#uding-the-github_token-in-a--so--workflow).
켈 예상대로 워크 플로우가 작동하는 것을 확인할 때까지PUBLISH_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 | 디렉토리 패키지는 예를 들어 ./src/ , ./example_package 에 있습니다. | './' | |
POETRY_VERSION | 빌드를 수행하는시 버전 | 1.1.8 | |
POETRY_CORE_VERSION | 시의 코드 버전은 빌드를 수행합니다 | 1.0.4 | |
PYTHON_VERSION | 빌드를 수행하는 파이썬 버전 | 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 권한.
게시 .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 access token github 저장소에 대한 쓰기 액세스게시 .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 사용자 이름PUBLISH_REGISTRY_USER 사용자의 비밀번호가있는 PUBLISH_REGISTRY_PASSWORDACCESS_TOKEN access token github 저장소에 대한 쓰기 액세스게시 .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 access token github 저장소에 대한 쓰기 액세스PUBLISH_REGISTRY_USER 사용자 이름PUBLISH_REGISTRY_USER 사용자의 비밀번호가있는 PUBLISH_REGISTRY_PASSWORDPOETRY_DEPENDENCY_REGISTRY_USERNAME 정의 레지스트리의 사용자 이름입니다POETRY_DEPENDENCY_REGISTRY_PASSWORD 비밀번호게시 .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 " }