Przejdź do głównej zawartości

GitHub

Po połączeniu Speedwave pracuje z repozytorium tak jak programista: zagląda do jego zawartości, śledzi pull requesta przez kolejne commity i uruchomienia CI, a do tego zostawia uwagi w przeglądzie kodu.

GitHub działa jako osobny worker, czyli kontener, który ma dostęp wyłącznie do tokenów GitHub. Speedwave zapisuje twój token w katalogu tokenów projektu i podpina go do workera tylko do odczytu pod ścieżką /tokens/token, więc kontener dosięga jedynie GitHub.com i nic poza tym. To, jak takie podpięcie i uprawnienia plików wyglądają w każdej integracji, opisuje rozdział Dane uwierzytelniające.

Połączenie przebiega przez OAuth device flow GitHuba: Speedwave wyświetla kod, ty zatwierdzasz go na https://github.com/login/device, a token ląduje na dysku, ani razu nie zahaczając o interfejs projektu w przeglądarce. Aplikacja OAuth Speedwave prosi o zakresy repo i read:user, czyli o odczyt i zapis w repozytoriach prywatnych i publicznych, w issues, pull requestach, wydaniach i Actions, a na dokładkę o odczyt twojego konta na potrzeby testu połączenia.

Ręczny token przydaje się awaryjnie, kiedy device flow się nie sprawdza, na przykład przy konfiguracji bezgłowej. Wklej token zaczynający się od gho_ (token użytkownika aplikacji OAuth), github_pat_ (fine-grained PAT) albo ghp_ (klasyczny PAT); worker weźmie każdy z nich i nie przygląda się prefiksowi, więc sam zadbaj o to, żeby obejmował te same zakresy co wyżej.

Od tej chwili worker daje ci do ręki 45 narzędzi ułożonych w grupy: repozytoria, pull requesty, przeglądy pull requestów, gałęzie, commity, zawartość repozytorium, Actions, issues, etykiety i wydania. Kilka z nich warto poznać bliżej:

  • createPrComment zostawia ogólny komentarz w wątku rozmowy, a createPrReviewComment przypina komentarz do konkretnej linii w diffie, bo GitHub udostępnia do tego dwa osobne endpointy. createPrReview i listPrReviews działają na poziomie całego przeglądu, co ma znaczenie, gdy zaprzęgasz Speedwave do przeglądu kodu.
  • triggerWorkflow odpala ręczne wykonanie workflow_dispatch, a rerunWorkflow powtarza już istniejące. getRunLogs i downloadArtifact zwracają krótko ważny download_url prowadzący do pliku ZIP, zamiast pobierać go i rozpakowywać za ciebie; listWorkflowRunArtifacts najpierw pokaże ci, co jest do wzięcia. Pobieraj od razu, bo adres szybko traci ważność.
  • getFileContents odczytuje plik, a getTree wypisuje drzewo katalogu; jeśli nie podasz gałęzi, oba biorą domyślną gałąź repozytorium, a jeśli wskażesz którymś z nich katalog tam, gdzie oczekiwany jest plik, dostaniesz zrozumiały błąd. createOrUpdateFile zapisuje plik i sam dobiera bieżące SHA blobu, gdy go nie podasz.
  • createRelease sam założy tag, jeśli takiego jeszcze nie ma, więc nie musisz wcześniej sięgać po createTag.

Worker łączy się z GitHub.com wyłącznie przez https://api.github.com; GitHub Enterprise Server nie jest obsługiwany. Brakuje też narzędzia do blame, bo REST API GitHuba nie ma endpointu blame na poziomie linii.

NarzędzieCo robi
listReposWypisuje lub wyszukuje repozytoria widoczne dla konta.
getRepoOdczytuje szczegóły jednego repozytorium.
searchCodeWyszukuje kod w GitHubie, opcjonalnie w obrębie jednego repozytorium.
listPullRequestsWypisuje pull requesty z filtrami stanu, gałęzi lub bazy.
getPullRequestOdczytuje szczegóły jednego pull requesta.
createPullRequestZakłada nowy pull request, roboczy albo gotowy do przeglądu.
updatePullRequestZmienia tytuł, opis, gałąź bazową lub stan pull requesta.
mergePullRequestScala pull request. Działanie nieodwracalne.
getPrDiffZwraca ujednolicony diff pull requesta jako tekst.
getPrFilesWypisuje zmienione pliki pull requesta wraz ze statystykami dla każdego z nich.
listPrCommitsWypisuje commity wchodzące w skład pull requesta.
listPrReviewsWypisuje przeglądy zgłoszone dla pull requesta.
createPrReviewZgłasza przegląd: zatwierdzenie, prośbę o zmiany albo komentarz, wraz z opcjonalnymi komentarzami inline.
listPrCommentsWypisuje ogólne (nie przeglądowe) komentarze do pull requesta.
createPrCommentDodaje ogólny komentarz do pull requesta.
createPrReviewCommentDodaje komentarz przeglądu przypięty do linii w diffie.
listBranchesWypisuje gałęzie repozytorium.
getBranchOdczytuje szczegóły jednej gałęzi.
createBranchTworzy gałąź z commita lub innej gałęzi.
deleteBranchUsuwa gałąź. Działanie nieodwracalne.
compareBranchesPorównuje dwie gałęzie lub commity.
listCommitsWypisuje commity z filtrami gałęzi, ścieżki, autora i zakresu dat.
listBranchCommitsWypisuje commity na konkretnej gałęzi.
searchCommitsWyszukuje wiadomości commitów w GitHubie.
getCommitDiffZwraca ujednolicony diff jednego commita jako tekst.
getTreeWypisuje drzewo plików lub katalogów repozytorium.
getFileContentsOdczytuje zawartość pliku; zwraca błąd, jeśli ścieżka wskazuje katalog.
createOrUpdateFileZapisuje plik razem z commitem, sam dobierając bieżące SHA blobu, jeśli go nie podasz.
listWorkflowRunsWypisuje uruchomienia workflow Actions, z filtrowaniem po gałęzi lub statusie.
getWorkflowRunOdczytuje szczegóły jednego uruchomienia workflow.
getRunLogsZwraca krótko ważny adres do pobrania ZIP-a z logami uruchomienia.
rerunWorkflowPonawia istniejące uruchomienie workflow.
triggerWorkflowUruchamia ręczne wykonanie workflow_dispatch.
listWorkflowRunArtifactsWypisuje artefakty wytworzone przez uruchomienie workflow.
downloadArtifactZwraca krótko ważny adres do pobrania ZIP-a z artefaktem.
listIssuesWypisuje issues, pomijając pull requesty, z filtrami stanu i etykiet.
getIssueOdczytuje szczegóły jednego issue.
createIssueOtwiera nowe issue.
updateIssueZmienia w issue tytuł, opis, stan, etykiety lub przypisane osoby.
closeIssueZamyka issue.
listLabelsWypisuje etykiety zdefiniowane w repozytorium.
createLabelTworzy nową etykietę.
createTagTworzy tag Git, lekki lub z opisem.
deleteTagUsuwa tag Git. Działanie nieodwracalne.
createReleaseTworzy wydanie, najpierw tworząc jego tag, jeśli to potrzebne.
  1. Otwórz integracje projektu i wybierz GitHub.

  2. Kliknij Sign in with GitHub i zatwierdź kod urządzenia, który Speedwave pokaże ci na https://github.com/login/device.

  3. Gdy tylko zatwierdzisz, Speedwave zapisuje otrzymany token w katalogu tokenów projektu, a GitHub od razu jest w projekcie gotowy do pracy.

Kiedy wywołanie GitHuba się nie uda, worker przekłada odpowiedź na prostą wskazówkę:

StatusZnaczenie
401Token stracił ważność. Połącz GitHub jeszcze raz, żeby dostać nowy.
403, limit żądańWyczerpany limit żądań. Worker sam ponawia próbę do dwóch razy; odczekaj chwilę i spróbuj jeszcze raz.
403, uprawnieniaToken nie ma do tego uprawnień. Połącz się na nowo przez OAuth, żeby ponownie przyznać zakresy, albo sprawdź uprawnienia ręcznego PAT.
404Nie znaleziono elementu.
422Walidacja się nie powiodła; komunikat mówi, co poszło nie tak.
5xxBłąd serwera po stronie GitHuba.
Błąd sieciWorkerowi nie udało się połączyć z api.github.com; sprawdź swoje połączenie.

Worker GitHuba czyta wyłącznie tokeny GitHub. Nie ma wglądu w dane uwierzytelniające żadnej innej usługi, a hub, który przekazuje mu wywołania narzędzi, sam nie trzyma żadnych tokenów, więc zasięg przejętego workera kończy się na GitHubie. Ta granica trzyma się nawet wtedy, gdy Speedwave zostawia automatyczne komentarze w ramach przeglądu kodu: worker może działać na pull requeście, a mimo to nie widzi danych uwierzytelniających żadnej innej integracji.