Tindakan GitHub yang dipendek untuk sepenuhnya mengotomatiskan paket penerbitan ke PYPI - menggunakan rilis puisi dan gitub.
Kami menerbitkan tindakan ini karena kami menggunakannya dalam proyek kami dan berpikir itu akan berguna bagi orang lain juga. Tindakan ini terbuka untuk segala jenis kolaborasi dan kontribusi - kami senang menerima umpan balik, masalah, permintaan tarik atau hanya pujian.
main , master , beta , dll.Lompat ke Contoh: - Publikasikan ke PYPI publik - dengan dependensi pribadi - ke PYPI pribadi - dengan dependensi pribadi
Tindakan ini mengasumsikan Anda menggunakan puisi sebagai manajer paket Anda dan memiliki file pyproject.toml dan poetry.lock di direktori root repositori Anda.
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
Jika Anda tidak menggunakan pelari khusus, Anda dapat menggunakan fungsionalitas builtin
GITHUB_TOKENdengan izin tulis sebagaiACCESS_TOKENseperti yang terlihat pada contoh pertama. Lihat [https://docs.github.com/en/actions/security-guides/automatic-token-tokennentication#using-the-github_token-in-a-workflow media(https://docs.github.
️ Kami menyarankan Anda untuk menggunakan alur kerja ini dengan Tes PYPI Registry misalnyaPUBLISH_REGISTRY: "https://test.pypi.org/simple/"sampai Anda dapat mengonfirmasi alur kerja Anda berfungsi seperti yang diharapkan.
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 (pemicu)pyproject.toml dan __init__.py di direktori paket sesuai dengan tag./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"Tindakan akan mengubah konten repositori Anda untuk menghindari konflik dan ketidakcocokan versi:
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 Input yang ditandai dengan (✓) diperlukan jika
POETRY_DEPENDENCY_REGISTRY_URLdiatur.
| Nama | Keterangan | Wajib | Bawaan |
|---|---|---|---|
ACCESS_TOKEN | Token GitHub dengan akses tulis ke repositori, untuk menyesuaikan versi | ✓ | |
PUBLISH_REGISTRY_PASSWORD | Salah satu kata sandi untuk pengguna registri atau token yang dikombinasikan dengan __token__ sebagai PUBLISH_REGISTRY_USERNAME | ✓ | |
PUBLISH_REGISTRY_USERNAME | Nama pengguna untuk PYPI Registry | __token__ | |
PACKAGE_DIRECTORY | Direktori Paket ini terletak di misalnya ./src/ , ./example_package | './' | |
POETRY_VERSION | Versi puisi untuk melakukan build dengan | 1.1.8 | |
POETRY_CORE_VERSION | Versi kode puisi untuk melakukan build dengan | 1.0.4 | |
PYTHON_VERSION | Versi python untuk melakukan build dengan | 3.10 | |
BRANCH | Cabang untuk diterbitkan dari | master | |
PUBLISH_REGISTRY | Registri untuk menerbitkan EG https://test.pypi.org/simple/ | https://pypi.org/simple/ | |
POETRY_DEPENDENCY_REGISTRY_URL | Memungkinkan untuk mendefinisikan registri khusus untuk digunakan oleh puisi untuk instalasi ketergantungan misalnya https://pypi.code-specialist.com/simple/ | ||
POETRY_DEPENDENCY_REGISTRY_NAME | Nama yang digunakan untuk registri khusus dalam dependensi. Harus mencocokkan nama di pyproject.toml | (✓) | |
POETRY_DEPENDENCY_REGISTRY_USERNAME | Nama pengguna untuk pendaftaran khusus | (✓) | |
POETRY_DEPENDENCY_REGISTRY_PASSWORD | Kata sandi untuk registri khusus | (✓) | |
POETRY_CUSTOM_REGISTRY_AUTH | Jenis otentikasi untuk registri khusus | http-basic |
Setiap contoh mengharuskan Anda untuk:
.github/workflows/publish.yaml1.0.0 dan aksinya akan dipicu dan menerbitkan paket AndaJika ada kasus penggunaan yang ingin Anda lihat, silakan buka masalah atau permintaan tarik.
PUBLISH_REGISTRY_PASSWORD dengan token yang valid Untuk menggunakan GITHUB_TOKEN , Anda juga harus memberikan izin untuk token. Dalam hal ini Anda memerlukan contents:write izin.
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_PASSWORD dengan token yang validACCESS_TOKEN Token akses dengan akses tulis ke repositori githubpublish.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 nama pengguna untuk registri pypiPUBLISH_REGISTRY_PASSWORD dengan kata sandi untuk pengguna PUBLISH_REGISTRY_USERACCESS_TOKEN Token akses dengan akses tulis ke repositori githubpublish.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 Token akses dengan akses tulis ke repositori githubPUBLISH_REGISTRY_USER nama pengguna untuk registri pypiPUBLISH_REGISTRY_PASSWORD dengan kata sandi untuk pengguna PUBLISH_REGISTRY_USERPOETRY_DEPENDENCY_REGISTRY_USERNAME nama pengguna untuk registri khususPOETRY_DEPENDENCY_REGISTRY_PASSWORD kata sandi untuk registri khususpublish.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 }} Untuk ini untuk menginstal ketergantungan private-code-specialist-example-package dari https://pypi.code-specialist.com/simple/ , pyproject.toml yang sesuai akan terlihat seperti ini:
[ 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 " }