Automatické vydání nové verze PHP SDK krok za krokem
Délka:
8 min
Publikováno:
25. září 2023

Udržovat pořádek v changelogu, otagovat novou verzi SDK a pak ji nahrát do balíčkového repozitáře. Jsou to opakující se rutinní úkoly a každý z nich jde zautomatizovat. Vašim vývojářům tím vrátíte čas, který by jinak strávili papírováním.
V tomto návodu vám ukážeme, jak to nastavit. Projdete tři kroky:
- Založíte si účet na Packagistu a zaregistrujete své SDK.
- Bezpečně uložíte uživatelské jméno a API token z Packagistu do GitHubu.
- Nastavíte GitHub Action, který každou novou verzi SDK vydá a zveřejní.
Co budete potřebovat
Předpokládáme, že už máte funkční SDK a nahráli jste ho do repozitáře na GitHubu.
Založte si účet na Packagistu a zaregistrujte SDK
Než SDK poprvé zveřejníte, založte si účet na Packagistu tady. Zvolte pro SDK název podle konvence pojmenování na Packagistu. Pak balíček odešlete tak, že zadáte URL svého veřejného repozitáře na GitHubu.
Nastavte přihlašovací údaje
Aby GitHub mohl vaše SDK na Packagist publikovat za vás, potřebuje vaše uživatelské jméno a API token z Packagistu. Obojí můžete v GitHubu bezpečně uložit.
- Otevřete sekci Profile na Packagistu. Uživatelské jméno najdete nahoře na stránce. Klikněte na Show API Token a token zkopírujte.
- Otevřete svůj projekt na GitHubu. Přejděte do Settings > Security > Secrets and Variables > Actions a klikněte na „New repository secret“.
- Do pole Name napište
PACKAGIST_USERNAME. - Do pole Secret zadejte své uživatelské jméno z Packagistu. Potvrďte tlačítkem „Add secret“.
- Vytvořte ještě jeden secret. Tentokrát do pole Name napište
PACKAGIST_TOKENa do pole Secret vložte token, který jste zkopírovali v kroku 1. Secret přidejte.
Vydejte a zveřejněte novou verzi
Nastavte GitHub Action pro vydání nové verze SDK
Abyste nemuseli changelog upravovat a verze tagovat ručně, doporučujeme GitHub Action release-please. Sleduje změny v kódu od posledního vydání a podle vašich commit zpráv drží otevřený pull request s changelogem a navýšením verze. Když chcete novou verzi vydat, stačí ten pull request mergnout.
Workflow níže navíc novou verzi po vydání rovnou publikuje na Packagist.
Workflow nastavte takto:
Vlastník (Owner):
- V repozitáři na GitHubu přejděte do Settings > Actions > General a zaškrtněte volbu „Allow GitHub Actions to create and approve pull requests“.
Vývojář (Developer):
- V kořenovém adresáři projektu vytvořte složku
.github/workflows/. Sem patří konfigurační soubory pro GitHub Actions. - V této složce vytvořte nový YAML soubor. Pojmenujte ho
release-and-publish.yml. - Do konfiguračního souboru zkopírujte následující kód:
# This workflow opens and updates a pull request with a new package version
# based on code changes. Merging the pull request updates the version in
# composer.json, updates the changelog and creates release tags.
# This workflow also publishes the package into the Packagist repository after
# a new version has been released.
# https://github.com/marketplace/actions/release-please-action
on:
push:
branches:
- master
permissions:
contents: write
pull-requests: write
name: release-please
jobs:
release-please:
runs-on: ubuntu-22.04
steps:
- uses: google-github-actions/release-please-action@v3.7.10
with:
release-type: php
package-name: release-please-action
pull-request-title-pattern: "chore(release): ${version}"
pull-request-header: ":robot: Merge this PR to release a new version"
publish-package:
# after merging the pull request, a release tag first has to be created
# in the release-please job above, before the publish job starts
needs: release-please
if: contains(github.event.head_commit.message, 'chore(release)')
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3.5.3
- uses: hotaruma/packagist-sync@v1.0.1
with:
packagist-username: ${{ secrets.PACKAGIST_USERNAME }}
api-token: ${{ secrets.PACKAGIST_TOKEN }}
Pokud se vaše hlavní větev nejmenuje master, ale třeba main, změňte to na řádku 12. Job publish-package závisí na jobu release-please a nesmí se spustit dřív, než ten úspěšně doběhne. Release job totiž vytvoří tag verze a release na GitHubu a publish job tyto údaje potřebuje, aby na Packagist nahrál správnou verzi.
-
Ujistěte se, že
composer.jsonobsahuje vlastnost s verzí (například"version": "1.0.0"). release-please tuto vlastnost aktualizuje automaticky pokaždé, když mergnete pull request s novou verzí, takže aktuální verzi SDK přečtete přímo z kódu. -
Tyto změny zacommitujte a nahrajte na GitHub. Tím je workflow hotové. Až příště někdo přidá něco vydatelného s commit zprávou podle konvence (prefix
fix:nebofeat:), release-please otevře pull request. Jak přidáváte další kód, automaticky tento pull request aktualizuje. Až budete připraveni vydat novou verzi SDK, pull request mergnete. Verze se vydá a aktualizované SDK se zveřejní na Packagistu.
release-please se řídí specifikací sémantického verzování (SemVer), takže čísla verzí volí podle toho, jak velké vaše změny jsou. Zpětně nekompatibilní změna zvedne hlavní (major) verzi, nová funkce zvedne vedlejší (minor) verzi a oprava chyby zvedne patch verzi. Vaši uživatelé tak hned vidí, jak moc se každá nová verze SDK mění.
Aby release-please rozpoznal význam vašich změn a zvolil správné číslo verze, musí vaše commit zprávy dodržovat formát Conventional Commits. Používejte pevný prefix: „feat: add new feature“ pro novou funkci, „fix: resolve bug“ pro opravu chyby a „chore: update dependencies“ pro změnu mimo kód. Když budete konzistentní, release-please vygeneruje správná čísla verzí i changelog. Changelog navíc můžete v otevřeném pull requestu před vydáním kdykoli upravit ručně.
Závěr
Teď máte automatizované nástroje, které vydají novou verzi PHP SDK a zveřejní ji na Packagistu. S tímhle nastavením ušetříte čas i peníze, které váš tým může věnovat psaní kódu místo administrativy.
Pokud potřebujete pomoct s vývojem SDK nebo s automatizací, náš tým je připravený. Pomůžeme vám zefektivnit vývoj SDK, nastavit automatizaci a ušetřit přitom čas i peníze.
Ozvěte se nám a pojďme se o vašem SDK pobavit.
Potřebujete automatické vydání pro jinou technologii?
- Automatické vydání pro JavaScript
- Automatické vydání pro Ruby
- Prohlédněte si náš nástroj, který automatizuje všechny technologie najednou
Mohlo by vás také zajímat:
Chcete být o krok napřed?
Nenechte si utéct naše nejlepší postřehy. Žádný spam, jen praktické analýzy, pozvánky na exkluzivní eventy a shrnutí podcastů přímo do vaší schránky.