10-bo‘lim
Holat tekshiruvlari va tarmoq himoyasi
PR sahifasidagi tekshiruvlar, majburiy holatlar, tarmoq himoyasi qoidalari, bildirgichlar va CODEOWNERS.
Ushbu bo‘lim mundarijasi
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:
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
| Sozlama | Nima qiladi |
|---|---|
| Require status checks to pass | Qizil PR birlashtirilmaydi |
| Require branches to be up to date | PR eskirmagan bo'lishi shart |
| Require pull request before merging | main ga to'g'ridan-to'g'ri push taqiqlanadi |
| Require approvals | Kamida bitta tasdiq kerak |
| Require conversation resolution | Barcha izohlar yopilishi shart |
| Do not allow bypassing | Adminlar uchun ham amal qiladi |
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:
| Sozlama | Natija |
|---|---|
| «up to date» talab qilinmagan | PR abadiy kutib qoladi |
| Nom umuman mos kelmaydi | Himoya 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:
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 qiymati | Ma'nosi |
|---|---|
success | Hammasi yashil |
failure | Kamida bittasi yiqildi |
cancelled | Bekor qilindi |
skipped | Shart 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:

Manzil tuzilishi:
https://github.com/<egasi>/<repozitoriy>/actions/workflows/<fayl>.yml/badge.svg
| Qo'shimcha | Nima qiladi |
|---|---|
?branch=main | Faqat shu tarmoq holati |
?event=push | Faqat 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:
# 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.
.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 #
| Qoida | Nima uchun |
|---|---|
| Linear history | Tarix tarmoqsiz va o'qishga qulay bo'ladi |
| Require signed commits | Kommit muallifi kriptografik tasdiqlanadi |
| Lock branch | Tarmoq faqat o'qish uchun qoladi (arxiv) |
| Restrict who can push | Faqat ma'lum shaxs yoki jamoa |
| Automatically delete head branches | Birlashtirilgan tarmoqlar o'zi tozalanadi |
Avtomatik birlashtirish #
Tekshiruvlar uzoq ishlasa, ularni kutib o'tirmaslik mumkin:
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.
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.
- Repozitoriyda
mainuchun tarmoq himoyasi qoidasini yarating. - Testlar jobini majburiy tekshiruvga qo'shing.
- Qizil PR ochib, birlashtirish tugmasi o'chiqligini ko'ring.
- Tuzatib, tugma yonishini kuzating.
- Job nomini o'zgartirib, majburiy tekshiruv qanday "osilib qolishini" ko'ring.
- Matritsa uchun yig'uvchi job yozing va himoyaga faqat uni qo'shing.
needs.test.resultqiymatini jurnalga chiqarib, holatlarni solishtiring.- README ga bildirgich qo'shing va u yashil bo'lishini tekshiring.
.github/CODEOWNERSyaratib, workflow papkasiga o'zingizni ega qilib belgilang.gh pr merge --autobilan avtomatik birlashtirishni sinab ko'ring.
Xulosa #
- Quvur natijasi PR sahifasida ro'yxat bo'lib chiqadi:
workflow / jobko'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()vaneeds.<job>.resulttekshiruvi bo'lishi shart. needs.<job>.resultto'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.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.