GitHub Actions ဖြင့် CI စတင်တည်ဆောက်နည်း
Pull request တိုင်း install၊ lint၊ typecheck နှင့် test အလိုအလျောက်ပြေးပြီး မကောင်းသော code main branch ထဲမဝင်စေမည့် CI workflow တည်ဆောက်ပါမယ်။
ဖြေရှင်းမည့်ပြဿနာ
Developer တစ်ယောက်ချင်းစီက စမ်းသပ်ပုံမတူလျှင် main branch ပေါ်မှာမှ build ပျက်တာကိုတွေ့ရပြီး ပြန်ပြင်ချိန်ကုန်ပါတယ်။
လိုအပ်ချက်များ
- GitHub repository
- package.json scripts
- Project ကို local မှာ test လုပ်နိုင်မှု
Local scripts ကိုတိကျအောင်လုပ်ပါ
CI က magic မဟုတ်ပါဘူး။ Local မှာ run နိုင်တဲ့ command တွေကို clean environment မှာပြန်ပြေးပေးတာပါ။ lint၊ typecheck၊ test နဲ့ build scripts အားလုံး exit code မှန်အောင်ထားပါ။
$ pnpm lint
$ pnpm typecheck
$ pnpm test
$ pnpm buildWorkflow file ဖန်တီးပါ
Pull request နဲ့ main push အချိန်မှာပြေးမည့် workflow တစ်ခုရေးပါ။ Lockfile ရှိတာကိုသုံးပြီး frozen install လုပ်ရင် dependency version မတော်တဆပြောင်းမသွားပါဘူး။
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm typecheck
- run: pnpm test
- run: pnpm buildPermissions နှင့် secrets ကိုလျှော့ပါ
Test job က repository ကိုဖတ်ရုံပဲလိုရင် write permission မပေးပါနဲ့။ Fork PR တွေမှာ secret မပေးသင့်သလို secret တန်ဖိုးကို log ထဲမထုတ်ပါနှင့်။ Third-party actions ကို trusted publisher နှင့် stable version ဖြင့်သာသုံးပါ။
permissions:
contents: readBranch protection ချိတ်ပါ
Workflow ရှိရုံနဲ့မလုံလောက်ပါ။ Repository settings မှာ main branch အတွက် required status checks နဲ့ pull request review ကိုသတ်မှတ်ပါ။ CI မအောင်မြင်ဘဲ merge မလုပ်နိုင်အောင် gate လုပ်ပါ။
ရရှိမည့်ရလဒ်
Pull request တိုင်း quality checks အလိုအလျောက်ပြေးပြီး failure ရှိပါက main branch ထဲမဝင်နိုင်သော CI gate ရရှိပါမယ်။
အဆင်မပြေပါက စစ်ဆေးရန်
- Local မှာအောင်မြင်ပြီး CI မှာပျက်လျှင် Node version၊ OS case sensitivity နဲ့ missing environment variables ကိုစစ်ပါ။
- Cache error ဖြစ်လျှင် lockfile path နှင့် package manager setup order ကိုစစ်ပါ။
- Test hanging ဖြစ်လျှင် open handles နဲ့ test timeout ကို logs မှာရှာပါ။