CI/CD — GitHub Actions

Cấu hình CI/CD pipeline với GitHub Actions cho tất cả dự án PrimeCommerce.

Tổng quan Pipeline


Workflow cho Pull Requests

Chạy tự động khi có PR vào staging:
# .github/workflows/ci.yml
name: CI

on:
  pull_request:
    branches: [staging, main]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile
      - run: pnpm lint
      - run: pnpm typecheck

  test:
    runs-on: ubuntu-latest
    needs: lint
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile
      - run: pnpm test --coverage

Workflow cho Deploy

Chạy tự động khi push vào staging:
# .github/workflows/deploy-staging.yml
name: Deploy Staging

on:
  push:
    branches: [staging]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pnpm install --frozen-lockfile
      - run: pnpm build
      - run: ./scripts/deploy-staging.sh

Tối ưu CI/CD

Path Filters

Chỉ chạy khi files liên quan thay đổi:
on:
  pull_request:
    paths:
      - 'apps/web/**'
      - 'packages/shared/**'
      - 'package.json'

Concurrency

Hủy build cũ khi có build mới:
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Cache

Cache dependencies để tăng tốc:
- uses: actions/setup-node@v4
  with:
    node-version: 22
    cache: 'pnpm'

Chi phí tối ưu

Tối ưuHiệu quả
Path filtersGiảm 60-70% runs không cần thiết
ConcurrencyHủy builds cũ, tiết kiệm minutes
Cache (pnpm)Giảm thời gian install từ 2 phút xuống 20 giây
Matrix strategyChạy parallel cho nhiều Node versions

Fix CI/CD Failures

Khi CI bị lỗi:
/fix:ci
Tự động:
  1. Đọc GitHub Actions logs
  2. Xác định bước bị fail
  3. Phân tích nguyên nhân
  4. Đề xuất và áp dụng fix

Secrets Management

  • KHÔNG BAO GIỜ commit secrets vào code
  • Sử dụng GitHub Secrets cho CI/CD
  • Sử dụng .env.example với placeholder values
  • Dùng secret-scanner skill để kiểm tra
# Kiểm tra secrets trong code
/secret-scanner