Przepływy pracy GitHub Actions mogą być używane do automatycznego kompilowania i testowania oprogramowania układowego przy każdej zmianie (commit). Mogą one, ale nie muszą, tworzyć wydania Github (Releases), jeśli nie, pliki kompilacji można pobrać tylko za pośrednictwem szczegółów akcji Github. Domyślnie te pliki binarne wymagają ręcznego pobrania, ale tutaj pokażę, jak to zautomatyzować.
Celem projektu jest stworzenie auto-updatera dla firmware MCU WiFi, takich jak dla BK7231, W800/W600 lub czegokolwiek innego obsługiwanego przez OpenBeken .
Podstawowa prezentacja Github Actions Binaries używana w
OpenBeken została pokazana tutaj , dzisiaj zamierzam stworzyć małe narzędzie C#, aby to zautomatyzować. Zacznijmy.
Używane narzędzia
W tej prezentacji będę używał następujących narzędzi:
- Visual Studio jako IDE i kompilator C#
- Biblioteka Octokit z NuGet dla łatwiejszego dostępu do API Github
- w niektórych późniejszych częściach użyję również HTTPClient do bezpośredniego dostępu do API Github, ponieważ miałem pewne problemy z Octokit. Odpowiedzi będą parsowane przez JSONSerializer
Biblioteka Octokit
Najpierw potrzebna będzie biblioteka Octokit. Octokit zapewnia łatwy dostęp do API Github i można go pobrać w Visual Studio poprzez "Manage NuGet Packages":
Dodaj go do swojego programu Stock Console i upewnij się, że masz prawidłowe użycie:
Kod: C#
Inicjalizacja GitHubClient
Biblioteka Octokit używa asynchronicznych zadań do działania, więc jeśli twoja główna funkcja nie jest zadaniem, będziesz musiał czekać na wynik. Oto podstawowa inicjalizacja GitHubClient:
Kod: C#
Github Access Token
Nie jest to wymagane do wystawiania pull requestów, ale jest potrzebne do artefaktów. Oczywiście będzie on również potrzebny do zapisu. Zaloguj się do Githuba i przejdź do Ustawień:
następnie do ustawień dewelopera:
a następnie Tokeny. Użyłem trybu "Klasycznego":
Utwórz token, pamiętaj, aby go zapisać. Wybierz zakres tokena w zależności od tego, do czego będziesz go używać. Nie nadawaj tokenowi pełnego dostępu do zapisu, jeśli nie chcesz używać go do zapisu do repozytorium i używaj oddzielnego tokena do celów, które masz.
Na koniec dodaj kod uwierzytelniający do próbki:
Kod: C#
Wyliczanie pull requestów
Teraz nadszedł czas, aby uzyskać tę listę:
https://github.com/openshwprojects/OpenBK7231T_App/pulls
Można to zrobić za pomocą obiektu PullRequest:
Kod: C#
Wynik:
Enumerating commit
Po otrzymaniu Pull Request można uzyskać najnowsze zatwierdzenie. Wszystkie commity mogą być wymienione w podobny sposób:
Kod: C#
Wynik:
Dostęp do przepływów pracy
W przypadku przepływów pracy potrzebna będzie osobna funkcja, która pobierze informacje JSON z Github.
Adres URL, do którego chcemy uzyskać dostęp, jest następujący:
https://api.github.com/repos/openshwprojects/...8c9a433217f3c95ef4c9bbd6777a32486d/check-runs
Hash commitu zostanie tam wstawiony.
Zwracany JSON jest bardzo prosty:
Kod: JSON
Jest to w zasadzie reprezentacja JSON każdej kompilacji tutaj:
Jesteśmy już bardzo blisko!
Przygotujmy więc HttpClient i wykonajmy żądanie GET.
Kod: C#
Następnie umieśćmy wynikowe dane JSON w klasach za pomocą JsonSerializer:
Kod: C#
Iteracja przebiegów
Gdy masz już listę przepływów pracy, możesz ją iterować:
Kod: C / C++
Wynik:
Pobieranie artefaktów
Teraz musimy uzyskać linki do plików zip. W tym celu będziemy musieli wyodrębnić numeryczny identyfikator. Identyfikator można znaleźć w danych przebiegu przepływu pracy:
Kod: C#
Oto przykładowy identyfikator przebiegu: 12328623947
Możesz teraz skonstruować link taki jak:
https://api.github.com/repos/openshwprojects/...K7231T_App/actions/runs/12305496423/artifacts
Odwiedzenie tego linku daje następujący JSON:
Kod: JSON
Nadszedł czas, aby go przeanalizować. Oto wywołanie funkcji:
Kod: C#
I implementacja:
Kod: C#
Ponownie, dane JSON są deserializowane do klas za pomocą JsonSerializer. Użyte klasy:
Kod: C#
Wreszcie nadszedł czas, aby je iterować:
Kod: C#
Wynik:
Pobieranie plików ZIP
Teraz w końcu mamy linki do plików ZIP, nie pozostało wiele do zrobienia:
Kod: C#
Obsługa pobierania:
Kod: C#
Wreszcie, po kilku chwilach pobierania, otrzymujemy pliki kompilacji OBK na naszym dysku:
Teraz czas na ich dalszą obróbkę, być może wysłanie na urządzenia poprzez OTA, ale to już zadanie na inny temat.
Ostrzeżenie! .
Bez uwierzytelnienia można łatwo osiągnąć limit szybkości API:
Error: API rate limit exceeded for 123.234.233.121. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)
Press any key to exit...
Podsumowanie
To była pierwsza część prezentacji pobierania artefaktów z Githuba. W tej części dowiedzieliśmy się, jak uzyskać dostęp do interfejsu API Github, aby wyświetlić listę pull requestów, commitów, przepływów pracy i artefaktów. Udało się również pobrać zbudowane pliki.
W następnej części przedstawię narzędzie, które oparłem na przedstawionej tutaj wiedzy:
Narzędzie to będzie w stanie automatycznie aktualizować urządzenie OBK do najnowszego kompilacji z danego PR, ułatwiając w ten sposób testowanie i rozwój.
Bądź na bieżąco!
Do czego TY wykorzystałbyś API Github?
Pełny kod demonstracyjny znajduje się w opisie:
Fajne? Ranking DIY Pomogłem? Kup mi kawę.