
我們一路從開發到 dokcer 今天我們要討論關於 bun 在 CI/CD 上的整合了
bun 效能如此優良,過往用 npm 打包整個 CI 流程跑得非常之久,現在我們有 bun
基本上可以大幅縮短團隊的部署時間,讓產品無形中迭代的更快速
那我們開始吧
官方推薦使用 oven-sh/setup-bun 這個 Action 來安裝 bun,這是個最穩定的做法
我們來開始當 yaml 工程師吧!
我們就拿一個簡單的 bun 專案做以下的事情即可
我們在工作目錄建立 .github/workflows/bun-ci.yaml
name: "我們的 bun ci"
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: [ubuntu-latest]
name: "第一個 bun ci"
steps:
- name: "checkout code"
uses: "actions/checkout@v4"
- name: "安裝 bun(跟我本機同樣版本)"
uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.14"
- name: "裝個依賴"
run: "bun install"
- name: "我們隨便弄個測試跑跑看"
run: "bun test"
與 nodejs 很像不過我們這裡用 bun 官方提供的 oven-sh/setup-bun@v2
那我這裡 bun-version 選擇 1.3.14 存粹是因為我本機是用這個版本
讀者可以依照自己喜好改這個版本
為了跑 bun test 可以順利我們建個簡單的測試(index.test.ts)
import { describe, it, expect } from 'bun:test';
describe('這是測試', () => {
it('起手式', () => {
expect(true).toBe(true);
})
})
我們接下來把自己的 code push 到 github 上面
git init
git add .
git commit -m 'init'
git remote origin add <你的 repo>
git branch -M main
git push origin main
我們這裡看看結果


接下來這邊我們會走正常 CI 常做的事情
我們一樣可以建置一個 .github/workflows/ci.yaml
name: "ci"
on:
push:
branches: ["main", "dev"]
pull_request:
branches: ["main"]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: "checkout code"
uses: "actions/checkout@v4"
- name: "安裝 bun"
uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.14"
- name: "Cache 依賴"
uses: "actions/cache@v4"
with:
path: "~/.bun/install/cache"
key: ${{ runner.os }}-bun-${{ hashFiles('bun-lock') }}
restore-keys:
${{ runner.os }}-bun-
- name: "安裝依賴"
run: bun install --frozen-lockfile
- name: "跑 Linter"
run: "bun run lint"
- name: "跑測試"
run: "bun test"
- name: "build 專案"
run: "bun run build"
大致的流程如下
以上是簡單地流成,通常專案有裝 eslint 或是 oxlint 通常會跑 lint 沒有的話可以移除 bun run lint 那段
到這邊我們已經把 bun 在 GitHub Actions 上的基本應用跑過一輪了,
從最簡單的安裝、測試,到加上 Cache 依賴、Lint、Build 的完整 pipeline,
應該可以感受到 bun 在速度上帶來的優勢——尤其是 bun install 那個裝依賴的速度,
跟過往用 npm 動輒要等上老半天比起來,真的是差蠻多的。
不過這也引出一個問題,打包完後東西要放哪邊,這在我們下一篇會會介紹到
我們專案如果是用 Docker 包起來的,那要怎麼推上去?
想要知道,那我們下篇見