Profesyonel Flutter CI/CD pipeline'ı ve multi-environment deployment sistemine sahip dokümantasyon projesi. GitHub Actions, GitLab CI/CD, Fastlane entegrasyonu ve kapsamlı rehberler ile tam otomatik dağıtım süreçleri.
- Multi-Environment Support: Dev, Staging ve Production ortamları
- Automated CI/CD: GitHub Actions ile otomatik build ve deployment
- Flutter Flavors: Ortam bazlı konfigürasyon yönetimi
- Firebase Integration: Her ortam için ayrı Firebase projeleri
- Automated Versioning: Fastlane ile otomatik versiyon yönetimi
- Quality Assurance: Automated testing ve code quality checks
- Professional Documentation: Kapsamlı dokümantasyon sistemi
Test Durumu: Bu proje kapsamında tüm CI/CD pipeline'ları, build süreçleri ve deployment işlemleri Android platform üzerinde test edilmiş ve doğrulanmıştır. iOS build pipeline'ı teorik olarak dokümante edilmiştir ancak fiziksel iOS cihaz ve Apple Developer hesabı gerektirdiği için test edilmemiştir.
- Flutter 3.32.0 veya üzeri
- Dart SDK 3.3.1 veya üzeri
- Android Studio / VS Code
- Firebase CLI
- Fastlane
- Ruby 3.2+
-
Projeyi klonlayın
git clone https://github.com/JamEvolution/sample_flutter_ci_cd_doc_project.git cd sample_flutter_ci_cd_doc_project -
Dependencies'leri yükleyin
flutter pub get cd android && bundle install && cd ..
-
Firebase konfigürasyonunu yapın
# Firebase CLI ile login olun firebase login # Firebase konfigürasyon dosyalarını oluşturun (güvenlik nedeniyle kaldırılmış) flutterfire configure --project=your-dev-project-id --out=lib/firebase_options_dev.dart flutterfire configure --project=your-staging-project-id --out=lib/firebase_options_staging.dart flutterfire configure --project=your-prod-project-id --out=lib/firebase_options_prod.dart # Firebase projelerini yapılandırın (her environment için) firebase use --add your-dev-project-id firebase use --add your-staging-project-id firebase use --add your-prod-project-id
-
Flavors'ı generate edin
flutter packages pub run build_runner build
-
Local configuration dosyasını oluşturun
# Template'den config dosyasını kopyalayın cp scripts/config.sh.template scripts/config.sh # Firebase App ID'lerini ve token'ınızı config.sh'a ekleyin # Bu dosya .gitignore'da olduğu için commit edilmeyecek
| Ortam | Açıklama | Branch | APK Build |
|---|---|---|---|
| Development | Geliştirme ortamı | develop |
flutter build apk --flavor dev |
| Staging | Test ortamı | staging |
flutter build apk --flavor staging |
| Production | Canlı ortam | main |
flutter build apk --flavor prod |
# Development ortamında çalıştır
flutter run --flavor dev --target lib/main.dart
# Staging ortamında çalıştır
flutter run --flavor staging --target lib/main.dart
# Production ortamında çalıştır
flutter run --flavor prod --target lib/main.dartdevelop (Dev Environment)
↓ Pull Request
staging (Staging Environment)
↓ Pull Request
main (Production Environment)
- Push to develop: Dev APK build → Firebase App Distribution
- Push to staging: Staging APK build → Firebase App Distribution
- Push to main: Production APK build → Firebase App Distribution
# .github/workflows/android_build.yml
- Automated testing and quality checks
- Multi-environment builds
- Firebase App Distribution deployment
- Automatic version management# Android Lanes
fastlane android dev # Dev build ve dağıtım
fastlane android staging # Staging build ve dağıtım
fastlane android prod # Production build ve dağıtım
fastlane android test # Test suite çalıştırma
fastlane android lint # Code quality checks
fastlane android bump_version # Versiyon artırmacd android
bundle exec fastlane android devGüvenlik Notu: Firebase App ID'leri ve credentials hassas bilgilerdir.
# Fastlane template'ini kopyalayın
cp android/fastlane/Appfile.local.template android/fastlane/Appfile.local
# Kendi Firebase App ID'lerinizi Appfile.local'a ekleyin
# Bu dosya .gitignore'da olduğu için commit edilmeyecekGitHub Secrets'da aşağıdaki değişkenleri tanımlayın.
GitHub Secrets'da tanımlanması gereken değişkenler:
FIREBASE_TOKEN=your_firebase_token
DEV_FIREBASE_APP_ID=your_dev_app_id
STAGING_FIREBASE_APP_ID=your_staging_app_id
PROD_FIREBASE_APP_ID=your_prod_app_id
[email protected],[email protected]Her ortam için ayrı Firebase projesi yapılandırması gereklidir:
Not: Firebase konfigürasyon dosyaları güvenlik nedeniyle repository'den kaldırılmıştır:
lib/firebase_options_dev.dart(kaldırılmıştır)lib/firebase_options_staging.dart(kaldırılmıştır)lib/firebase_options_prod.dart(kaldırılmıştır)
Bu dosyaları oluşturmak için:
# Firebase CLI ile projeyi yapılandırın
flutterfire configure
# Her ortam için ayrı konfigürasyon oluşturun
flutterfire configure --project=your-dev-project-id --out=lib/firebase_options_dev.dart
flutterfire configure --project=your-staging-project-id --out=lib/firebase_options_staging.dart
flutterfire configure --project=your-prod-project-id --out=lib/firebase_options_prod.dart# Unit testleri çalıştır
flutter test
# Integration testleri çalıştır
flutter drive --target=test_driver/app.dart
# Code coverage
flutter test --coverage# Lint kontrolü
flutter analyze
# Format kontrolü
dart format --set-exit-if-changed .Projede manuel işlemler için hazırlanmış utility scriptleri:
Firebase App Distribution'a manuel APK yükleme script'i:
# Manuel deployment script'ini çalıştır
./scripts/appdistribution.sh
# Belirli bir ortam için
./scripts/appdistribution.sh dev
./scripts/appdistribution.sh staging
./scripts/appdistribution.sh prodÖzellikler:
- Multi-environment support (dev, staging, prod)
- Automatic APK build ve upload
- Firebase CLI entegrasyonu
- Error handling ve logging
- Tester notification sistemi
Güvenlik Notu: Bu dosya hassas bilgiler içerir ve .gitignore'da bulunur.
Ortam konfigürasyonları ve yardımcı fonksiyonlar:
# Template'den kendi config dosyanızı oluşturun
cp scripts/config.sh.template scripts/config.sh
# Firebase App ID'lerini ve token'ınızı config.sh'a ekleyin
# Ardından script'i source edin
source scripts/config.sh
# Kullanılabilir fonksiyonlar
setup_environment # Ortam değişkenlerini ayarla
validate_config # Konfigürasyon kontrolü
clean_builds # Build cache temizleme
show_usage # Yardım bilgilerini gösterİçerik:
- Environment variables tanımları (template olarak)
- Firebase project ID'leri (güvenli placeholder'larla)
- Build path'leri ve konfigürasyonları
- Utility fonksiyonları
- Validation ve error handling
# 1. Environment'ı hazırla
source scripts/config.sh
setup_environment
# 2. APK build ve deploy
./scripts/appdistribution.sh dev
# 3. Sonuçları kontrol et
firebase appdistribution:distribute --app $DEV_FIREBASE_APP_IDlib/
├── main.dart # Ana entry point
├── app.dart # Ana uygulama widget'ı
├── flavors.dart # Flavor konfigürasyonları
├── init_firebase.dart # Firebase başlatma
├── firebase_options_*.dart # Ortam bazlı Firebase ayarları
└── pages/ # Uygulama sayfaları
android/
├── fastlane/ # Fastlane konfigürasyonu
│ ├── Fastfile # Build lane'leri
│ ├── Appfile # App konfigürasyonu
│ └── Pluginfile # Plugin'ler
└── app/
└── src/ # Flavor bazlı Android konfigürasyonu
docs/ # Dokümantasyon
├── ANDROID_BUILD_PIPELINE.md
├── BRANCH_PIPELINE_STRATEGY.md
├── FLUTTER_PROJECT_SETUP_GUIDE.md
└── GITHUB_WORKFLOW.md
scripts/ # Utility scriptleri
├── appdistribution.sh # Manuel Firebase deployment
└── config.sh # Konfigürasyon yardımcıları
Detaylı dokümantasyon için docs/ klasörünü inceleyiniz:
- Android Build Pipeline: Fastlane ve Android build süreçleri
- iOS Build Pipeline: iOS build ve TestFlight dağıtım süreçleri
- Branch Strategy: Git workflow ve deployment stratejisi
- Flutter Setup Guide: Detaylı proje kurulum rehberi
- GitHub Workflow: GitHub Actions CI/CD pipeline dokümantasyonu
- GitLab Workflow: GitLab CI/CD pipeline dokümantasyonu
- CI/CD Platform Comparison: GitHub Actions vs GitLab CI/CD karşılaştırması
Not: Bu proje, profesyonel Flutter uygulamaları için modern CI/CD yaklaşımlarını göstermek amacıyla oluşturulmuştur.