Files
2026FIFAWorldCup/.github/workflows/deploy-production.yml

119 lines
4.5 KiB
YAML

name: deploy-2026fifa-platform
on:
push:
branches:
- main
jobs:
test-and-build:
runs-on: ubuntu-latest
steps:
- name: 取回原始碼
uses: actions/checkout@v4
- name: 設定 Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: 安裝前端套件
working-directory: platform/web
run: npm install
- name: 前端 Lint
working-directory: platform/web
run: npm run lint
- name: 前端建置檢查
working-directory: platform/web
run: npm run build
- name: 設定 Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: 安裝後端與警報套件
run: |
python -m pip install --upgrade pip
pip install -r platform/backend/requirements.txt
pip install -r platform/alerts/requirements.txt
- name: 編譯 Python 程式碼
run: |
python -m compileall platform/backend/app
python -m compileall platform/alerts
build-and-push:
needs: test-and-build
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: 取回原始碼
uses: actions/checkout@v4
- name: 登入容器倉庫
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build 並推送前端映像
run: |
docker build -t ghcr.io/${{ github.repository_owner }}/2026fifa-web:${{ github.sha }} platform/web
docker tag ghcr.io/${{ github.repository_owner }}/2026fifa-web:${{ github.sha }} ghcr.io/${{ github.repository_owner }}/2026fifa-web:latest
docker push ghcr.io/${{ github.repository_owner }}/2026fifa-web:${{ github.sha }}
docker push ghcr.io/${{ github.repository_owner }}/2026fifa-web:latest
- name: Build 並推送後端映像
run: |
docker build -t ghcr.io/${{ github.repository_owner }}/2026fifa-backend:${{ github.sha }} platform/backend
docker tag ghcr.io/${{ github.repository_owner }}/2026fifa-backend:${{ github.sha }} ghcr.io/${{ github.repository_owner }}/2026fifa-backend:latest
docker push ghcr.io/${{ github.repository_owner }}/2026fifa-backend:${{ github.sha }}
docker push ghcr.io/${{ github.repository_owner }}/2026fifa-backend:latest
- name: Build 並推送警報服務映像
run: |
docker build -t ghcr.io/${{ github.repository_owner }}/2026fifa-alerts:${{ github.sha }} platform/alerts
docker tag ghcr.io/${{ github.repository_owner }}/2026fifa-alerts:${{ github.sha }} ghcr.io/${{ github.repository_owner }}/2026fifa-alerts:latest
docker push ghcr.io/${{ github.repository_owner }}/2026fifa-alerts:${{ github.sha }}
docker push ghcr.io/${{ github.repository_owner }}/2026fifa-alerts:latest
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: 取回原始碼
uses: actions/checkout@v4
- name: 安裝 kubectl
uses: azure/setup-kubectl@v4
with:
version: 'v1.30.0'
- name: 建立 KubeConfig
run: |
mkdir -p ~/.kube
echo "${{ secrets.K3S_KUBECONFIG }}" > ~/.kube/config
- name: 替換映像版本
run: |
sed -i "s#ghcr.io/your-org/2026fifa-web:latest#ghcr.io/${{ github.repository_owner }}/2026fifa-web:${{ github.sha }}#g" platform/deploy/k3s/web-deployment.yaml
sed -i "s#ghcr.io/your-org/2026fifa-backend:latest#ghcr.io/${{ github.repository_owner }}/2026fifa-backend:${{ github.sha }}#g" platform/deploy/k3s/backend-deployment.yaml
sed -i "s#ghcr.io/your-org/2026fifa-alerts:latest#ghcr.io/${{ github.repository_owner }}/2026fifa-alerts:${{ github.sha }}#g" platform/deploy/k3s/alerts-deployment.yaml
- name: 套用 K3s Manifest
run: |
kubectl apply -f platform/deploy/k3s/namespace.yaml
kubectl apply -f platform/deploy/k3s/secret.yaml
kubectl apply -f platform/deploy/k3s/configmap.yaml
kubectl apply -f platform/deploy/k3s/postgres-deployment.yaml
kubectl apply -f platform/deploy/k3s/redis-deployment.yaml
kubectl apply -f platform/deploy/k3s/backend-deployment.yaml
kubectl apply -f platform/deploy/k3s/web-deployment.yaml
kubectl apply -f platform/deploy/k3s/alerts-deployment.yaml
kubectl apply -f platform/deploy/k3s/ingress.yaml