الإجراء github المأخير لأتمتة حزم النشر بالكامل إلى PYPI - باستخدام إصدارات الشعر و github.
لقد نشرنا هذا الإجراء لأننا نستخدمه في مشاريعنا واعتقدنا أنه سيكون مفيدًا للآخرين أيضًا. هذا الإجراء مفتوح لأي نوع من التعاون والمساهمة - يسعدنا تلقي التعليقات أو المشكلات أو طلبات السحب أو مجرد مجد.
main ، master ، beta ، إلخ.القفز إلى المثال: - نشر إلى Pypi العامة - مع تبعيات خاصة - إلى pypi خاصة - مع تبعيات خاصة
يفترض هذا الإجراء أنك تستخدم الشعر كمدير للحزمة الخاص بك ولديك ملفات pyproject.toml و poetry.lock في الدليل الجذر لمستودعك.
my_project/
├─ example_package/
│ ├─ __init__.py
├─ pyproject.toml
├─ poetry.lock
إذا لم تستخدم عداءًا مخصصًا ، فيمكنك استخدام وظيفة Buildin
GITHUB_TOKENمع أذونات الكتابة مثلACCESS_TOKENكما هو موضح في المثال الأول. راجع [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow chtttps://docs.github. com/en/ensure-
️ نوصيك باستخدام سير العمل هذا مع اختبار PYPI على سبيل المثال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 | إما كلمة مرور لمستخدم التسجيل أو رمزًا في تركيبة مع __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 إذن.
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 مع رمز صالحACCESS_TOKEN Access Token مع الوصول إلى Write إلى مستودع 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 اسم المستخدم لسجل PYPIPUBLISH_REGISTRY_PASSWORD مع كلمة المرور لمستخدم PUBLISH_REGISTRY_USERACCESS_TOKEN Access Token مع الوصول إلى Write إلى مستودع 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 Access Token مع الوصول إلى Write إلى مستودع GitHubPUBLISH_REGISTRY_USER اسم المستخدم لسجل PYPIPUBLISH_REGISTRY_PASSWORD مع كلمة المرور لمستخدم PUBLISH_REGISTRY_USERPOETRY_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 }} من أجل تثبيت التبعية الخاصة private-code-specialist-example-package على https://pypi.code-specialist.com/simple/ ، فإن 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 " }