Backport derleyicisini bir yayım hattında çalıştırma
Çalışma zamanı bağımlılığı değil, derleme araçlarıdır. Bu sayfa, backport’u üreten yayım hattının nasıl işletileceğini açıklar. Hat, sürekli tümleştirme (CI) ortamında çalışır; aşağı akıştaki bir uygulamada asla çalışmaz.
Bir bakışta
“Bir bakışta” başlıklı bölümÜretim akışı iki iş akışı kullanır. 0-ci.yml, her kalıcı daldaki her değişikliği denetim kapısından geçirir. Bir kaynak yayımı, dağıtımı derleyip yayımlayan build.yml dosyasını tetikler. Her iki iş akışı da .github/workflows/ dizinindeki tanımlara göre doğrulanır.
CI denetim kapısı
“CI denetim kapısı” başlıklı bölüm0-ci.yml, PHP74 ve PHP81 için push ve pull request olaylarında çalışır. Sırayla üç iş yürütür:
- PHPStan (Build Tools) —
composer analyse,rector/rulesvescriptsiçin düzey 10. - PHPUnit (Rector Rules) —
composer test, üç özel kural için fikstür takımları. - Build Dry Run —
composer build:dry, ilk iki işin ardından denetim kapısına bağlı olarak çalışır.
Güvenilen olaylar, kendinden barındırılan PHP çalıştırıcılarını kullanır. Çatal (fork) pull request’leri ve Dependabot ise GitHub tarafından barındırılan ve PHP 8.5 ortamı sağlanan çalıştırıcıları kullanır. Bu, 0-ci.yml dosyasına göre doğrulanır (runs-on ifadesi ve koşullu setup-php adımı). Çift dallı model, her iki hedefe de dokunan değişiklikleri her dalın pull request’inde bağımsız olarak denetim kapısından geçirir.
Yayım hattı
“Yayım hattı” başlıklı bölümbuild.yml, üretim derlemesidir. repository_dispatch olayıyla (source-release türünde) ya da bir etiket girdisiyle workflow_dispatch aracılığıyla elle çalışır. Hattı sürüm etiketi yönlendirir. Bir sürüm numarası, bildirilmiş bir genel API için MAJOR.MINOR.PATCH biçimindedir (Semantic Versioning 2.0.0 §2).
PHP 8.1 şeridi
“PHP 8.1 şeridi” başlıklı bölüm- build-php81 — derleme araçlarını çalışma alanına alır, PHP 8.5 ortamını sağlar, derleme bağımlılıklarını kurar, kaynak depolarını yayım etiketinde klonlar,
scripts/build.phpdosyasını çalıştırır, çalıştırıcıyı PHP 8.1’e geçirir,output/srcdizinini PHP 8.1 üzerinde söz dizimi denetiminden geçirir, ardından üretilen paketi--no-devile kurar. Çıktıyı yapıt (artifact) olarak yükler. - validate-php81 — yapıtı indirir, ardından PHP 8.1, 8.2, 8.3 ve 8.4 matrisinde kurar ve sınar.
- release-php81 — yapıtı indirir, üretilen ağacı commit olarak işler ve etiketler,
vendor/ve.git/dizinlerini dışlayan bir zip arşivi oluşturur ve arşivin eklendiği bir GitHub yayımı yayımlar.
PHP 7.4 şeridi
“PHP 7.4 şeridi” başlıklı bölüm- build-php74 — derleme araçlarını
PHP74dalında çalışma alanına alır, PHP 8.5 ortamını sağlar, yalnızca çekirdek kaynak deposunu etikette klonlar,scripts/build.php --target=php74komutunu çalıştırır, PHP 7.4’e geçer ve çıktıyı PHP 7.4 üzerinde söz dizimi denetiminden geçirir. - validate-php74 — paketi PHP 7.4 ve 8.0 matrisinde kurar ve sınar.
- release-php74 — yalnızca çekirdek çıktıdan bir zip arşivi oluşturur ve onu ikinci bir arşiv olarak aynı yayıma ekler.
Bu akış, build.yml iş tanımlarına ve matrislerine göre doğrulanır.
İki şerit tek bir GitHub yayımını paylaşır. PHP 8.1 şeridi yayımı oluşturur, PHP 7.4 şeridi ise arşivini aynı etikete ekler.
concurrencygrububackport-build,cancel-in-progress: falseayarıyla derlemeleri teker teker çalıştırır; böylece iki kaynak yayımı yarışamaz.
Hattı işletme
“Hattı işletme” başlıklı bölümBir derlemeyi tetikleme
“Bir derlemeyi tetikleme” başlıklı bölümBir derleme, kaynak kuruluş bir yayım yayımladığında normalde otomatik olarak başlar. Belirli bir etiketi elle yeniden derlemek için build.yml dosyasını, örneğin v2.0.0 gibi bir etiket girdisiyle gönderin. Gönderim belirteci secrets.BACKPORT_TRIGGER_TOKEN olup kaynak deposu klonlamalarını yetkilendirir. Bu, build.yml dosyasına göre doğrulanır (workflow_dispatch.inputs.tag, GH_TOKEN).
Başarısız bir derlemeyi okuma
“Başarısız bir derlemeyi okuma” başlıklı bölümDerleme betiği ilk başarısız aşamada durur ve aşama adıyla birlikte hatayı yazdırır. Beş aşama şunlardır: birleştirme, Rector, composer.json üretimi, varlık kopyalama ve doğrulama. Derlemeden sonraki söz dizimi denetimi adımı başarısız olursa, Rector hedef çalışma zamanının reddettiği bir çıktı üretmiştir. Bu adım yayımı korur. Başarısızlığı nedenine eşlemek için /integrations/backport/troubleshooting/ sayfasına bakın.
Neler yayımlanır
“Neler yayımlanır” başlıklı bölümYayım, zip biçiminde sıkıştırılmış dağıtım arşivlerini içerir. Paket, dallar halinde değil, sürüm etiketleri olarak dağıtılır. Tüketiciler, nextpdf/backport paketini (ve isteğe bağlı olarak nextpdf/backport-pro paketini) yayım kanalından kurar. Arşiv, vendor/ ve .git/ dizinlerini dışlar. Bu, build.yml dosyasına göre doğrulanır (zip -r ... -x '*/vendor/*' '*/.git/*').
Çıktının sürümlenmesi
“Çıktının sürümlenmesi” başlıklı bölümÜretilen composer.json, komut satırında geçirilen sürümü taşır (--version ya da baştaki v harfi çıkarılmış gönderim etiketi). Pro paketi, nextpdf/backport paketini eşleşen major.minor şapka (caret) kısıtıyla sabitler. Bu, scripts/adjust-composer.php dosyasına göre doğrulanır (majorMinor(), generateProComposer()). replace eşlemesinin tutarlı kalması için kaynak yayım etiketi ile backport sürümünü hizalı tutun.
Sonraki adımlar
“Sonraki adımlar” başlıklı bölüm- /integrations/backport/security-and-operations/ — hattın güven sınırı ve tedarik zinciri duruşu.
- /integrations/backport/troubleshooting/ — her aşama için başarısızlık başvuru kaynağı.