NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Git for Laravel

Zápisové operácie

Všetky zápisy prijímajú typované vstupné objekty a vyžadujú prihláseného providera — neprihlásený vyhodí InvalidCredentialsException ešte pred odoslaním požiadavky:

use RoundlyConsulting\Git\Dto\Input\{NewRepository, NewBranch, NewFile, NewPullRequest, NewComment, NewRelease, NewTag};

$created = Git::github()->createRepository(new NewRepository(name: 'acme', private: true, autoInit: true));

$repo = Git::github()->repo('acme/acme');
$repo->createBranch(new NewBranch('feature/ci', 'main'));                              // the created branch ref
$commit = $repo->createFile(new NewFile('ci.yml', '...', 'Add CI', 'feature/ci'));     // Commit
$pr = $repo->createPullRequest(new NewPullRequest('Add CI', 'feature/ci', 'main', body: 'Adds the CI workflow.'));
$repo->pullRequest($pr->number)->comment('LGTM');   // or $repo->comment(new NewComment($pr->number, 'LGTM'))
$repo->createRelease(new NewRelease('v1.0', 'First release'));
$repo->createTag(new NewTag('v1.0.1', 'main'));                                         // a branch, tag or commit sha

Úprava súboru

updateFile() nahradí existujúci súbor vo vetve. Najprv ho prečítajte, aby ste získali sha blobu, ktoré úprava potrebuje:

use RoundlyConsulting\Git\Dto\Input\UpdatedFile;

$repo = Git::github()->repo('acme/acme');
$current = $repo->contents('ci.yml', ref: 'feature/ci');

$commit = $repo->updateFile(new UpdatedFile(
    path: 'ci.yml',
    content: $newYaml,
    message: 'Tune CI',
    branch: 'feature/ci',
    sha: $current->sha,     // the blob being replaced
));

Vstupné objekty

Každý vstup sa validuje už v konštruktore a vyhodí InvalidArgumentException, takže chybný zápis zlyhá priamo v mieste volania, nie až ako 422 z platformy:

VstupKonštruktorLokálne odmietnutý, keď
NewRepositoryname, private = false, description, owner, template, autoInit = false, defaultBranchNázov je prázdny, template nemá tvar owner/repo alebo je defaultBranch nastavený bez autoInit či šablóny.
NewBranchname, fromRefNiektorá hodnota je prázdna.
NewFilepath, content, message, branchCesta, správa alebo vetva je prázdna.
UpdatedFilepath, content, message, branch, shaCesta, správa, vetva alebo sha je prázdne.
NewPullRequesttitle, head, base, body = nullNázov, head alebo base je prázdny.
NewCommentnumber, body, target = nullText je prázdny.
NewReleasetagName, name, body, draft = false, prerelease = falseNázov tagu je prázdny.
NewTagname, refNiektorá hodnota je prázdna.
NewWebhookurl, events = ['push'], secret, active = trueURL je prázdna alebo chýba udalosť.
NewReviewevent, body, comments = []Review, ktoré nie je schválením, nemá text.
NewReviewCommentpath, line, body, side = Right, startLineCesta alebo text je prázdny, riadok je menší ako 1 alebo startLine nie je pred line.

Čo je dobré vedieť

  • Zápisy sa nikdy neopakujú — 5xx pri zápise už mohlo prebehnúť a druhý POST by otvoril druhý pull request.
  • createBranch() vytvorí vetvu z fromRef a vráti ju — na GitHube ako úplný ref, na GitLabe ako názov.
  • Ref v NewTag môže byť vetva, tag alebo sha. Endpoint tagov na GitHube prijíma len sha commitu, preto sa vetva či tag najprv preloží na commit, na ktorý ukazuje (úplné sha sa použije priamo).
  • Zápisy súborov — createFile() a updateFile() — vrátia commit, ktorý vytvorili, s jeho skutočným sha, autorom a dátumom, na GitHube aj na GitLabe.
  • Pre webhooky na vlastný endpoint uprednostnite idempotentného pomocníka repo($path)->webhooks() — pozrite sekciu Webhooky.

Cieľ komentára

GitHub komentuje issues aj pull requesty cez jeden endpoint, no GitLab čísluje issues a merge requesty zvlášť, preto komentár na GitLabe musí cez CommentTarget povedať, kam patrí. Komentár na GitLabe bez cieľa vyhodí InvalidArgumentException, namiesto aby hádal; ->pullRequest($n)->comment() cieľ nastaví za vás:

use RoundlyConsulting\Git\Dto\Input\NewComment;
use RoundlyConsulting\Git\Enums\CommentTarget;

$repo = Git::gitlab()->repo('acme/api');

$repo->comment(new NewComment(3, 'Thanks', target: CommentTarget::Issue)); // issue #3
$repo->comment(new NewComment(7, 'LGTM', target: CommentTarget::PullRequest)); // merge request !7
$repo->pullRequest(7)->comment('LGTM');                                     // sets the target for you

Bitbucket komentuje len pull requesty a CommentTarget::Issue odmietne s FeatureNotSupportedException.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.