# CI/CD — Fastlane & GitHub Actions — To'liq Darslik

## Mundarija
1. [CI/CD nima va nega kerak?](#motivatsiya)
2. [Fastlane asoslari (Fastfile, lanes)](#fastlane)
3. [Fastlane Match — Sertifikatlarni boshqarish](#match)
4. [Fastlane Gym — Avtomatik Build](#gym)
5. [Fastlane Pilot — TestFlight'ga yuklash](#pilot)
6. [GitHub Actions asoslari (YAML workflow)](#github-actions)
7. [GitHub Actions + Fastlane integratsiyasi](#integration)
8. [Xcode Cloud — Apple native yechimi](#xcode-cloud)
9. [Bitrise va boshqa alternativalar](#alternatives)
10. [Real Workflow namunasi](#real-workflow)
11. [Xulosa](#xulosa)

---

## 1. CI/CD nima va nega kerak? {#motivatsiya}

- **CI (Continuous Integration):** Har bir kod o'zgarishini avtomatik test qilish.
- **CD (Continuous Deployment):** Testlar muvaffaqiyatli o'tsa, ilovani avtomatik TestFlight yoki App Store'ga yuborish.

**Nega kerak?**
- Har safar testlarni qo'lda ishga tushirish zerikarli va vaqt oladi.
- Arxiv qilish va yuklash (Archive & Upload) jarayoni 20-30 daqiqa vaqtni oladi. CI/CD bu ishlarni serverda, siz ishingizni davom ettirayotgan paytda bajaradi.

---

## 2. Fastlane asoslari {#fastlane}

Fastlane — bu iOS va Android uchun eng mashhur avtomatlashtirish vositasi (Ruby tilida yozilgan).
Loyihaga qo'shish: `fastlane init`

**Fastfile:** Bu yerda barcha buyruqlar (lane) yoziladi.
```ruby
lane :beta do
  increment_build_number
  build_app(scheme: "MyApp")
  upload_to_testflight
end
```

---

## 3. Fastlane Match {#match}

Jamoada ishlaganizda, har bir dasturchi o'zicha sertifikat yaratsa — App Store Connect "axlatxona"ga aylanadi. **Match** barcha sertifikatlarni bitta repozitoriyda (Git) shifrlangan holda saqlaydi va hamma uchun (dasturchilar, CI serverlar) bir xil sertifikatni ta'minlaydi.

---

## 4. Fastlane Gym {#gym}

Ilovani `.ipa` formatida arxiv qilish uchun javobgar.
```ruby
gym(
  scheme: "MyApp",
  export_method: "app-store",
  output_directory: "./build"
)
```

---

## 5. Fastlane Pilot {#pilot}

Build tayyor bo'lgach, uni TestFlight'ga bir qator kod bilan yuboradi:
```ruby
pilot(ipa: "./build/MyApp.ipa")
```

---

## 6. GitHub Actions asoslari {#github-actions}

GitHub serverlarida kodni ishga tushirish uchun ishlatiladi. `.github/workflows/main.yml` faylida konfiguratsiya qilinadi.

```yaml
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install dependencies
        run: bundle install
      - name: Run Tests
        run: bundle exec fastlane test
```

---

## 7. GitHub Actions + Fastlane integratsiyasi {#integration}

Bu eng kuchli kombinatsiya. Developer kodni `push` qiladi → GitHub Actions o'zi `macos` server ochadi → Fastlane orqali testlarni yurgizadi → Hammasi ok bo'lsa App Store Connect'ga yuklaydi.

---

## 8. Xcode Cloud {#xcode-cloud}

Apple'ning o'zining yangi CI/CD tizimi. Xcode ichiga integratsiya qilingan. Sozlash juda oson, lekin GitHub Actions kabi moslashuvchan (flexible) emas va narxi qimmatroq bo'lishi mumkin.

---

## 9. Bitrise va boshqa alternativalar {#alternatives}

- **Bitrise:** Faqat mobile uchun mo'ljallangan, juda ko'p tayyor "step"lari bor.
- **Codemagic:** Flutter va Native iOS uchun oson CI/CD.

---

## 10. Real Workflow namunasi {#real-workflow}

1. Developer `feature` branch ochadi.
2. Kod yozadi va `Push` qiladi.
3. CI serverda Unit Testlar ishlaydi.
4. Agar xato bo'lsa, PR (Pull Request) merge qilinmaydi.
5. Merge qilinganda, `main` branch avtomatik TestFlight'ga build chiqaradi.

---

## 11. Xulosa {#xulosa}

CI/CD — bu sizning vaqtingizni va asabingizni tejaydi.
- Kichik loyihalarda Fastlane ishlatishni o'rganing.
- GitHub Actions orqali testlarni avtomatlashtiring.

**Vazifa:** Fastlane'ni o'rnating va `increment_build_number` buyrug'ini ishlatib ko'radigan birinchi lane'ingizni yozing! 🚀
