Python Programming

Otomatik Python Yayınlarını Ustalıkla Yönetme: GitHub Actions, Twine ve Anlamsal Sürümleme Rehberi

Açık kaynak veya iç kütüphane dağıtımına ciddiye veren her Python geliştiricisi için PyPI'ye paketleme ve yükleme işlemi manuel olarak yapmak önemli bir darboğazdır. Hata yapmaya yatkın, sıkıcıdır ve geliştirme iş akışında sürtünme yaratır. GitHub Actions, Twine ve sıkı bir anlamsal sürümleme kullanarak bu süreci otomatikleştirerek, her yayının tekrarlanabilir, güvenli ve anlık olduğundan emin olabilirsiniz.

Modern Yayın Hattı

Güçlü bir yayın hattı, dosyaları sadece yüklemekten daha fazlasını yapar; kodunuzu doğrular, sürüm numaralarını otomatik olarak yönetir ve gizli bilgileri güvenli bir şekilde işler. Bu otomasyonun temel bileşenleri şunlardır:

  • GitHub Actions: Yeni bir etiket itme gibi belirli olaylarda iş akışlarını tetikleyen motor.
  • Setuptools / Poetry / Hatch: Dağıtım dosyalarınızı (sdist ve bdist_wheel) oluşturan araçlar.
  • Twine: Paketleri PyPI'ye yüklemek için güvenilir yardımcı program.
  • Anlamsal Sürümleme (SemVer): Sürüm numaralarının değişikliklerin doğasını yansıtmasını (Ana.Küçük.Yama) sağlayan standart.

Adım 1: Anlamsal Sürümlemeyi Zorunlu Kılma

Otomatikleştirmeden önce, sürümlerin nasıl artırılacağını tanımlamanız gerekir. versioneer desenini kullanmanızı veya Git etiketlerine güvenmenizi öneririz. İş akışı, yalnızca v* desenine uyan bir etiket itildiğinde tetiklenecektir. Bu, sürüm numaralarının bir CI çalıştırması tarafından otomatik olarak oluşturulmadığından, geliştirici tarafından açıkça beyan edildiğinden emin olur.

Adım 2: GitHub Actions İş Akışını Yapılandırma

.github/workflows/publish.yml konumunda bir dosya oluşturun. Bu YAML dosyası hattı tanımlar. İş akışı, etiketler için filtreleme yaparak create olayında çalışacaktır.

name: Python Dağıtımını PyPI'ye Yayınla

on:
  release:
    types: [published]

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write  # OIDC kimlik doğrulamasını kullan

    steps:
    - uses: actions/checkout@v4

    - name: Python'u Kur
      uses: actions/setup-python@v5
      with:
        python-version: '3.x'

    - name: Bağımlılıkları Yükle
      run: |
        python -m pip install --upgrade pip
        pip install build twine

    - name: Oluştur ve Yayınla
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
      run: |
        python -m build
        twine upload dist/*

Güvenlik En İyi Uygulamaları: OIDC Kullanımı

Yukarıdaki örnek, eski token işleme için id-token: write ve ortam değişkenleri kullanır. Ancak, modern en iyi uygulama, PyPI için OpenID Connect (OIDC) kullanmaktır. Bu, GitHub Actions'ın uzun ömürlü API token'larını depo gizli bilgilerinizde saklamadan güvenilir bir kimlik almasını sağlar. Bunu etkinleştirmek için PyPI proje ayarlarınızda bir OIDC sağlayıcısı yapılandırmanız gerekir.

Maksimum güvenlik için publish adımınızı aşağıdaki gibi güncelleyin:

    - name: Dağıtımı PyPI'ye Yayınla
      run: twine upload dist/*
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}

Not: OIDC kullanırken, şifreyi gizli bilgilerde saklamanıza genellikle gerek yoktur. Bunun yerine, actions/setup-python adımı veya belirli bir OIDC adımı kimlik doğrulamayı dinamik olarak yönetir.

Adım 3: Dağıtımı Oluşturma

İş akışında python -m build kullanıyoruz. Bu, setup.py sdist bdist_wheel için modern bir yerini almıştır. Yerel ortamınızdan izole edilmiş build kullandığınızdan emin olur ve tekerlek dosyalarının (wheel files) temiz bir konteynerda olduğu gibi tam olarak oluşturulmasını garanti eder. Bu adım, hem kaynak dağıtımını hem de ikili tekerleği içeren dist/ klasörünü üretir.

Sonuç

Python paket yayınlarınızı otomatikleştirmek, manuel bir görevi güvenilir ve denetlenebilir bir sürece dönüştürür. GitHub Actions'ı kullanarak, yayın mantığını yerel makinenizden ayırırsınız. Twine ve OIDC kullanarak yüksek güvenlik standartlarını korursunuz. Son olarak, Git etiketleri aracılığıyla anlamsal sürümlemeye bağlı kalarak, kullanıcılarınıza yazılımınızın kararlılığı hakkında netlik sağlarsınız.

Bu iş akışını kritik olmayan bir projede uygulayarak başlayın. Ana depoya itmeden önce TestPyPI'de bir test paketi oluşturarak test edin. Hattınız kararlı hale geldiğinde, yeni özellikleri yayınlamanın bir işlemi etiketlemek kadar basit hale geleceğini göreceksiniz; bu da dağıtımları yönetmek yerine kod yazmaya odaklanmanızı sağlar.

Share: