اسسلسلہ کے پہلے دو حصوں میں، ہم نے : - ایک کام کرنے والی 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 بنانے کو یقینی بنائیں۔ - شرطی اشاعت کی تیار کرنا اعتمادات کی اپ ڈیٹ خودکار بنائیں

آپ کے پاس اب ایک سیआई/سی ڈی پائلائن ہےمکمل، صنعتی اور محفوظ, آپ کے پروژیکٹس کے ساتھ ترقی کرنے کے لئے تیار.

متعلقہ مضامین