10-bo‘lim

Holat tekshiruvlari va tarmoq himoyasi

PR sahifasidagi tekshiruvlar, majburiy holatlar, tarmoq himoyasi qoidalari, bildirgichlar va CODEOWNERS.

🕑 8 daqiqa o‘qish 📄 808 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. PR sahifasidagi tekshiruvlar
  2. Majburiy tekshiruvlar
  3. Matritsada majburiy tekshiruv
  4. Bildirgich (badge)
  5. CODEOWNERS - kim ko'rib chiqadi
  6. Boshqa foydali qoidalar
  7. Avtomatik birlashtirish
  8. Xulosa

Quvur yashil yoki qizil bo'lishi - bu faqat ma'lumot. U buzuq kodni to'xtata olishi uchun tarmoq himoyasi sozlanadi.

PR sahifasidagi tekshiruvlar #

PR ochilganda unga qaratilgan barcha workflow'lar ishga tushadi va natijalari PR ning pastida ro'yxat bo'lib chiqadi:

Natija
Barcha tekshiruvlar o'tdi
  ✓ Testlar / test (20)        45s
  ✓ Testlar / test (22)        43s
  ✓ Kod sifati / linter         9s
  ✗ Qurish / build             12s

Har bir qator - alohida job. Nomi workflow nomi / job nomi ko'rinishida bo'ladi, matritsada esa qavs ichida kombinatsiya qo'shiladi.

Majburiy tekshiruvlar #

Sukut bo'yicha qizil PR ni ham birlashtirib yuborish mumkin - GitHub faqat ogohlantiradi. Buni taqiqlash uchun tarmoq himoyasi kerak:

Settings -> Branches -> Add branch protection rule

SozlamaNima qiladi
Require status checks to passQizil PR birlashtirilmaydi
Require branches to be up to datePR eskirmagan bo'lishi shart
Require pull request before mergingmain ga to'g'ridan-to'g'ri push taqiqlanadi
Require approvalsKamida bitta tasdiq kerak
Require conversation resolutionBarcha izohlar yopilishi shart
Do not allow bypassingAdminlar uchun ham amal qiladi
PR qanday yo'l bosadi PR ochildi tekshiruvlar boshlandi CI ishlayapti test, linter, qurish Ko'rib chiqish tasdiq olinadi Birlashtirish main yangilandi Tarmoq himoyasisiz Qizil tekshiruvni e'tiborsiz qoldirib, tugmani bosish mumkin - va buzuq kod main ga tushadi Tarmoq himoyasi bilan Birlashtirish tugmasi o'chiq turadi: shart bajarilmaguncha bosib bo'lmaydi
Quvur xabar beradi, tarmoq himoyasi esa qoidani majburiy qiladi
Job nomini o'zgartirsangiz, himoya jim qoladi

Majburiy tekshiruvlar nom bo'yicha saqlanadi. test jobini testlar deb qayta nomlasangiz, GitHub eski nomni kutishda davom etadi - u hech qachon kelmaydi.

Ikki oqibati bor va ikkalasi ham yoqimsiz:

SozlamaNatija
«up to date» talab qilinmaganPR abadiy kutib qoladi
Nom umuman mos kelmaydiHimoya amalda ishlamaydi - hech narsa tekshirilmaydi

Job nomini o'zgartirgandan keyin doim himoya sozlamalarini yangilang.

Matritsada majburiy tekshiruv #

Matritsa har o'zgarganda tekshiruv nomlari ham o'zgaradi: test (18), test (20). Node 18 ni ro'yxatdan olib tashlasangiz, test (18) nomli majburiy tekshiruv abadiy kutiladi.

Yechim - yig'uvchi job:

YAML
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        node: [20, 22]
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

  hammasi-tayyor:
    if: always()
    needs: [test]
    runs-on: ubuntu-latest
    steps:
      - name: Matritsa natijasini tekshirish
        run: |
          if [ "${{ needs.test.result }}" != "success" ]; then
            echo "Matritsadagi joblardan biri yiqildi"
            exit 1
          fi
          echo "Barcha joblar yashil"

Endi himoyaga faqat bitta nom - hammasi-tayyor - qo'shiladi va matritsa istalgancha o'zgarishi mumkin.

needs.<job>.result qiymatiMa'nosi
successHammasi yashil
failureKamida bittasi yiqildi
cancelledBekor qilindi
skippedShart bajarilmagani uchun o'tkazib yuborildi

if: always() bu yerda majburiy: matritsa yiqilganda ham yig'uvchi job ishlashi va qaror chiqarishi kerak.

Bildirgich (badge) #

README ga quvur holatini ko'rsatadigan belgi qo'yish mumkin:

Markdown
![Testlar](https://github.com/foydalanuvchi/loyiha/actions/workflows/test.yml/badge.svg)

Manzil tuzilishi:

Natija
https://github.com/<egasi>/<repozitoriy>/actions/workflows/<fayl>.yml/badge.svg
Qo'shimchaNima qiladi
?branch=mainFaqat shu tarmoq holati
?event=pushFaqat shu hodisa bo'yicha

Bildirgich - kichik narsa, lekin u ochiq loyihada ishonch belgisi: loyiha kuzatilayotganini bir qarashda ko'rsatadi.

CODEOWNERS - kim ko'rib chiqadi #

.github/CODEOWNERS fayli qaysi fayllarni kim tasdiqlashi kerakligini belgilaydi:

Natija
# har qanday fayl uchun standart egalar
*                     @husanboy

# faqat backend
/app/                 @backend-jamoasi

# quvur fayllariga alohida e'tibor
/.github/workflows/   @husanboy @devops-jamoasi

# hujjatlar
*.md                  @hujjat-jamoasi

Tarmoq himoyasida "Require review from Code Owners" yoqilsa, tegishli fayl o'zgarganda o'sha egadan tasdiq talab qilinadi.

Workflow fayllarini himoyalash muhim

.github/workflows/ ichidagi fayl - bu sirlarga kirish huquqiga ega kod. Uni o'zgartira oladigan odam quvurdan sirlarni chiqarib olishi mumkin.

Shuning uchun aynan shu papkaga alohida ko'rib chiquvchi qo'yish yaxshi amaliyot.

Boshqa foydali qoidalar #

QoidaNima uchun
Linear historyTarix tarmoqsiz va o'qishga qulay bo'ladi
Require signed commitsKommit muallifi kriptografik tasdiqlanadi
Lock branchTarmoq faqat o'qish uchun qoladi (arxiv)
Restrict who can pushFaqat ma'lum shaxs yoki jamoa
Automatically delete head branchesBirlashtirilgan tarmoqlar o'zi tozalanadi

Avtomatik birlashtirish #

Tekshiruvlar uzoq ishlasa, ularni kutib o'tirmaslik mumkin:

Terminal
gh pr merge 42 --auto --squash

Bu PR ni "birlashtirishga navbatga qo'yadi": barcha majburiy tekshiruvlar yashil bo'lishi bilan GitHub uni o'zi birlashtiradi. Qizil bo'lsa - hech narsa bo'lmaydi.

Avtomatik birlashtirish tarmoq himoyasisiz xavfli

Himoya yo'q bo'lsa, --auto amalda "tekshiruvni kutmasdan birlashtir" degani bo'lib qoladi: kutiladigan majburiy shart yo'q.

Tartib shunday bo'lishi kerak: avval tarmoq himoyasi, keyin avtomatik birlashtirish.

Amaliy topshiriq
  1. Repozitoriyda main uchun tarmoq himoyasi qoidasini yarating.
  2. Testlar jobini majburiy tekshiruvga qo'shing.
  3. Qizil PR ochib, birlashtirish tugmasi o'chiqligini ko'ring.
  4. Tuzatib, tugma yonishini kuzating.
  5. Job nomini o'zgartirib, majburiy tekshiruv qanday "osilib qolishini" ko'ring.
  6. Matritsa uchun yig'uvchi job yozing va himoyaga faqat uni qo'shing.
  7. needs.test.result qiymatini jurnalga chiqarib, holatlarni solishtiring.
  8. README ga bildirgich qo'shing va u yashil bo'lishini tekshiring.
  9. .github/CODEOWNERS yaratib, workflow papkasiga o'zingizni ega qilib belgilang.
  10. gh pr merge --auto bilan avtomatik birlashtirishni sinab ko'ring.

Xulosa #

  • Quvur natijasi PR sahifasida ro'yxat bo'lib chiqadi: workflow / job ko'rinishida.
  • Sukut bo'yicha qizil PR ham birlashtiriladi - buni tarmoq himoyasi taqiqlaydi.
  • Majburiy tekshiruvlar nom bo'yicha saqlanadi: job nomi o'zgarsa, himoya jim qoladi.
  • Matritsa uchun yig'uvchi job yozing va himoyaga faqat uning nomini qo'shing.
  • Yig'uvchi jobda if: always() va needs.<job>.result tekshiruvi bo'lishi shart.
  • needs.<job>.result to'rtta qiymat qaytaradi: success, failure, cancelled, skipped.
  • Bildirgich README da quvur holatini ko'rsatadi - ochiq loyihada ishonch belgisi.
  • CODEOWNERS qaysi fayl uchun kim tasdiq berishini belgilaydi.
  • .github/workflows/ papkasi sirlar bilan ishlaydi - unga alohida ko'rib chiquvchi qo'ying.
  • Avtomatik birlashtirishdan oldin tarmoq himoyasi sozlangan bo'lishi kerak.

Keyingi bo'limda quvurga parol va kalitlarni xavfsiz berishni - sirlar va muhitlarni ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.