經過十天的 AWS 學習,我們建立了強大的雲端基礎設施。現在要學習 GitHub,這就像是為我們的農場建立一個現代化的倉庫管理系統。還記得爸爸以前記錄農作物品種、播種時間、收成紀錄都是用手寫本子嗎?GitHub 就像是數位化的超級記錄本!
GitHub 是基於 Git 的程式碼托管平台,提供:
trading-bot-system/
├── .github/
│ ├── workflows/ # GitHub Actions 工作流程
│ │ ├── ci.yml # 持續整合
│ │ ├── cd-prod.yml # 生產環境部署
│ │ └── cd-dev.yml # 開發環境部署
│ └── ISSUE_TEMPLATE/ # 問題範本
├── src/ # 原始碼
│ ├── trading/ # 交易邏輯
│ ├── strategies/ # 交易策略
│ ├── utils/ # 工具函數
│ └── tests/ # 測試程式
├── infrastructure/ # 基礎設施程式碼
│ ├── aws/ # AWS 相關配置
│ ├── terraform/ # Terraform 腳本
│ └── docker/ # Docker 相關檔案
├── docs/ # 文件
├── config/ # 配置檔案
├── scripts/ # 部署和維護腳本
├── Dockerfile # Docker 映像檔定義
├── requirements.txt # Python 相依套件
└── README.md # 專案說明
![GitFlow 分支模型]
(https://ithelp.ithome.com.tw/upload/images/20250921/201514838NXWV1PjLj.png)
# 功能分支
feature/add-bybit-api-integration
feature/implement-arbitrage-strategy
feature/add-risk-management
# 修復分支
bugfix/fix-order-execution-timeout
bugfix/resolve-memory-leak
# 發布分支
release/v1.0.0
release/v1.1.0
# 緊急修復分支
hotfix/fix-critical-trading-bug
hotfix/security-patch
---
name: Bug Report
about: 回報程式錯誤
title: '[BUG] '
labels: bug
assignees: ''
---
## 錯誤描述
簡要描述遇到的問題
## 重現步驟
1. 進行交易策略 A
2. 設定風險參數 X
3. 執行交易
4. 出現錯誤
## 預期行為
描述你預期應該發生什麼
## 實際行為
描述實際發生了什麼
## 環境資訊
- OS: [e.g. Ubuntu 20.04]
- Python版本: [e.g. 3.9.0]
- 交易對: [e.g. BTC/USDT]
## 額外資訊
其他可能有幫助的資訊
## Pull Request 檢查清單
### 程式碼品質
- [ ] 程式碼已經過 linting 檢查
- [ ] 所有測試都通過
- [ ] 程式碼覆蓋率達到要求 (>80%)
- [ ] 沒有安全漏洞
### 功能驗證
- [ ] 功能按預期運作
- [ ] 沒有破壞既有功能
- [ ] 效能影響在可接受範圍
### 文件
- [ ] 更新相關文件
- [ ] API 文件已更新
- [ ] CHANGELOG 已更新
### 部署
- [ ] 可以成功部署到開發環境
- [ ] 資料庫遷移腳本已準備
- [ ] 環境變數已更新
# .github/workflows/pr-checks.yml
name: PR Checks
on:
pull_request:
branches: [ main, develop ]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.9'
- name: Install dependencies
run: |
pip install flake8 black isort
pip install -r requirements.txt
- name: Lint with flake8
run: flake8 src/
- name: Check formatting with black
run: black --check src/
- name: Check imports with isort
run: isort --check-only src/
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.9'
- name: Install dependencies
run: |
pip install pytest pytest-cov
pip install -r requirements.txt
- name: Run tests
run: |
pytest src/tests/ --cov=src/ --cov-report=xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: ./coverage.xml
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run security checks
uses: pypa/gh-action-pip-audit@v1.0.8
with:
inputs: requirements.txt
name: Trading Bot CI/CD
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
env:
AWS_REGION: us-east-1
ECR_REPOSITORY: trading-bot
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build and push Docker image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
檢查重點:
邏輯正確性
效能影響
安全性
可維護性
## 里程碑: v1.0.0 - 基礎交易系統
**目標日期**: 2024-01-31
**完成度**: 75%
### 主要功能
- [x] Bybit API 整合
- [x] 基礎交易邏輯
- [ ] 風險管理模組
- [ ] 監控告警系統
### 相關 Issues
- #12 實作 Bybit API 連接
- #15 建立交易策略框架
- #18 新增風險控制機制
# .gitignore
*.env
.env.local
.env.production
config/secrets/
*.key
*.pem
logs/
__pycache__/
# 保護 main 分支
protection_rules:
required_status_checks:
strict: true
contexts:
- "ci/lint"
- "ci/test"
- "ci/security"
required_pull_request_reviews:
required_approving_review_count: 2
dismiss_stale_reviews: true
require_code_owner_reviews: true
restrictions:
users: []
teams: ["senior-developers"]
enforce_admins: true
# .github/workflows/security.yml
name: Security Scan
on:
schedule:
- cron: '0 0 * * 1' # 每週一執行
jobs:
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/python@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
今天我們學習了 GitHub 的核心功能,這個現代化的程式碼管理平台將成為我們開發流程的中樞。就像農場需要良好的記錄和管理系統一樣,GitHub 為我們的量化交易系統提供了:
明天我們將深入學習 GitHub Runner,了解如何設定自動化部署到生產環境!
下一篇:Day 12 - Github Runner - Deploy Prod