GitHub Actions to wbudowana w GitHub platforma CI/CD i automatyzacji, która umożliwia uruchamianie kompilacji, testowania i wdrażania aplikacji mobilnych bezpośrednio z repozytorium. Według danych GitHub, 2024, platforma obejmuje ponad 15 000 gotowych akcji w marketplace, pokrywających wszystkie etapy rozwoju od lintingu po publikację w sklepach z aplikacjami.
Najważniejsze
GitHub Actions to platforma automatyzacji przepływów pracy wbudowana w GitHub, uruchomiona w 2019 roku. Umożliwia definiowanie pipeline’ów CI/CD w plikach YAML przechowywanych bezpośrednio w repozytorium. Każdy workflow uruchamiany jest przez wyzwalacz: push, pull request, utworzenie tagu lub zgodnie z harmonogramem. W przeciwieństwie do Jenkinsa czy TeamCity, nie wymaga osobnej infrastruktury do hostowania serwera CI.
W kontekście programowania aplikacji mobilnych GitHub Actions automatyzuje kompilację APK i IPA, uruchamianie testów jednostkowych i interfejsu na emulatorach, sprawdzanie kodu linterami, podpisywanie oraz publikację w Google Play i App Store. Platforma oferuje darmowe minuty dla publicznych repozytoriów oraz dla prywatnych — w zależności od planu taryfowego. Dla projektów open-source aplikacji mobilnych jest to pełnowartościowe rozwiązanie CI/CD bez kosztów.
Architektura GitHub Actions składa się z czterech poziomów. Workflow to główny plik YAML definiujący automatyzację. Workflow składa się z Jobs, każde zadanie wykonywane jest na osobnym Runnerze. Wewnątrz Job wykonywane są Steps — sekwencyjne polecenia lub zewnętrzne akcje. Events określają wyzwalacze uruchomienia: push, pull_request, schedule, workflow_dispatch. Workflow może być również wywołany ręcznie przez zakładkę Actions w interfejsie GitHub.
GitHub udostępnia hostowane runnery z preinstalowanymi systemami operacyjnymi: Ubuntu, macOS i Windows. Do kompilacji iOS wymagany jest runner macOS, do Androida — Linux lub macOS. Self-hosted runners umożliwiają uruchamianie zadań na własnych serwerach z niestandardowym środowiskiem, co jest przydatne w dużych projektach ze szczególnymi wymaganiami sprzętowymi. GitHub obsługuje również grupy self-hosted runners do organizowania kolejki wykonywania zadań.
Podstawowy plik workflow zawiera sekcje: name, on (wyzwalacze), jobs. Każde zadanie określa runs-on (typ runnera), strategy (macierz), steps (lista działań). Steps mogą być poleceniami shell lub gotowymi akcjami z marketplace, podłączanymi przez składnię owner/repo@version.
W przypadku kompilacji Android workflow zazwyczaj obejmuje kroki: checkout repozytorium, instalacja JDK, konfiguracja cache’u Gradle, uruchomienie assembleRelease. Dla iOS wymagany jest runner macOS, instalacja Xcode przez xcode-select, konfiguracja provisioning profile i uruchomienie xcodebuild. Złożoność kompilacji iOS związana jest z code signing i zarządzaniem certyfikatami. Ustawienia specyficzne dla Apple obejmują zarządzanie provisioning profile przez apple-actions/import-codesign-certs.
Matrix strategy umożliwia uruchamianie kompilacji na kilku wersjach jednocześnie. Na przykład: macierz z wersjami iOS (15.0, 16.0, 17.0) i Xcode (14, 15). Przyspiesza to weryfikację zgodności aplikacji z różnymi wersjami systemów operacyjnych, choć zwiększa zużycie minut runnerów. Dla projektów z ograniczonym budżetem CI można ograniczyć macierz tylko do głównych konfiguracji.
GitHub Actions udostępnia akcję setup-java do instalacji JDK oraz caching do buforowania Gradle. Android SDK jest już preinstalowany na runnerach Ubuntu. Dla niestandardowych poziomów API używa się sdkmanager w osobnym kroku. Zaleca się tworzenie oddzielnego workflow dla kompilacji Android i iOS, ponieważ używają one różnych runnerów i narzędzi kompilacji.
GitHub Marketplace zawiera ponad 15 000 akcji stworzonych przez społeczność i oficjalnych programistów. Dla programowania aplikacji mobilnych kluczowe kategorie to: Code signing (apple-actions/import-codesign-certs), testowanie (react-native-community/action), wdrażanie (google-github-actions/release-google-play), powiadomienia (slackapi/slack-github-action). Dostępne są również akcje dla Firebase App Distribution, TestFlight upload i Fastlane. Każda akcja ma oznaczenie zgodności z konkretnym systemem operacyjnym runnera.
Każda akcja ma wersję, opis, README i licencję. Przy wyborze akcji preferowane są oficjalne od dostawców (Google, Apple, Microsoft) oraz zweryfikowane przez Verified Badge. Ważne jest określenie stałej głównej wersji (actions/checkout@v4), a nie @main, aby uniknąć nieoczekiwanych zmian. Jeśli potrzebna akcja nie jest dostępna w Marketplace, można stworzyć własną akcję — lokalnie w repozytorium (Docker action lub JavaScript action) lub opublikować w Marketplace.
Przy tworzeniu aplikacji iOS ważne jest skonfigurowanie poprawnej pracy z symulatorami i urządzeniami. Runner macOS-14 zapewnia środowisko z Rosetta 2 do uruchamiania kompilacji Intel na architekturze ARM. Workflow może obejmować kilka schematów kompilacji — Debug dla pull request i Release dla tagów. GitHub Actions obsługuje parsowanie xcresult przez akcję xcparse/sonarqube do wyświetlania wyników testów. Do wysyłania powiadomień o statusie kompilacji można dodać akcję Slack lub Telegram.
Code signing dla iOS wymaga importu certyfikatów i provisioning profiles. Apple-actions udostępniają krok do importu certyfikatu P12 i instalacji provisioning profile. Certyfikaty są przechowywane jako sekrety GitHub Actions i odszyfrowywane tylko na etapie kompilacji. Do automatyzacji podpisu używa się Fastlane match, który może być wywołany jako osobny krok w workflow.
Rozważmy workflow dla aplikacji iOS w Swift, który kompiluje projekt, uruchamia testy i tworzy zarchiwizowaną kompilację. Workflow używa runnera macOS-14, Xcode 15.4 i akcji do zarządzania certyfikatami.
name: iOS CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_15_4.app
- name: Install CocoaPods
run: pod install
- name: Build and test
run: xcodebuild clean test -workspace App.xcworkspace
-scheme App -sdk iphonesimulator
- name: Archive
run: xcodebuild archive -workspace App.xcworkspace
-scheme App -archivePath App.xcarchive
Buforowanie skraca czas kompilacji, zachowując zależności pomiędzy uruchomieniami workflow. GitHub udostępnia wbudowane buforowanie przez actions/cache. Dla Gradle buforowany jest ~/.gradle, dla CocoaPods — Pods/, dla SPM — .build/. Klucz cache zawiera hash pliku z listą zależności — przy zmianie zależności cache jest automatycznie unieważniany.
Szczególną uwagę warto poświćić strategii przywracania cache (restore-keys). Jeśli dokładny klucz nie zostanie znaleziony, GitHub Actions próbuje częściowe dopasowanie według restore-keys. Jest to przydatne, gdy zmienia się tylko jedna zależność — cache pozostaje częściowo użyteczny. Dla Gradle dodatkowo zaleca się włączenie Gradle Build Cache, który buforuje wyniki kompilacji pomiędzy różnymi modułami projektu.
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle*') }}
Efektywność buforowania dla projektów Android: pierwsza kompilacja bez cache — 8–12 minut, powtórna z cache — 2–4 minuty. Dla iOS z CocoaPods oszczędność jest podobna. Zaleca się łączenie actions/cache z akcją setup-gradle od Gradle dla optymalnego zarządzania cache. Dla zależności npm w React Native używa się actions/cache z hashowaniem pliku package-lock.json. Przy prawidłowej konfiguracji buforowania można osiągnąć skrócenie czasu kompilacji nawet do 70%.
GitHub Actions obsługuje zmienne środowiskowe na poziomie workflow, job i step. Zmienne środowiskowe można nadpisywać: poziom step ma najwyższy priorytet. Dla poufnych danych zawsze używaj sekretów — są one szyfrowane AES-256 i nie wyświetlane w logach. Dostępne są również reguły ochrony środowiska — obowiązkowe ręczne potwierdzenie przed uruchomieniem wdrożenia. Dla dodatkowego bezpieczeństwa można skonfigurować obowiązkowe zatwierdzenie przez określonych użytkowników lub zespoły.
GitHub Actions obsługuje również Reusable Workflows — wielokrotnego użytku pipeline’y, które można wywoływać z innych workflow. Umożliwia to utworzenie scentralizowanego workflow kompilacji i wykorzystywanie go we wszystkich repozytoriach organizacji. Reusable workflow wywoływany jest jedną linią i może przyjmować parametry wejściowe i sekrety. Jest to szczególnie przydatne do standaryzacji praktyk CI/CD w dużych zespołach.
Przy konfiguracji GitHub Actions dla projektów mobilnych ważne jest przestrzeganie zasad bezpieczeństwa. OIDC (OpenID Connect) umożliwia rezygnację z długowiecznych poświadczeń i uzyskiwanie tymczasowych tokenów dla dostawców chmurowych. Nigdy nie używaj sekretów w postaci zwykłego tekstu w skryptach — GitHub Actions automatycznie maskuje sekrety w logach.
Dla projektów mobilnych krytycznie ważne jest ograniczenie dostępu do workflow dla zewnętrznych forków. Używaj ustawienia pull_request_target z ostrożnością — wykonuje ono kod z bazowej gałęzi, a nie z forka. Do code signing aplikacji iOS zaleca się przechowywanie certyfikatów w zaszyfrowanej formie i odszyfrowywanie ich tylko na etapie kompilacji przez gpg lub openssl.
Często zadawane pytania
Dla publicznych repozytoriów GitHub Actions jest darmowy z limitem 2000 minut miesięcznie. Dla prywatnych repozytoriów na darmowym planie — 500 minut. Plany Team i Enterprise obejmują odpowiednio 3000 i 50000 minut.
Do kompilacji iOS wymagany jest runner macOS (macos-13, macos-14 lub macos-latest). Tylko na macOS dostępne są Xcode i narzędzia code signing dla iOS. Kompilacja Android może być wykonywana zarówno na Linux, jak i macOS.
Sekrety konfiguruje się w Settings → Secrets and variables → Actions repozytorium. W workflow są używane składnią ${{ secrets.MY_SECRET }}. Sekrety są szyfrowane i nie wyświetlane w logach — są dostępne tylko podczas wykonywania workflow.
Tak, za pomocą narzędzia act społecznościowego. Uruchamia ono workflow lokalnie w kontenerach Docker. Jest to przydatne do debugowania przed commitem, ale kroki specyficzne dla macOS (kompilacja Xcode) nie są obsługiwane.
Użyj filtra paths w sekcji on: push: paths: ["src/**", "*.gradle"]. Workflow będzie uruchamiany tylko przy zmianach w określonych katalogach. Odwrotny filtr paths-ignore wyklucza ścieżki.
Podsumowanie
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga