Avtomatik test va build
Endi workflow'ni haqiqiy foydali qilamiz: Node.js loyihasini o'rnatib, testlarni ishga tushirib, build qilamiz. Bu โ har bir Node loyihasining CI asosini tashkil qiladi.
Node.js muhitini o'rnatish (setup-node)
Runner mashinasida Node bo'lishi mumkin, lekin biz aniq versiyani nazorat qilmoqchimiz. Buning uchun actions/setup-node action ishlatiladi:
steps:
- name: Kodni yuklab olish
uses: actions/checkout@v4
- name: Node.js o'rnatish
uses: actions/setup-node@v4
with:
node-version: '20'
with: โ action'ga parametr uzatish usuli. Bu yerda node-version: '20' deb Node'ning 20-versiyasini o'rnatamiz.
'20') yozing. YAML 20.10 kabi sonlarni noto'g'ri o'qishi mumkin, tirnoq esa buni oldini oladi.npm ci โ bog'liqliklarni o'rnatish
CI muhitida npm install emas, npm ci ishlatiladi. Farqi muhim:
npm cianiqpackage-lock.jsonasosida o'rnatadi โ takrorlanadigan, bir xil natija beradi.node_modulespapkasini avval tozalab, keyin toza o'rnatadi.package.jsonva lock fayl mos kelmasa, xato beradi (bu yaxshi โ muammoni erta topadi).- Tezroq va CI uchun maxsus mo'ljallangan.
- name: Bog'liqliklarni o'rnatish
run: npm ci
npm ci ishlashi uchun repoda package-lock.json bo'lishi shart. Uni .gitignore ga qo'ymang โ lock fayl repoda bo'lishi kerak.Test va build qadamlari
Bog'liqliklar o'rnatilgach, testlar va build ishga tushadi. Bu package.jsondagi skriptlarga bog'liq:
// package.json ichida:
"scripts": {
"test": "jest",
"build": "vite build",
"lint": "eslint ."
}
Endi workflow'da shu skriptlarni chaqiramiz:
- name: Linter
run: npm run lint
- name: Testlar
run: npm test
- name: Build
run: npm run build
Agar biror qadam noldan farqli chiqish kodi (exit code) qaytarsa โ masalan test buzilsa โ job to'xtaydi va keyingi qadamlar ishlamaydi. Aynan shu bizga kerak.
To'liq CI workflow
Barcha qadamlarni .github/workflows/ci.yml ga birlashtiramiz:
name: CI
on:
push:
branches: [ main ]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Node.js o'rnatish
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Bog'liqliklar
run: npm ci
- name: Linter
run: npm run lint
- name: Testlar
run: npm test
- name: Build
run: npm run build
Matrix โ bir nechta Node versiyasi
Loyihangiz Node 18, 20 va 22 da ishlashini tekshirmoqchimisiz? Matrix yordamida bitta job'ni har bir versiya uchun avtomatik takrorlaysiz:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Node ${{ matrix.node-version }} o'rnatish
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm test
Bu workflow uchta parallel job yaratadi: biri Node 18 uchun, biri 20, biri 22. Ular bir vaqtda ishlaydi. ${{ matrix.node-version }} โ matrix'dagi joriy qiymatga murojaat.
os: [ubuntu-latest, windows-latest]) yoki boshqa o'zgaruvchilar uchun ham ishlatiladi. Ular kombinatsiyalarga bo'linadi.Kesh (cache) โ tezlashtirish
Har safar npm ci bog'liqliklarni noldan yuklab oladi โ bu sekin. actions/setup-node o'rnatilgan keshni qo'llab-quvvatlaydi:
- name: Node.js o'rnatish (kesh bilan)
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache: 'npm' qatori npm keshini saqlaydi va keyingi ishga tushirishlarda qayta ishlatadi. package-lock.json o'zgarmasa, bog'liqliklar keshdan olinadi โ bu ancha tez.
package-lock.json hash'i asosida boshqariladi. Lock fayl o'zgarsa, kesh yangilanadi. Siz hech narsa qilmaysiz โ faqat cache: 'npm' qatorini qo'shasiz.Status badge โ README'da nishon
CI holatini README'da ko'rsatuvchi badge (nishon) qo'shishingiz mumkin. U yashil (o'tdi) yoki qizil (buzildi) bo'ladi. Markdown ko'rinishi:

USER โ GitHub foydalanuvchi nomi, REPO โ repo nomi, ci.yml โ workflow fayl nomi. Badge har doim asosiy shoxchaning oxirgi holatini ko'rsatadi.
Xulosa
actions/setup-node@v4bilan aniq Node versiyasini o'rnatasiz.- CI'da
npm installemas,npm ciishlating (takrorlanadigan, lock faylga bog'liq). npm run lint,npm test,npm run buildโ asosiy tekshiruv qadamlari.- Matrix bir workflow'ni bir nechta Node versiyasi/OS uchun parallel takrorlaydi.
cache: 'npm'bog'liqliklarni keshlab, ishni tezlashtiradi.- Badge README'da CI holatini ko'rsatadi.