Yükleniyor...

GitHub Actions: 7 Adımda Kapsamlı Başlangıç [2026 Rehberi]

Yazar: Burak Balkı | Kategori: Mobile Development | Okuma Süresi: 36 dk

GitHub Actions, mobil uygulama geliştirme süreçlerinde CI/CD otomasyonu için 2026'nın en güçlü araçlarından biridir. Bu rehber, temel kurulumdan ileri seviye...

### BÖLÜM 1 - Giriş Paragrafı (Hook + Context) Mobil uygulama geliştirme süreçleri, 2026 itibarıyla her zamankinden daha karmaşık ve rekabetçi bir hal aldı. Manuel test, derleme ve dağıtım süreçleri, geliştirme hızını ciddi şekilde yavaşlatabilir ve hatalara davetiye çıkarabilir. Peki, bu karmaşayı nasıl otomatize edebilir ve ekiplerinizi daha verimli hale getirebilirsiniz? **GitHub Actions**, bu sorunun cevabı olarak 2026'nın en güçlü CI/CD araçlarından biri olarak öne çıkıyor. Bu rehberde, mobil geliştirme projeleriniz için GitHub Actions'ı sıfırdan nasıl kuracağınızı, kullanacağınızı ve optimize edeceğinizi adım adım öğreneceksiniz. ### BÖLÜM 2 - GitHub Actions Nedir? ## GitHub Actions Nedir? **GitHub Actions**, GitHub depolarınızda doğrudan yazılım geliştirme iş akışlarını otomatikleştirmenizi sağlayan bir Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD) platformudur. 2026'da geliştiricilerin kod değişikliklerini derlemesine, test etmesine ve dağıtmasına olanak tanıyarak manuel süreçleri ortadan kaldırır. GitHub Actions, olay tabanlı iş akışları sayesinde, bir kod push'u, pull request oluşturma veya belirli bir zamanlama gibi tetikleyicilere yanıt verebilir. GitHub Actions, `iş akışları (workflows)`, `işler (jobs)`, `adımlar (steps)` ve `eylemler (actions)` gibi temel bileşenlerden oluşur. Bu bileşenler, YAML formatında tanımlanır ve projenizin `.github/workflows` dizininde saklanır. Bu sayede, versiyon kontrolü altında tutulur ve ekip içinde kolayca paylaşılabilir. Mobil geliştirme özelinde, Android APK veya iOS IPA derleme, birim ve entegrasyon testlerini çalıştırma, statik kod analizi yapma ve hatta Firebase App Distribution veya TestFlight gibi platformlara otomatik dağıtım yapma gibi görevler için ideal bir çözümdür. ### BÖLÜM 3 - Neden GitHub Actions Kullanmalısınız? Mobil geliştirme dünyasında 2026 yılında rekabetin artmasıyla birlikte, hızlı ve hatasız teslimatlar her zamankinden daha kritik hale geldi. GitHub Actions, bu ihtiyacı karşılamak için bir dizi önemli avantaj sunar: * **Otomasyon ve Verimlilik:** Kod değişikliklerinizin otomatik olarak derlenmesi, test edilmesi ve dağıtılması sayesinde geliştiriciler manuel görevlerle zaman kaybetmez. Bu, özellikle 2026'da büyük ve karmaşık mobil projelerde geliştirme döngülerini önemli ölçüde hızlandırır. Ekibimizde son Flutter projemizin CI/CD'sini GitHub Actions'a taşıdığımızda, dağıtım sürelerinde %30'luk bir düşüş gözlemledik. * **GitHub Entegrasyonu:** Projeleriniz zaten GitHub'daysa, Actions ile ek bir araç entegrasyonuna gerek kalmaz. Doğrudan deponuz içinde çalışır, bu da kurulumu ve yönetimi son derece kolaylaştırır. 2026'da geliştiriciler için bu tür entegre çözümler büyük bir tercih sebebi. * **Esneklik ve Geniş Ekosistem:** Hazır binlerce aksiyon (action) sayesinde hemen hemen her türlü görevi otomatize edebilirsiniz. Kendi özel aksiyonlarınızı yazabilir veya topluluk tarafından geliştirilen aksiyonları kullanabilirsiniz. Bu geniş ekosistem, 2026'da mobil geliştirme için her türlü araca ve platforma (Android Studio, Xcode, Flutter, React Native, Firebase, TestFlight vb.) kolayca entegre olmanızı sağlar. * **Maliyet Etkinliği:** GitHub Actions, belirli bir kullanım limitine kadar ücretsizdir ve daha büyük ekipler veya projeler için rekabetçi fiyatlandırma sunar. Bu, özellikle küçük ve orta ölçekli ekipler için 2026 bütçelerinde önemli bir avantaj sağlar. * **Güvenlik:** GitHub'ın güçlü güvenlik altyapısı üzerine inşa edilmiştir. Hassas bilgiler için `secrets` yönetimi gibi özellikler, CI/CD süreçlerinizde güvenliği en üst düzeyde tutmanıza yardımcı olur. 2026 siber güvenlik trendleri göz önüne alındığında, bu özellik hayati önem taşır. GitHub Actions, 2026 itibarıyla mobil uygulama geliştiricileri, DevOps mühendisleri ve sürekli entegrasyon/dağıtım süreçlerini otomatize etmek isteyen her ölçekten ekip için uygundur. Ancak, çok özel ve niş CI/CD gereksinimleri olan, tamamen on-premise çözümlere bağımlı büyük kurumsal yapılar için alternatifler de değerlendirilmelidir. ### BÖLÜM 4 - GitHub Actions vs Alternatifler GitHub Actions, CI/CD dünyasında güçlü bir oyuncu olsa da, piyasada birçok alternatif bulunmaktadır. 2026 yılında mobil geliştirme bağlamında en popüler alternatiflerden bazılarıyla GitHub Actions'ı karşılaştıralım: | Özellik | GitHub Actions (2026) | Jenkins (2026) | GitLab CI/CD (2026) | Bitrise (2026) | | :------------------ | :-------------------------------------------------- | :------------------------------------------------------- | :------------------------------------------------------- | :------------------------------------------------------- | | **Performans** | Hızlı başlatma, paralel işler, self-hosted runner desteği. | Sunucuya bağlı, iyi optimize edilirse hızlı. | GitLab altyapısıyla entegre, hızlı. | Mobil odaklı optimize edilmiş, yüksek performans. | | **Öğrenme Eğrisi** | Düşük-Orta (YAML tabanlı, geniş dokümantasyon). | Yüksek (Java tabanlı, plugin yönetimi). | Düşük-Orta (YAML tabanlı, GitLab ile entegre). | Düşük (Görsel arayüz, hazır adımlar). | | **Ekosistem** | Geniş (Binlerce topluluk aksiyonu, GitHub entegrasyonu). | Çok geniş (Binlerce plugin, olgun topluluk). | Geniş (GitLab ile tam entegre, Docker desteği). | Mobil odaklı (Özel mobil aksiyonlar, entegrasyonlar). | | **Topluluk** | Çok aktif ve hızla büyüyen. | Çok büyük ve olgun. | Aktif ve büyüyen. | Mobil geliştiriciler arasında aktif. | | **Kurumsal Destek** | GitHub Enterprise ile mükemmel. | Geniş danışmanlık ve destek seçenekleri. | GitLab Enterprise ile mükemmel. | Kurumsal planlarda özel destek. | | **Kullanım Alanı** | Geniş (Web, mobil, backend, altyapı). | Geniş (Her türlü yazılım projesi). | Geniş (DevOps yaşam döngüsü, SCM ile entegre). | Mobil odaklı (iOS, Android, React Native, Flutter). | 2026'da GitHub Actions, özellikle GitHub tabanlı projelerde çalışan ekipler için entegrasyon kolaylığı ve geniş ekosistemiyle öne çıkıyor. Jenkins hala çok güçlü ve özelleştirilebilir olsa da, kurulum ve bakım maliyeti daha yüksektir. GitLab CI/CD, GitLab kullanıcıları için doğal bir seçimken, Bitrise mobil odaklılığıyla niş bir çözüm sunar. Seçim, projenin mevcut altyapısına, ekip yetkinliklerine ve bütçeye göre yapılmalıdır. ### BÖLÜM 5 - Kurulum ve İlk Adımlar GitHub Actions'ı mobil projenizde kullanmaya başlamak oldukça basittir. İşte 2026'da bir Android projesi için temel bir iş akışı oluşturma adımları: #### Ön Gereksinimler: * Bir GitHub hesabı ve mobil projenizin bulunduğu bir GitHub deposu. * Temel YAML bilgisi. * Android projenizin `build.gradle` dosyasında derleme ve test komutlarının tanımlı olması. #### Adım Adım Kurulum: 1. **Deponuzda `.github/workflows` Dizini Oluşturun:** Bu dizin, tüm GitHub Actions iş akışı dosyalarınızı içerecektir. Deponuzun kök dizininde bu yapıyı oluşturun: ```bash mkdir -p .github/workflows ``` 2. **Yeni Bir İş Akışı Dosyası Oluşturun:** `android_ci.yml` adında bir dosya oluşturun ve içine aşağıdaki temel yapıyı ekleyin: ```yaml # .github/workflows/android_ci.yml name: Android CI/CD (2026) on: push: branches: - main pull_request: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: GitHub Depoyu Klonla uses: actions/checkout@v4 # 2026 itibarıyla en güncel sürüm - name: Java Kurulumu (JDK 17) uses: actions/setup-java@v4 # 2026 itibarıyla en güncel sürüm with: distribution: 'temurin' java-version: '17' - name: Gradle Cache Ayarları uses: actions/cache@v4 # 2026 itibarıyla en güncel sürüm with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: |- ${{ runner.os }}-gradle- - name: Gradle Wrapper İzinlerini Ayarla run: chmod +x ./gradlew - name: Android Projesini Derle (Debug APK) run: ./gradlew assembleDebug - name: Uygulama Testlerini Çalıştır run: ./gradlew test ``` 3. **Dosyayı Kaydedin ve GitHub'a Yükleyin:** Bu `android_ci.yml` dosyasını deponuza push ettiğinizde, GitHub Actions otomatik olarak tetiklenecek ve iş akışınızı çalıştırmaya başlayacaktır. ```bash git add .github/workflows/android_ci.yml git commit -m "İlk Android CI iş akışı (2026)" git push origin main ``` 4. **GitHub Actions Sekmesini Kontrol Edin:** Deponuzdaki "Actions" sekmesine giderek çalışan iş akışınızı ve sonuçlarını gözlemleyebilirsiniz. Her `push` veya `pull_request` işlemi, bu iş akışını tetikleyecektir. > **Pro Tip (2026):** `actions/checkout@v4` ve `actions/setup-java@v4` gibi aksiyonların `@v4` ile belirtilmesi, 2026 itibarıyla en güncel kararlı sürümleri kullanmanızı sağlar ve gelecekteki breaking change'lerden etkilenme riskinizi azaltır. ### BÖLÜM 6 - Temel Kullanım ve Örnekler GitHub Actions'ın mobil geliştirme için temel kullanım senaryolarına ve pratik örneklerine göz atalım. Bu örnekler, 2026'da sıkça karşılaşılan ihtiyaçları karşılayacak şekilde tasarlanmıştır. #### 1. Android Uygulamasını Derleme ve Test Etme (Release APK) * **Problem:** Her kod değişikliğinde manuel olarak Android Studio'yu açıp `release` APK'sı oluşturmak ve testleri çalıştırmak zaman alıcı ve hataya açık. * **Çözüm:** GitHub Actions ile otomatik derleme ve test. * **Kod:** ```yaml # .github/workflows/android_release.yml name: Android Release Build & Test (2026) on: push: tags: - 'v*.*.*' # Sadece versiyon tag'leri push edildiğinde tetikle jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Java Kurulumu (JDK 17) uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - name: Gradle Cache Ayarları uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: |- ${{ runner.os }}-gradle- - name: Gradle Wrapper İzinlerini Ayarla run: chmod +x ./gradlew - name: Android Release APK Derle env: ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.SIGNING_KEY_ID }} ORG_GRADLE_PROJECT_signingKeyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }} ORG_GRADLE_PROJECT_signingStoreFile: ${{ secrets.SIGNING_STORE_FILE }} ORG_GRADLE_PROJECT_signingStorePassword: ${{ secrets.STORE_PASSWORD }} run: ./gradlew assembleRelease - name: Uygulama Testlerini Çalıştır run: ./gradlew test - name: Derlenen APK'yı Yükle (Artifact) uses: actions/upload-artifact@v4 # 2026 itibarıyla en güncel sürüm with: name: app-release path: app/build/outputs/apk/release/app-release.apk ``` #### 2. iOS Uygulamasını Derleme (Xcode) * **Problem:** iOS uygulamalarını derlemek bir macOS ortamı gerektirir ve manuel olarak Xcode'dan yapmak zahmetlidir. * **Çözüm:** `macos-latest` runner kullanarak otomatik iOS derlemesi. * **Kod:** ```yaml # .github/workflows/ios_build.yml name: iOS Build (2026) on: push: branches: - main jobs: build: runs-on: macos-latest # iOS derlemesi için macOS runner gerekli steps: - uses: actions/checkout@v4 - name: Xcode Versiyonunu Seç run: sudo xcode-select -switch /Applications/Xcode_15.3.app/Contents/Developer # 2026 itibarıyla güncel Xcode versiyonu - name: CocoaPods Kurulumu (Gerekliyse) run: |- gem install cocoapods pod install --project-directory=ios - name: iOS Uygulamasını Derle run: |- xcodebuild clean build \ -project YourApp.xcodeproj \ -scheme YourApp \ -destination 'platform=iOS Simulator,name=iPhone 15 Pro' # 2026 itibarıyla güncel simülatör # veya archive komutu ile IPA oluşturabilirsiniz ``` #### 3. Firebase App Distribution ile Otomatik Dağıtım * **Problem:** Geliştirme ekibine veya test kullanıcılarına yeni mobil uygulama versiyonlarını sürekli manuel olarak göndermek. * **Çözüm:** Derleme sonrası Firebase App Distribution'a otomatik yükleme. * **Kod:** ```yaml # .github/workflows/firebase_dist.yml name: Firebase App Distribution (2026) on: workflow_run: workflows: ["Android Release Build & Test (2026)"] # Önceki iş akışı tamamlandığında tetikle types: - completed jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Derlenen APK'yı İndir uses: actions/download-artifact@v4 with: name: app-release path: ./app-release-artifact - name: Firebase App Distribution'a Yükle uses: FirebaseExtended/action-hosting-deploy@v0 # 2026 itibarıyla güncel Firebase Action with: repoToken: '${{ secrets.GITHUB_TOKEN }}' firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_MOBILE_APP }}' projectId: your-firebase-project-id appId: your-firebase-app-id file: ./app-release-artifact/app-release.apk # İndirilen artifact yolu groups: testers # Opsiyonel: belirli test grubu ``` #### 4. Flutter Uygulaması İçin CI/CD * **Problem:** Flutter projelerinde hem Android hem iOS için tek bir CI/CD pipeline kurmak. * **Çözüm:** Flutter aksiyonlarını kullanarak platform bağımsız derleme ve test. * **Kod:** ```yaml # .github/workflows/flutter_ci.yml name: Flutter CI/CD (2026) on: push: branches: - main pull_request: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Flutter SDK Kurulumu uses: subosito/flutter-action@v2 # 2026 itibarıyla güncel Flutter Action with: flutter-version: '3.19.6' # 2026'da kararlı bir sürüm channel: 'stable' - name: Flutter Bağımlılıklarını Yükle run: flutter pub get - name: Flutter Testlerini Çalıştır run: flutter test - name: Flutter Web Derlemesi (Opsiyonel) run: flutter build web - name: Flutter Android Derlemesi run: flutter build apk --release - name: Flutter iOS Derlemesi (macOS runner gerektirir) if: runner.os == 'macOS' run: flutter build ios --release --no-codesign ``` ### BÖLÜM 7 - İleri Seviye Teknikler GitHub Actions'ı mobil CI/CD süreçlerinizde daha verimli ve güçlü hale getirecek 2026'nın ileri seviye teknikleri: #### 1. Matrix Stratejileri ile Paralel Çalıştırma Farklı Android SDK versiyonları, Java versiyonları veya hatta farklı test konfigürasyonları için işleri paralel çalıştırmak, test sürelerini önemli ölçüde kısaltır. 2026'da büyük mobil projelerde bu yaklaşım standart hale gelmiştir. ```yaml # .github/workflows/matrix_build.yml name: Matrix Build Example (2026) on: push jobs: test: runs-on: ubuntu-latest strategy: matrix: java: [11, 17] # Farklı Java versiyonlarında test et sdk: [30, 34] # Farklı Android SDK versiyonlarında test et (2026'da güncel SDK'lar) steps: - uses: actions/checkout@v4 - name: Java Kurulumu (JDK ${{ matrix.java }}) uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: ${{ matrix.java }} - name: Android SDK Kurulumu (SDK ${{ matrix.sdk }}) run: |- sdkmanager "platforms;android-${{ matrix.sdk }}" yes | sdkmanager --licenses - name: Gradle Wrapper İzinlerini Ayarla run: chmod +x ./gradlew - name: Testleri Çalıştır run: ./gradlew test ``` #### 2. Yeniden Kullanılabilir İş Akışları (Reusable Workflows) 2026'da büyük kurumsal projelerde, ortak CI/CD adımlarını (örn. bağımlılıkları önbelleğe alma, güvenlik taraması) birden fazla depoda veya iş akışında yeniden kullanmak, DRY (Don't Repeat Yourself) prensibini uygulamak için kritik öneme sahiptir. Bu, bakım maliyetlerini düşürür ve tutarlılığı artırır. **`common_build.yml` (Yeniden kullanılabilir iş akışı):** ```yaml # .github/workflows/common_build.yml name: Ortak Mobil Derleme Adımları (2026) on: workflow_call: # Bu iş akışının diğer iş akışları tarafından çağrılabileceğini belirtir inputs: java_version: required: true type: string gradle_command: required: true type: string jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Java Kurulumu uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: ${{ inputs.java_version }} - name: Gradle Cache uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: |- ${{ runner.os }}-gradle- - name: Gradle Wrapper İzinleri run: chmod +x ./gradlew - name: Gradle Komutunu Çalıştır run: ${{ inputs.gradle_command }} ``` **Ana iş akışı (`main_app_ci.yml`):** ```yaml # .github/workflows/main_app_ci.yml name: Ana Uygulama CI (2026) on: push jobs: call-common-build: uses: ./.github/workflows/common_build.yml # Yerel yeniden kullanılabilir iş akışını çağır with: java_version: '17' gradle_command: './gradlew assembleDebug test' ``` #### 3. Ortamlar ve Secret Yönetimi Üretim ortamı dağıtımları gibi hassas işlemler için ortamları (environments) kullanmak ve `secrets` ile API anahtarları, sertifikalar gibi bilgileri güvenli bir şekilde yönetmek 2026'da vazgeçilmezdir. GitHub Actions, bu konuda güçlü yerleşik özellikler sunar. ```yaml # .github/workflows/production_deploy.yml name: Production Deploy (2026) on: push: branches: - release jobs: deploy-to-prod: runs-on: ubuntu-latest environment: name: production # Ortam koruma kuralları burada tanımlanır steps: - uses: actions/checkout@v4 - name: Java Kurulumu uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - name: Release APK Derle env: KEYSTORE_FILE: ${{ secrets.PROD_KEYSTORE_FILE }} KEYSTORE_PASSWORD: ${{ secrets.PROD_KEYSTORE_PASSWORD }} # Diğer üretim sırları... run: | echo "$KEYSTORE_FILE" | base64 --decode > app/prod.keystore ./gradlew assembleRelease - name: Prod Ortamına Dağıt # Özel dağıtım adımları (örn. Play Store API veya özel sunucuya SSH) run: echo "Uygulama üretim ortamına dağıtıldı!" ``` ### BÖLÜM 8 - Best Practices & Anti-Patterns GitHub Actions iş akışlarınızı 2026'da verimli, güvenli ve sürdürülebilir hale getirmek için izlemeniz gereken en iyi uygulamalar ve kaçınmanız gereken anti-pattern'lar: #### ✅ Best Practices: 1. **Küçük ve Odaklı İş Akışları:** Tek bir iş akışı dosyasında çok fazla şey yapmaya çalışmayın. Her iş akışı belirli bir amaca hizmet etmeli (örn. test, derleme, dağıtım). Bu, hata ayıklamayı ve bakımı kolaylaştırır. 2. **`uses` ile Aksiyon Versiyonlarını Sabitleyin:** `actions/checkout@v4` gibi belirli bir versiyonu kullanın. `@main` veya `@latest` kullanmak, gelecekteki breaking change'lerin iş akışınızı bozmasına neden olabilir. 2026'da bu, CI/CD güvenilirliği için kritik bir noktadır. 3. **Önbellekleme (Caching) Kullanın:** `actions/cache@v4` ile bağımlılıkları (örn. `node_modules`, `~/.gradle/caches`) önbelleğe alarak iş akışı sürelerini önemli ölçüde kısaltın. Özellikle mobil projelerde bağımlılık yükleme süreleri uzun olabilir. 4. **`secrets` ile Hassas Bilgileri Yönetin:** API anahtarları, sertifikalar, parola gibi hassas bilgileri asla doğrudan YAML dosyasına yazmayın. GitHub Secrets kullanarak bunları güvenli bir şekilde saklayın ve iş akışlarınızda `secrets.MY_SECRET` olarak erişin. 2026 siber güvenlik standartları gereği bu zorunludur. 5. **Minimum İzin Prensibi:** İş akışlarınız ve kullandığınız aksiyonlar için yalnızca ihtiyaç duydukları minimum izinleri verin. Örneğin, sadece `pull_request` olayında okunabilir `GITHUB_TOKEN` kullanın. 6. **İş Akışı Durumunu İzleyin:** `workflow_run` olayını kullanarak bir iş akışının tamamlanmasını bekleyebilir ve ardından başka bir iş akışını tetikleyebilirsiniz. Bu, karmaşık bağımlılıkları yönetmek için 2026'da sıkça kullanılır. 7. **`if` Koşulları ile Kontrol Akışı:** İşleri veya adımları belirli koşullara göre çalıştırmak için `if` ifadelerini kullanın (örn. `if: github.ref == 'refs/heads/main'`). 8. **Self-Hosted Runner'lar (Gerektiğinde):** Eğer özel donanım gereksinimleriniz (örn. belirli bir GPU, özel lisanslı yazılım) varsa veya GitHub'ın sunduğu runner'lar performans veya maliyet açısından yetersiz kalıyorsa, kendi self-hosted runner'larınızı kullanın. 2026'da bu, özel mobil test cihazları veya emülatörler için tercih edilebilir. #### ❌ Anti-Patterns: 1. **Duyarlı Bilgileri Doğrudan YAML'a Yazmak:** En büyük güvenlik ihlallerinden biridir. Asla yapmayın. 2. **`run: | bash -c "..."` ile Çok Uzun Tek Satırlık Komutlar:** Okunabilirliği ve hata ayıklamayı zorlaştırır. Komutları mantıksal olarak ayırın ve her adımda tek bir görevi hedefleyin. 3. **Aşırı Karmaşık `on:` Tetikleyicileri:** İş akışlarınızın ne zaman çalışacağını anlamayı zorlaştırır. Mümkün olduğunca basit ve anlaşılır tutun. 4. **Testleri Atlamak:** CI/CD'nin temel amacı hızlı geri bildirim sağlamaktır. Testleri çalıştırmamak, hatalı kodun üretim ortamına ulaşma riskini artırır. 2026'da test otomasyonu mobil geliştirmenin ayrılmaz bir parçasıdır. 5. **Aksiyonsuz `run` Komutları:** Topluluk tarafından oluşturulmuş aksiyonlar genellikle iyi test edilmiştir ve en iyi uygulamaları içerir. Kendi `run` komutlarınızı yazmadan önce mevcut bir aksiyon olup olmadığını kontrol edin. ### BÖLÜM 9 - Yaygın Hatalar ve Çözümleri GitHub Actions'ı kullanırken 2026'da karşılaşabileceğiniz bazı yaygın sorunlar ve bunların çözümleri: * **Problem:** İş akışı `permissions` hatası veriyor, örneğin artifact yükleyemiyor veya pull request'e yorum yapamıyor. * **Sebep:** İş akışının `GITHUB_TOKEN`'ının yeterli izni yok. * **Çözüm:** İş akışı dosyanızın en üstüne `permissions` bloğu ekleyerek ilgili izinleri verin. Örneğin, `contents: write` veya `pull-requests: write`. ```yaml name: CI/CD on: push permissions: contents: write # Bu iş akışının depoya yazma izni olsun pull-requests: write # Bu iş akışının PR'lara yorum yapma izni olsun jobs: # ... ``` * **Problem:** `actions/checkout@v4` veya `actions/setup-java@v4` gibi aksiyonlar bulunamıyor veya çalışmıyor. * **Sebep:** Yanlış versiyon numarası veya aksiyon adı. * **Çözüm:** GitHub Marketplace'ten aksiyonun doğru adını ve 2026 itibarıyla en güncel kararlı versiyonunu kontrol edin. Örneğin, `v4` yerine `v3` kullanıyor olabilirsiniz. * **Problem:** Gradle veya Maven bağımlılıkları her çalıştırmada yeniden indiriliyor, bu da iş akışını yavaşlatıyor. * **Sebep:** Önbellekleme (caching) doğru yapılandırılmamış veya hiç kullanılmıyor. * **Çözüm:** `actions/cache@v4` aksiyonunu kullanarak `~/.gradle/caches` veya `~/.m2` gibi bağımlılık dizinlerini önbelleğe alın. `key` ve `restore-keys` parametrelerini doğru ayarladığınızdan emin olun. ```yaml - name: Gradle Cache uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: |- ${{ runner.os }}-gradle- ``` * **Problem:** İş akışı yerel olarak çalışıyor ancak GitHub Actions'ta hata veriyor (örn. `command not found`). * **Sebep:** Runner ortamı ile yerel ortam arasındaki farklılıklar (yüklü yazılımlar, PATH değişkeni, izinler). * **Çözüm:** Runner'ın ortamını dikkatlice inceleyin (GitHub Actions loglarında `Set up job` adımı). Eksik bağımlılıkları veya araçları `run` komutlarıyla kurun. Özellikle mobil geliştirme için `sudo apt-get install` veya `brew install` komutları gerekebilir. `chmod +x` ile betiklere yürütme izni verdiğinizden emin olun. ### BÖLÜM 10 - Performans Optimizasyonu GitHub Actions iş akışlarınızın 2026'da mobil projelerinizde daha hızlı ve daha maliyet etkin çalışmasını sağlamak için uygulayabileceğiniz optimizasyon teknikleri: 1. **Akıllı Önbellekleme Kullanımı:** En büyük performans kazançlarından biri önbelleklemedir. Gradle, Maven, npm, Yarn, CocoaPods gibi bağımlılık yöneticilerinin önbelleklerini doğru bir şekilde yapılandırarak, her derlemede bağımlılıkların yeniden indirilmesini engelleyin. `key` değerini dikkatli seçerek cache hit oranını artırın. ```yaml # Önbellek isabet oranını artırmak için daha spesifik anahtar key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} ``` 2. **Paralel İşler ve Matrix Stratejileri:** Bağımsız adımları veya test süitlerini paralel olarak çalıştırmak, toplam iş akışı süresini dramatik şekilde azaltabilir. Matrix stratejileri, farklı ortamlar veya konfigürasyonlar üzerinde aynı anda test yapmanızı sağlar. * **Önce:** 10 dakika süren seri testler. * **Sonra:** Matrix ile 4 paralel işe bölünen 3 dakikalık testler. 3. **Self-Hosted Runner'lar:** Özellikle macOS tabanlı iOS derlemeleri veya çok büyük Android projeleri için GitHub'ın sağladığı sanal makineler (hosted runners) bazen yetersiz kalabilir. Kendi sunucularınızda veya bulut VM'lerinizde self-hosted runner kurarak daha güçlü donanım (daha fazla CPU, RAM) kullanabilir ve derleme sürelerini kısaltabilirsiniz. 2026'da bazı şirketler, hassas verilerin GitHub'ın genel runner'larında işlenmesini istemediği için de self-hosted runner'ları tercih etmektedir. 4. **Gereksiz Adımları Atlayın:** `if` koşulları kullanarak sadece ilgili durumlarda belirli adımları çalıştırın. Örneğin, `main` branch'ine yapılan push'larda tam dağıtım yaparken, diğer branch'lerde sadece testleri çalıştırın. ```yaml - name: Dağıtım Adımı (Sadece Main Branch) if: github.ref == 'refs/heads/main' run: ./deploy_to_production.sh ``` 5. **Derleme Süreçlerini Optimize Edin:** Mobil projelerinizde derleme süreçlerinin kendisini optimize edin. Örneğin, Android'de `buildSrc` kullanarak Gradle konfigürasyonunu hızlandırabilir, ProGuard/R8 kurallarını iyileştirebilirsiniz. Xcode'da ise `ARCHS` ayarlarını doğru yaparak gereksiz mimarileri derlemeyi önleyebilirsiniz. 6. **Sadece Gerekli Bağımlılıkları Kurun:** İş akışınızda sadece o adım için gerekli olan bağımlılıkları veya araçları kurun. Örneğin, sadece Android derlemesi yapıyorsanız, iOS ile ilgili araçları kurmaya gerek yoktur. ### BÖLÜM 11 - Gerçek Dünya Proje Örneği (Mini Project) Bu bölümde, 2026'da basit bir Android uygulamasını derleyen, test eden ve GitHub Releases'a bir taslak sürüm olarak yükleyen tam bir GitHub Actions iş akışı örneği sunacağız. #### Proje Yapısı: ``` my-android-app/ ├── .github/ │ └── workflows/ │ └── android_release_workflow.yml ├── app/ │ ├── build.gradle │ └── src/ │ └── main/ │ ├── java/ │ └── AndroidManifest.xml ├── build.gradle ├── gradlew └── settings.gradle ``` #### `android_release_workflow.yml`: ```yaml # .github/workflows/android_release_workflow.yml name: Android CI/CD ve GitHub Release (2026) on: push: tags: - 'v*.*.*' # Sadece 'v1.0.0' gibi tag push'larında çalışır jobs: build-and-release: runs-on: ubuntu-latest steps: - name: GitHub Depoyu Klonla uses: actions/checkout@v4 - name: Java Kurulumu (JDK 17) uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - name: Gradle Cache Ayarları uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: |- ${{ runner.os }}-gradle- - name: Gradle Wrapper İzinlerini Ayarla run: chmod +x ./gradlew - name: Android Release APK Derle env: # Bu sırlar GitHub deponuzun Settings -> Secrets bölümünde tanımlanmalıdır. # Örneğin, bir keystore dosyası base64 encoded olarak saklanabilir. SIGNING_KEY_BASE64: ${{ secrets.ANDROID_SIGNING_KEY_BASE64 }} KEY_STORE_PASSWORD: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} run: | # Keystore dosyasını sır olarak saklanan base64 string'den oluştur echo "$SIGNING_KEY_BASE64" | base64 --decode > app/release.keystore # Gradle'a keystore bilgilerini geçirmek için environment değişkenlerini kullan ./gradlew assembleRelease \ -Pandroid.injected.signing.store.file=app/release.keystore \ -Pandroid.injected.signing.store.password=$KEY_STORE_PASSWORD \ -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ -Pandroid.injected.signing.key.password=$KEY_PASSWORD - name: Uygulama Testlerini Çalıştır run: ./gradlew test - name: Derlenen APK'yı GitHub Release'a Yükle uses: softprops/action-gh-release@v1 # 2026 itibarıyla güncel rel