CI/CD Python – حصہ 3 : Poetry, Docker اور پbleshing کے اگلے مرحلے کے ساتھ آگے بڑھیں
شائع شدہ: 19 July 2025
اسسلسلہ کے پہلے دو حصوں میں، ہم نے : - ایک کام کرنے والی CI/CD لائن بنائی گئی ایک پایتھن ایپلیکیشن کے لیے GitHub Actions اور PyPI کے ساتھ۔ - یہ لائن پاپ لائن multi-version tests کے ساتھ، Test PyPI کے ذریعے درجelijk نشر، اور معیار اور محفوظتی اوزار کے ساتھ صنعتی بنایا گیا ہے۔
یہ تیسرا حصہ ہے، ہم جانے والے ہیںPyPI پر سادہ اشاعت سے باہرایک مکمل، مضبوط اور پیشہ ورانہ سی آئی/ڈی چین بنانے کے لیے : - شاعریمُعاصر پیکیجنگ اور انحصارات کی بہتر بنائی کے لیے - ڈاکربنانے کے لیے قابلِ تجدید متعدد پلیٹ فارم بِلڈز - شرطیہ اشاعتریلیز کینڈیڈیٹس جیسے سيناريوز کو منیج کرنے کے لئے. - خودکاری کے آلات(Renovate, Dependabot) بیکوفری کے ساتھ پائلائن کو اپ ڈیٹ رکھیں
Poetry کے ساتھ انٹیگریشن
Poetry پرانے پیکجنگ ٹولز (setup.py, requirements.txt) کو تبدیل کرتی ہے، ڈپینڈنسیز اور بیلڈ کے منٹینمنٹ کو مرکزی بن کرنے میں`pyproject.toml`.
Poetry کا انسٹال
# Installer Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Vérifier la version
poetry --version
پروجیکٹ کی ابتدائی ترتیبی
# Initialiser un nouveau projet avec Poetry
poetry init
# Suivre l'assistant pour renseigner : nom, version, description, licence, dépendances.
یہ ایک فائل بناتا ہے`pyproject.toml`:
[tool.poetry]
name = "playlist-downloader"
version = "0.1.0"
description = "CLI tool for managing YouTube playlists"
authors = ["Christophe Hérolivier <[email protected]>"]
[tool.poetry.dependencies]
python = ">=3.8"
typer = "^0.9.0"
yt-dlp = "^2023.7.6"
google-api-python-client = "^2.0.0"
google-auth-oauthlib = "^1.0.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.0"
mypy = "^1.0"
bandit = "^1.7"
safety = "^2.3"
black = "^23.0"
ruff = "^0.1"
انحصارات شامل کرنے اور ان کی تنصیب
poetry add typer yt-dlp google-api-python-client google-auth-oauthlib
poetry add --group dev pytest mypy black bandit safety ruff
شاعری کے ساتھ اشاعت
Poetry اندرونی طور پر نشر کرنے کو منظم کرتا ہے :
# Publication sur Test PyPI
poetry publish --build --repository test-pypi
# Publication sur PyPI
poetry publish --build
یہ کومانڈ خودکار طور پر موجودہ معلومات کے اندر استعمال کرتی ہے`pyproject.toml`.
ڈاکر کے ساتھ قابل بازپَنَش بنائیں
تطوير، سی آئی/سی ڈی اور پروڈクشن میں یکساں تنفِيذ کو یقینی بنانے کے لیے، Docker Poetry کے ساتھ بِلکل مل جاتا ہے۔
Dockerfile کا مثال
FROM python:3.11-slim
WORKDIR /app
COPY pyproject.toml poetry.lock ./
RUN pip install poetry
RUN poetry install --no-root --only main
COPY . .
CMD ["poetry", "run", "python", "cli.py"]
یہ ضمانت دیتا ہے: - منجمد PythoN ماحول قفل شدہ انحصارات واسطے`poetry.lock`. - ڈاکر سپورٹ کرنے والے کسی بھی سسٹم پر قابل اجرا تصویر
GitHub Actions میں انٹگریشن
name: Docker Build
on:
push:
branches: [main]
jobs:
build-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t ghcr.io/${{ github.repository }}:latest .
- name: Push Docker image
run: docker push ghcr.io/${{ github.repository }}:latest
شرطی اشاعت
حرفہ این پائف لائن میں، صرف مخصوص حالات میں شیئر کرنے کی صلاحیت ہونا ضروری ہے : - Test PyPI کے لئے ریلیز کینڈ ایڈیڈی - مستحکم ورژنوں PyPI کی طرف - صرف trigger ہونے والی Docker بنائیں`main`.
- name: Publish to Test PyPI
if: contains(github.ref, '-rc')
run: poetry publish --build --repository test-pypi
- name: Publish to PyPI
if: startsWith(github.ref, 'refs/tags/v')
run: poetry publish --build
یہ tarīqah accidental publication se bachti hai.
Renovate اور Dependabot کے ساتھ انحصارات کی خودکاری
اپنی وابستگیوں کے پرانے ہونے سے بچنے کے لیے، خودکار اپ ڈیٹ ٹولز شامل کریں۔
Dependabot
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
Dependabot ہر ہفتے Python اور GitHub Actions کی وابستگیوں کو اپ ڈیٹ کرنے کے لیے PRs کھلتا ہے۔
مرمت کرنا
{
"extends": ["config:base"],
"packageRules": [
{
"matchManagers": ["pip"],
"groupName": "python-dependencies",
"schedule": ["before 6am on monday"]
}
]
}
Renovate مزید دقیق کنٹرول کی اجازت دیتا ہے: انحصارات کا grouping, شیڈولنگ، اور progressed rules.
PlantUML ڈائگرامات
استعمال کی حالت – CI/CD پیشرو
@startuml actor Developer actor GitHub as "GitHub Actions" actor PyPI actor DockerRegistry as "Docker رجسٹری" actor Automation as "نو بنانا/Dependabot" Developer --> (Push code) (Trigger CI) --> GitHub GitHub --> (Run Tests & Lint) GitHub --> (Build Docker Image) GitHub --> DockerRegistry GitHub --> (Publish to Test PyPI) GitHub --> (Promote to PyPI) Automation --> (Update Dependencies) @enduml
ترتیب – شرطي شائع کرنا
@startuml !theme vibrant left to right direction Developer -> GitHub: Push tag v1.2.3-rc GitHub -> CI: Run tests CI -> CD: Check release type CD -> Test PyPI: Publish RC Developer -> GitHub: Push tag v1.2.3 GitHub -> CD: Publish to PyPI CD -> Docker Registry: Push Docker image @enduml
ریاستوں – سی آئی ڈی سی لائن
@startuml [*] --> Idle Idle --> CI_Running : push CI_Running --> CI_Success : tests ok CI_Running --> CI_Failed : tests fail CI_Success --> CD_Running : tag detected CD_Running --> CD_Success : publish ok CD_Running --> CD_Failed : error CD_Success --> [*] @enduml
ڈپلویمنٹ – CI/CD آرکیٹیکچر
@startuml
node "ڈویلپر مشین" {
component "گٹ کلائنٹ"
}
node "GitHub Actions" {
component "سی آئی کام کی ترتیب"
component "CD کام کی پیشرفت"
}
node "پیکج ریپوزٹریز" {
artifact "ٹیسٹ PyPI"
artifact "PyPI"
artifact "Docker Registry"
}
"ڈویلپر مشین" --> "GitHub Actions"
"GitHub Actions" --> "ٹیسٹ PyPI"
"GitHub Actions" --> "PyPI"
"GitHub Actions" --> "Docker Registry"
@enduml
نتیجہ
Is teesre hissay mein, hum ne dekha ke: - Poetry کے ساتھ Python کے packaging کو اپ ڈیٹ کریں - ڈاکر کے ذریعے قابلِ باز-production بنانے کو یقینی بنائیں۔ - شرطی اشاعت کی تیار کرنا اعتمادات کی اپ ڈیٹ خودکار بنائیں
آپ کے پاس اب ایک سیआई/سی ڈی پائلائن ہےمکمل، صنعتی اور محفوظ, آپ کے پروژیکٹس کے ساتھ ترقی کرنے کے لئے تیار.