iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

小明的數位倉庫管理系統

經過十天的 AWS 學習,我們建立了強大的雲端基礎設施。現在要學習 GitHub,這就像是為我們的農場建立一個現代化的倉庫管理系統。還記得爸爸以前記錄農作物品種、播種時間、收成紀錄都是用手寫本子嗎?GitHub 就像是數位化的超級記錄本!

什麼是 GitHub?

GitHub 是基於 Git 的程式碼托管平台,提供:

  • 版本控制:就像農場日誌,記錄每次的變更
  • 協作開發:多人可以同時工作,不會互相干擾
  • 問題追蹤:記錄和解決程式問題
  • 自動化流程:透過 GitHub Actions 實現 CI/CD

GitHub 核心功能概覽

GitHub 核心功能概覽

我們交易系統的 GitHub 架構

Repository 結構設計

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            # 專案說明

Git 分支策略

GitFlow 分支模型

![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

Issues 問題管理

問題分類標籤

問題分類標籤

Issue 範本

---
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 Requests 流程

PR 檢查清單

## 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

GitHub Actions 基礎

Workflow 基本結構

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

Secrets 管理

Secrets 管理

協作開發流程

日常開發流程

日常開發流程

Code Review 最佳實踐

檢查重點:

  1. 邏輯正確性

    • 交易邏輯是否正確
    • 錯誤處理是否完善
    • 邊界條件考慮
  2. 效能影響

    • 資料庫查詢優化
    • API 呼叫頻率
    • 記憶體使用
  3. 安全性

    • 敏感資訊保護
    • 輸入驗證
    • 權限檢查
  4. 可維護性

    • 程式碼可讀性
    • 註解完整性
    • 測試覆蓋率

專案管理功能

GitHub Projects 看板

GitHub Projects 看板

Milestones 里程碑

## 里程碑: v1.0.0 - 基礎交易系統
**目標日期**: 2024-01-31
**完成度**: 75%

### 主要功能
- [x] Bybit API 整合
- [x] 基礎交易邏輯
- [ ] 風險管理模組
- [ ] 監控告警系統

### 相關 Issues
- #12 實作 Bybit API 連接
- #15 建立交易策略框架
- #18 新增風險控制機制

安全最佳實踐

1. 敏感資訊保護

# .gitignore
*.env
.env.local
.env.production
config/secrets/
*.key
*.pem
logs/
__pycache__/

2. 分支保護規則

# 保護 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

3. 依賴性安全掃描

# .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 為我們的量化交易系統提供了:

  1. 版本控制:追蹤每次程式碼變更
  2. 協作開發:多人安全地共同開發
  3. 問題管理:系統化追蹤和解決問題
  4. 自動化流程:透過 GitHub Actions 實現 CI/CD
  5. 安全機制:保護程式碼和敏感資訊

明天我們將深入學習 GitHub Runner,了解如何設定自動化部署到生產環境!


下一篇:Day 12 - Github Runner - Deploy Prod


上一篇
Day 10: AWS Elastic IP
系列文
小資族的量化交易 10111
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言