Všetky balíky
Git for Laravel
Merge a review pull requestov
Zatvorenie, schválenie a merge pull requestu:
use RoundlyConsulting\Git\Enums\MergeMethod;
$pr = Git::github()->repo('acme/acme')->pullRequest($number);
$pr->close(); // PullRequest, state closed — never merges
$pr->approve('LGTM'); // the review's own state, e.g. "APPROVED"
$sha = $pr->merge(
MergeMethod::Squash, // Merge | Squash | Rebase — a repository may disallow any of them
sha: $headSha, // the head commit you decided about
title: 'Add CI (#7)',
message: 'Squashed by the release bot.',
);- Merge, ktorý platforma odmietne, vyhodí výnimku. 405 (ochrana vetvy, povinná kontrola, nepovolená metóda mergu) a 409 (konflikt alebo nesediace sha) prídu ako RequestException — úspešný návrat vždy znamená, že merge prebehol, takže neexistuje merged: false na kontrolu.
- Odovzdajte sha — head commit, o ktorom ste rozhodli. Bez neho sa push, ktorý príde medzi review a mergom, zmerguje bez povšimnutia; s ním skončí odpoveďou 409.
- close() vždy len zatvára — nikdy nemerguje a nikdy znovu neotvára.
- GitHub nedovolí účtu schváliť vlastný pull request. Pre aplikáciu je každý pull request, ktorý otvorila, jej vlastný, takže služba, ktorá pull requesty vytvára, ich nemôže aj schvaľovať.
Publikovanie review
Celé review jedným volaním — verdikt, zhrnutie a inline komentáre ukotvené v diffe:
use RoundlyConsulting\Git\Dto\Input\{NewReview, NewReviewComment};
use RoundlyConsulting\Git\Enums\{DiffSide, ReviewEvent};
$pr = Git::github()->repo('acme/acme')->pullRequest($number);
$review = $pr->review(new NewReview(
event: ReviewEvent::Comment, // Comment | Approve | RequestChanges
body: 'Two findings, one blocking.',
comments: [
new NewReviewComment('app/Foo.php', 42, 'This nulls out on the retry.'),
new NewReviewComment('app/Bar.php', 7, 'Deleted line, so anchor it left.', DiffSide::Left),
// A finding about a block: lines 30–36, inclusive.
new NewReviewComment('app/Baz.php', 36, 'This whole branch is unreachable.', startLine: 30),
],
));- Jedna požiadavka, nie jedna na každý komentár. GitHub publikuje review atomicky, takže pri chybe na pull requeste nikdy nezostane polovičné review.
- Approve a RequestChanges sú na vlastnom pull requeste odmietnuté (422), presne ako approve(). Účet, ktorý pull requesty vytvára, môže na vlastnú prácu dať len Comment — verdikt, podľa ktorého má čitateľ konať, preto patrí do textu review.
- Komentár ukotvený mimo diffu je tiež 422 — riadok sa nezmenil. Odstránené riadky ukotvite cez DiffSide::Left; predvolená je strana Right.
- startLine musí byť pred line; obrátený alebo nulový rozsah sa odmietne lokálne cez InvalidArgumentException.
Čítanie review
$reviews = $pr->reviews();
$reviews->reviews; // list<PullRequestReview> — state, body, author, submittedAt
$reviews->comments; // list<PullRequestReviewComment> — body, path, line, side, reviewId
$reviews->isEmpty(); // nobody has reviewed it at all
$latest = $reviews->latest(); // the newest SUBMITTED review, or null
$latest?->state; // 'APPROVED' | 'CHANGES_REQUESTED' | 'COMMENTED' | 'DISMISSED' | …
$reviews->commentsFor($latest); // just the findings that review published
foreach ($reviews->comments as $comment) {
if ($comment->isOutdated()) { // line is null — the anchor was dropped
continue;
}
}- Použite latest(), nie end($reviews->reviews). GitHub vracia review od najstaršieho, no rozpracovaný koncept nemá submittedAt a aj tak je zoradený posledný — naivné čítanie by vrátilo verdikt, ktorý nikto nepublikoval.
- Oba endpointy sa prechádzajú až do konca (maxPages, predvolene 5; perPage 100), pretože jedna stránka dlhého vlákna obsahuje jeho najstaršie review.
- submittedAt je null pri rozpracovanom koncepte, line je null pri zastaranom komentári, ktorému GitHub odobral ukotvenie, a createdAt je null namiesto aktuálneho času, ak payload časovú značku nemá.
GitLab a Bitbucket pri zatváraní, schvaľovaní, review aj merge vyhodia FeatureNotSupportedException — ak pracujete s viacerými platformami, overte supports(Feature::MergePullRequest).
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 kryptomienOdoslaní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.