08. Workshop 1 Vite + React
สร้าง project react ก่อน ด้วย vite
bun create viteเลือกตามนี้เลย หรือใครจะเลือกแบบอื่นก็ได้นะ ไม่ได้จะแก้ไขอะไรหรอก แค่มีโปรเจคก็พอ
│◇ Project name:│ react│◇ Select a framework:│ React│◇ Select a variant:│ TypeScript│◇ Scaffolding project in /Users/atiwatseenark/Documents/workshop/gh-actions-projects/react...│└ Done. Now run:
cd react bun install bun run devจากนั้นก็ไปสร้าง repo ใน github
git initgit add .git commit -m "first init"git remote add origin <your git repository url>git branch -M maingit push -u origin mainCreate lint workflow
มาสร้าง workflow
สร้างไฟล์ .github/workflows/lint.yaml
workflows/lint.yaml`
name: ESLinton: pushjobs: lint: runs-on: ubuntu-latest steps: - name: Get Code uses: actions/checkout@v4 - name: Install Bun uses: oven-sh/setup-bun@v2 with: bun-version: 1.2.8 - name: Install Dependencies run: bun i - name: Run ESLint run: bun run lintจะเห็นว่าเราใช้ action จาก Marketplace ด้วย
actions/checkout@v4คือให้ github clone code มาไว้ใน directory ที่ action ทำงานoven-sh/setup-bun@v2คือ action ที่จะ install bun ให้เราใช้งานได้ เพราะว่า Ubuntu-latest เปล่าๆไม่ได้ติดตั้ง Bun มาให้with: bun-version: 1.2.18คือกำหนด version ของ Bun ที่จะติดตั้ง
run: bun iเป็นคำสั่งที่เราใช้รันใน shell ปกตินี่แหละrun: bun run lintเป็นคำสั่งที่เราใช้รันใน shell ปกติเหมือนกัน
ลอง Push code เลย
create deploy workflow
เราจะไม่ได้ deploy จริงในตอนนี้นะ เอาแค่ให้เห็นว่า build ยังไงได้ folder dist มายังไงพอ
workflows/deploy.yaml
name: Deploy Projecton: pushjobs: lint: runs-on: ubuntu-latest steps: - name: Get Code uses: actions/checkout@v4 - name: Install Bun uses: oven-sh/setup-bun@v2 with: bun-version: 1.2.18 - name: Install Dependencies run: bun i - name: Run ESLint run: bun run lint deploy: runs-on: ubuntu-latest steps: - name: Get Code uses: actions/checkout@v4 - name: Install Bun uses: oven-sh/setup-bun@v2 with: bun-version: 1.2.18 - name: Install Dependencies run: bun i - name: Build Project run: bun run build - name: List files run: ls -l dist - name: Deploy run: echo "Deploying..."แล้วก็ลอง push code แล้วรอดูที่หน้าเวปของ Github ได้เลย
จะเห็นว่าใน Workflow นี้เรามี 2 jobs
- lint ก็ทำงานเหมือนเดิมแหละ
- deploy ที่จะ build แล้วได้ folder
distแต่เราไม่ได้ deploy จริง แค่echoเฉยๆ
ซึ่ง jobs ทั้งสองจะทำงานพร้อมกัน เหมือนกับอยู่กันคนละเครื่องเลย ทั้งสอง jobs จะมองไม่เห็นกันเลย
พออยู่กันคนละเครื่อง เราก็เลยต้อง checkout ทั้งสอง jobs
Sequential Jobs
ถ้าเราไม่อยากให้ jobs มันทำงานพร้อมกัน เราต้องการให้ jobs ทำงานตามลำดับ
เราแค่ต้องเพิ่ม needs ให้กับ jobs ที่ต้องการให้รอ แบบนี้
workflows/deploy.yaml
name: Deploy Projecton: pushjobs: lint: runs-on: ubuntu-latest steps: - name: Get Code uses: actions/checkout@v4 - name: Install Bun uses: oven-sh/setup-bun@v2 with: bun-version: 1.2.18 - name: Install Dependencies run: bun i - name: Run ESLint run: bun run lint deploy: needs: - lint runs-on: ubuntu-latest steps: - name: Get Code uses: actions/checkout@v4 - name: Install Bun uses: oven-sh/setup-bun@v2 with: bun-version: 1.2.18 - name: Install Dependencies run: bun i - name: Build Project run: bun run build - name: List files run: ls -l dist - name: Deploy run: echo "Deploying..."โดย lint ก็มาจากชื่อของ job ด้านบน