Lock file — loyiha bog‘liqliklarini yechish natijasida tanlangan aniq paket versiyalari va ko‘pincha ularning yaxlitlik ma’lumotlarini saqlaydigan fayldir. Manifest ruxsat etilgan versiya oralig‘ini bildirsa, lock file muayyan o‘rnatishda ishlatiladigan to‘liq dependency graphni mahkamlaydi. Shu sabab turli kompyuter va vaqtda bir xil bog‘liqliklarni qayta o‘rnatish osonlashadi.
Manifestdan farqi
Manifest dasturchining niyatini ifodalaydi: masalan, kutubxonaning 2.x qatori bilan ishlash. Resolver shu cheklov va transitiv talablar asosida 2.7.4 versiyasini tanlashi mumkin. Lock file aynan shu versiya, uning transitiv paketlari va manbasini yozadi. Keyingi o‘rnatish resolverni boshqatdan erkin ishlatmay, mahkamlangan natijani tiklaydi.
Lock file manifest o‘rnini bosmaydi. Yangi bevosita bog‘liqlik manifestga qo‘shiladi, so‘ng paket menejeri lockni yangilaydi. Faylni qo‘lda tahrirlash ichki format va hashlarni buzishi mumkin.
Tarkib
Ekotizimga qarab faylda paket nomi, aniq versiya, repository URL, platforma varianti, dependencylar va cryptographic hash mavjud bo‘ladi. Ba’zi formatlar bir paketning bir nechta versiyasini yoki turli operatsion tizim uchun artefaktni saqlaydi. Format paket menejeri versiyasi bilan bog‘liq bo‘lishi mumkin.
Integrity hash repositorydan kelgan bayt kutilgan artefakt ekanini tekshiradi. U nashriyotning ishonchliligini o‘zi isbotlamaydi, lekin lock yaratilgandan keyingi almashtirishni aniqlaydi. Imzolangan provenance kuchliroq kelib chiqish dalili beradi.
Versiya boshqaruvi
Ilova loyihasida lock file odatda Gitga qo‘shiladi, chunki production va CI aynan sinovdan o‘tgan graphdan foydalanishi kerak. Qayta ishlatiladigan kutubxonada yondashuv ekotizimga bog‘liq: kutubxona iste’molchisi o‘z graphini yechishi kerak bo‘lishi mumkin, ammo maintainer test muhiti uchun lockni saqlaydi.
Merge paytida lock konfliktini matnni tasodifiy birlashtirish bilan hal qilish xavfli. Manifestlar birlashtirilib, package manager orqali lock qayta generatsiya qilinadi va testlar bajariladi. Katta diff faqat bevosita paket emas, ko‘plab transitiv versiyalar o‘zgarganini ko‘rsatishi mumkin.
Yangilash strategiyasi
Lock yangilanmasa, xavfsizlik tuzatishi avtomatik kelmaydi. Davriy yangilash botlari yoki rejalashtirilgan dependency review qo‘llanadi. Bitta paketni maqsadli yangilash o‘zgarish doirasini kichraytiradi; to‘liq refresh esa eski graphni yangilaydi, lekin ko‘proq xavf tug‘diradi.
CI “frozen” rejimda manifest va lock mosligini tekshiradi. Agar manifest o‘zgargan, lock yangilanmagan bo‘lsa build xato beradi. Bu developer kompyuterida jim yangilangan graphning productionga tasodifan chiqishini oldini oladi.
Chegaralar
Lock file bir xil manba bog‘liqliklarini beradi, ammo buildning barcha qismini takrorlanuvchan qilmaydi. Kompilyator, OS paketi, vaqt, locale yoki tashqi yuklama farqi natijani o‘zgartirishi mumkin. To‘liq reproducible build uchun toolchain va bazaviy image ham mahkamlanadi.
Lockdagi paket keyinchalik repositorydan olib tashlansa, qayta build muvaffaqiyatsiz bo‘lishi mumkin. Tasdiqlangan artefaktlarni ichki mirror yoki content-addressed storageda saqlash bu xavfni kamaytiradi. Maxfiy registry credentiali lock faylga yozilmaydi.
Platformaga xos graph
Ayrim paketlar OS, CPU arxitekturasi yoki runtime versiyasiga qarab boshqa dependency tanlaydi. Lock format bitta platformani yoki bir nechta variantni saqlashi mumkin. Lock Linuxda yaratilgan bo‘lsa, macOS uchun kerak artefakt unda yo‘q bo‘lishi ehtimoli bor. CI qo‘llab-quvvatlanadigan barcha platformada frozen installni tekshiradi va yangilash vakolatli package manager versiyasi bilan bajariladi.
Audit qiymati
Hodisa vaqtida lock file ma’lum zaif versiya qaysi commit va relizga kirganini topishga yordam beradi. Biroq u deploy qilingan artefaktni o‘zi isbotlamaydi; build provenance va SBOM bilan bog‘langanda aniq kuzatuv hosil bo‘ladi. Lockdagi URL yoki paket metadata ichida credential saqlanmaganligi ham review qilinadi.
Bog‘liq tushunchalar
Package manager, Dependency resolution, Reproducible build, Semantic Versioning, Integrity hash, Software supply chain