---
title: "GitHub Actions — Git for Laravel | Roundly"
description: "Spustite workflow a získajte run, ktorý spustil, sledujte jeho stav, joby a kroky, vyhľadávajte runy podľa vetvy, udalosti či stavu a rušte ich."
url: https://roundly-consulting.com/sk/open-source/navody/git-for-laravel/github-actions
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Git for Laravel](https://roundly-consulting.com/sk/open-source/navody/git-for-laravel.md)

# GitHub Actions

repo($path)->actions() ovláda GitHub Actions jedného repozitára: spustí workflow na refe, vráti run, ktorý GitHub spustil, umožní ho sledovať — jeho stav, joby aj kroky každého jobu — a zrušiť. GitLab a Bitbucket vyhodia FeatureNotSupportedException; ich pipeline balík nemapuje.

```php
use RoundlyConsulting\Git\Enums\WorkflowStatus;
use RoundlyConsulting\Git\Facades\Git;

$actions = Git::github($credential)->repo('acme/infra')->actions();

$dispatched = $actions->dispatch('deploy.yml', 'refs/heads/main', ['request_id' => $id]);
$run = $actions->run($dispatched->runId);              // WorkflowRun
$run->isActive();                                       // poll until completed

$actions->runs('deploy.yml')->branch('main')->event('workflow_dispatch')
    ->status(WorkflowStatus::InProgress)->createdAfter($since)->get();   // Page<WorkflowRun>

$actions->jobs($run->id)->allAttempts()->lazy();        // WorkflowJob, with ->steps
$actions->jobs($run->id)->perPage(1)->get()->total;    // did the run start any job?
$actions->cancel($run->id);                             // true = accepted, false = already done
```

| Metóda handle | Vracia |
| --- | --- |
| `dispatch($workflow, $ref, $inputs = [])` | DispatchedWorkflow — runId, apiUrl a url runu, ktorý GitHub spustil, a dispatchedAt. |
| `runs(?$workflow)` | WorkflowRunQuery — od najnovšieho; bez workflowu všetky workflowy repozitára. |
| `run($id)` | WorkflowRun — run v aktuálnom stave. |
| `jobs($runId)` | WorkflowJobQuery — posledný pokus, pokiaľ nezavoláte allAttempts() alebo attempt($n). |
| `cancel($runId)` | bool — true, keď GitHub zrušenie prijal, false, keď run už skončil (409). |

Každé id workflowu aj runu sa skontroluje ešte pred požiadavkou — id skončí v URL a ../7 či 7/jobs by oslovili iný zdroj. Workflow je názov jeho súboru (deploy.yml — jeden segment s koncovkou .yml alebo .yaml) alebo jeho číselné id a id runu tvoria len číslice; čokoľvek iné vyhodí OutOfScopeException. dispatch() a cancel() vyžadujú prihlasovacie údaje.

## Spustenie workflowu

- $ref sa odošle tak, ako ho zadáte — funguje main aj refs/heads/main. $inputs sú vstupy, ktoré workflow deklaruje, každý ako reťazec, číslo alebo boolean; pozičný kľúč, vnorená hodnota či null vyhodí InvalidArgumentException. Koľko vstupov workflow prijme, určí odpoveď 422 z GitHubu, nie limit na strane klienta.
- Na github.com a GHE.com GitHub odpovie runom, ktorý spustil, takže runId, apiUrl aj url sú vyplnené. GitHub Enterprise Server túto odpoveď nezdokumentoval, preto sú tam všetky tri null — run nájdete postupom nižšie.
- dispatchedAt je lokálny čas prečítaný ešte pred odoslaním požiadavky, takže dopyt od tohto času run nemôže minúť.
- Spustenie sa nikdy neopakuje: stratená odpoveď a následné opakovanie by spustili druhý build.

## Nájdenie runu bez runId

Na GitHub Enterprise Server, alebo keď preberáte run spustený inde, vložte do run-name workflowu značku — run-name: deploy \[${{ inputs.request\_id }}\] — a hľadajte ju medzi runmi vytvorenými od spustenia:

```php
use RoundlyConsulting\Git\Dto\WorkflowRun;

// .github/workflows/deploy.yml — run-name: deploy [${{ inputs.request_id }}]
$candidates = $actions->runs('deploy.yml')
    ->event('workflow_dispatch')
    ->branch('main')
    ->createdAfter($dispatched->dispatchedAt->copy()->subMinute())
    ->get();

$run = $candidates->collect()->first(fn (WorkflowRun $run) => str_contains($run->displayTitle, "[{$id}]"));
```

Pravidlá párovania — aká značka, najstarší alebo najnovší run, ďalšie kontroly path či headBranch — zostávajú na vás; balík kvôli nim nerobí žiadne ďalšie volanie API.

## Dopyty na runy a joby

- runs() filtruje cez branch(), event(), status(), actor() (login), headSha(), createdAfter() a createdBefore(). status() prijme WorkflowStatus aj WorkflowConclusion — GitHub berie oboje v jednom filtri — a pre Unknown vyhodí InvalidArgumentException.
- createdAfter() a createdBefore() porovnávajú v UTC na sekundy a vašu inštanciu Carbon nikdy neposunú. excludePullRequests() len vynechá pull\_requests každého runu z odpovede GitHubu — nič nefiltruje.
- total stránky je total\_count z GitHubu. GitHub filtrované vyhľadávanie runov zastaví na 1 000 výsledkoch, takže tam skončí aj lazy() — total väčší, než koľko ste prečítali, vás na to upozorní.
- jobs() číta posledný pokus runu; allAttempts() číta všetky pokusy a attempt($n) jeden z nich (1 je prvé spustenie). Obe naraz alebo pokus menší ako 1 vyhodia InvalidArgumentException.

## Sledovanie a rušenie

- run($id) prechádza podmienenou cache, takže pri GIT\_CACHE\_ENABLED=true sa nezmenený run vráti ako 304, ktorú GitHub nezapočítava do primárneho limitu.
- isActive() platí pre všetko okrem completed — vrátane stavu Unknown —, takže sledovanie sa nikdy nezastaví na stave, ktorý nevie prečítať. Stav alebo výsledok, ktorý GitHub pridá neskôr, sa prečíta ako Unknown a nikdy sa nepočíta za dokončený ani úspešný.
- runStartedAt je čas vytvorenia, kým run čaká (queued, waiting); spoľahnite sa naň až vtedy, keď run beží.
- GitHub ruší asynchrónne: true znamená, že zrušenie prijal, a výsledok ukáže ďalšie run() (wasCancelled()). false znamená, že run už skončil. Vynútené zrušenie (force-cancel) balík neponúka.

## Výsledné objekty

| Objekt | Polia |
| --- | --- |
| `WorkflowRun` | id, workflowId, name, displayTitle, status, conclusion, event, path, headBranch, headSha, headRepository, runNumber, runAttempt, actor, triggeringActor, url, createdAt, updatedAt, runStartedAt — a navyše isCompleted(), isActive(), succeeded(), wasCancelled() |
| `WorkflowJob` | id, runId, name, status, conclusion, headSha, runAttempt, workflowName, headBranch, startedAt, completedAt, runnerName, labels, url, steps (zoznam JobStep) — a navyše succeeded() a step($name) |
| `JobStep` | number, name, status, conclusion, startedAt, completedAt — a navyše succeeded() |
| `DispatchedWorkflow` | provider, workflow, ref, runId, apiUrl, url (null, keď ich GitHub neuviedol), dispatchedAt |
| `WorkflowStatus` | Requested, Queued, Pending, Waiting, InProgress, Completed, Unknown |
| `WorkflowConclusion` | Success, Failure, Neutral, Cancelled, Skipped, TimedOut, ActionRequired, Stale, StartupFailure, Unknown |

Payload runu alebo jobu bez použiteľného id vyhodí InvalidArgumentException s názvom poľa — id si balík nikdy nevymyslí.

## Oprávnenia

Obmedzený token GitHub App potrebuje pre jednotlivé volania tieto oprávnenia:

| Volanie | Oprávnenie |
| --- | --- |
| `dispatch(), cancel()` | `actions: write` |
| `runs(), run(), jobs()` | `actions: read` |
| `compare(), branch(), activity()` | `contents: read` |

```php
use RoundlyConsulting\Git\Dto\Credentials\GithubAppToken;
use RoundlyConsulting\Git\Dto\Input\InstallationTokenScope;

$credential = GithubAppToken::for($appId, $installationId, $privateKey)->forScope(
    new InstallationTokenScope(repositories: ['acme/infra'], permissions: ['actions' => 'write']),
);

Git::github($credential)->repo('acme/infra')->actions()->dispatch('deploy.yml', 'main');
```

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/git-for-laravel.md)
