Initial commit: Pipeline Database
This commit is contained in:
272
.gitea/workflows/ci.yml
Normal file
272
.gitea/workflows/ci.yml
Normal file
@@ -0,0 +1,272 @@
|
||||
name: CI Pipeline
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main, develop ]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: 测试和基准测试
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: [1.24.x, 1.25.x]
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置 Go 环境
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
|
||||
- name: 验证 Go 模块
|
||||
run: |
|
||||
go mod tidy
|
||||
git diff --exit-code go.mod go.sum
|
||||
|
||||
- name: 下载依赖
|
||||
run: go mod download
|
||||
|
||||
- name: 代码格式检查
|
||||
run: |
|
||||
if [ "$(gofmt -s -l . | wc -l)" -gt 0 ]; then
|
||||
echo "以下文件需要格式化:"
|
||||
gofmt -s -l .
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: 静态代码检查
|
||||
run: |
|
||||
go vet ./...
|
||||
|
||||
- name: 运行单元测试
|
||||
run: |
|
||||
go test -v -race -coverprofile=coverage.out ./...
|
||||
|
||||
- name: 生成测试覆盖率报告
|
||||
run: |
|
||||
go tool cover -html=coverage.out -o coverage.html
|
||||
go tool cover -func=coverage.out
|
||||
|
||||
- name: 运行基准测试
|
||||
run: |
|
||||
echo "=== 基础性能基准测试 ==="
|
||||
go test -bench=BenchmarkPipelineDB -benchmem -benchtime=1s -run=^$ ./...
|
||||
|
||||
echo "=== 并发性能基准测试 ==="
|
||||
go test -bench=BenchmarkConcurrent -benchmem -benchtime=500ms -run=^$ ./...
|
||||
|
||||
echo "=== 存储引擎基准测试 ==="
|
||||
go test -bench=BenchmarkStorage -benchmem -benchtime=500ms -run=^$ ./...
|
||||
|
||||
echo "=== 缓存系统基准测试 ==="
|
||||
go test -bench=BenchmarkCache -benchmem -benchtime=500ms -run=^$ ./...
|
||||
|
||||
echo "=== Handler 基准测试 ==="
|
||||
go test -bench=BenchmarkHandler -benchmem -benchtime=500ms -run=^$ ./...
|
||||
|
||||
- name: 运行示例程序
|
||||
run: |
|
||||
echo "=== 测试基础使用示例 ==="
|
||||
cd examples/basic-usage && timeout 10s go run main.go || true
|
||||
|
||||
echo "=== 测试组管理示例 ==="
|
||||
cd ../group-management && timeout 10s go run main.go || true
|
||||
|
||||
echo "=== 测试外部处理器示例 ==="
|
||||
cd ../external-handler && timeout 10s go run main.go || true
|
||||
|
||||
- name: 上传测试覆盖率
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: coverage-report-go${{ matrix.go-version }}
|
||||
path: |
|
||||
coverage.out
|
||||
coverage.html
|
||||
|
||||
- name: 检查测试覆盖率
|
||||
run: |
|
||||
COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//')
|
||||
echo "测试覆盖率: ${COVERAGE}%"
|
||||
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
|
||||
echo "⚠️ 测试覆盖率低于 80%"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ 测试覆盖率达标"
|
||||
|
||||
build:
|
||||
name: 构建验证
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
goos: [linux, darwin, windows]
|
||||
goarch: [amd64, arm64]
|
||||
exclude:
|
||||
- goos: windows
|
||||
goarch: arm64
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置 Go 环境
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: 1.24.x
|
||||
|
||||
- name: 构建二进制文件
|
||||
env:
|
||||
GOOS: ${{ matrix.goos }}
|
||||
GOARCH: ${{ matrix.goarch }}
|
||||
run: |
|
||||
echo "构建 ${{ matrix.goos }}/${{ matrix.goarch }}"
|
||||
go build -v -ldflags="-s -w" ./...
|
||||
|
||||
- name: 构建示例程序
|
||||
env:
|
||||
GOOS: ${{ matrix.goos }}
|
||||
GOARCH: ${{ matrix.goarch }}
|
||||
run: |
|
||||
cd examples/basic-usage && go build -v -ldflags="-s -w" .
|
||||
cd ../group-management && go build -v -ldflags="-s -w" .
|
||||
cd ../external-handler && go build -v -ldflags="-s -w" .
|
||||
cd ../data-analytics && go build -v -ldflags="-s -w" .
|
||||
cd ../concurrent-processing && go build -v -ldflags="-s -w" .
|
||||
cd ../high-concurrency && go build -v -ldflags="-s -w" .
|
||||
|
||||
performance:
|
||||
name: 性能回归测试
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
if: github.event_name == 'pull_request'
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置 Go 环境
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: 1.24.x
|
||||
|
||||
- name: 运行性能基准测试
|
||||
run: |
|
||||
echo "=== 性能基准测试 - 当前分支 ==="
|
||||
go test -bench=. -benchmem -count=3 -benchtime=2s -run=^$ ./... > current_bench.txt
|
||||
|
||||
- name: 检出主分支
|
||||
run: |
|
||||
git fetch origin main
|
||||
git checkout origin/main
|
||||
|
||||
- name: 运行性能基准测试 - 主分支
|
||||
run: |
|
||||
echo "=== 性能基准测试 - 主分支 ==="
|
||||
go test -bench=. -benchmem -count=3 -benchtime=2s -run=^$ ./... > main_bench.txt || true
|
||||
|
||||
- name: 性能对比分析
|
||||
run: |
|
||||
echo "=== 性能对比报告 ==="
|
||||
echo "当前分支性能:"
|
||||
cat current_bench.txt | grep "Benchmark" | head -10
|
||||
echo ""
|
||||
echo "主分支性能:"
|
||||
cat main_bench.txt | grep "Benchmark" | head -10 || echo "主分支基准测试数据不可用"
|
||||
|
||||
- name: 上传性能报告
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: performance-report
|
||||
path: |
|
||||
current_bench.txt
|
||||
main_bench.txt
|
||||
|
||||
security:
|
||||
name: 安全扫描
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置 Go 环境
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: 1.24.x
|
||||
|
||||
- name: 安装 gosec
|
||||
run: go install github.com/securego/gosec/v2/cmd/gosec@latest
|
||||
|
||||
- name: 运行安全扫描
|
||||
run: |
|
||||
gosec -fmt json -out gosec-report.json ./...
|
||||
gosec ./...
|
||||
|
||||
- name: 上传安全报告
|
||||
uses: actions/upload-artifact@v3
|
||||
if: always()
|
||||
with:
|
||||
name: security-report
|
||||
path: gosec-report.json
|
||||
|
||||
quality:
|
||||
name: 代码质量检查
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 设置 Go 环境
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: 1.24.x
|
||||
|
||||
- name: 安装代码质量工具
|
||||
run: |
|
||||
go install honnef.co/go/tools/cmd/staticcheck@latest
|
||||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||||
|
||||
- name: 运行 staticcheck
|
||||
run: staticcheck ./...
|
||||
|
||||
- name: 运行 golangci-lint
|
||||
run: golangci-lint run ./...
|
||||
|
||||
- name: 检查循环复杂度
|
||||
run: |
|
||||
go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
|
||||
gocyclo -over 15 .
|
||||
|
||||
- name: 检查代码重复
|
||||
run: |
|
||||
go install github.com/mibk/dupl@latest
|
||||
dupl -threshold 100 .
|
||||
|
||||
notification:
|
||||
name: 通知
|
||||
runs-on: ubuntu-latest
|
||||
needs: [test, build, security, quality]
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: 构建状态通知
|
||||
run: |
|
||||
if [[ "${{ needs.test.result }}" == "success" && "${{ needs.build.result }}" == "success" && "${{ needs.security.result }}" == "success" && "${{ needs.quality.result }}" == "success" ]]; then
|
||||
echo "✅ 所有检查通过!"
|
||||
echo "STATUS=success" >> $GITHUB_ENV
|
||||
else
|
||||
echo "❌ 部分检查失败"
|
||||
echo "测试结果: ${{ needs.test.result }}"
|
||||
echo "构建结果: ${{ needs.build.result }}"
|
||||
echo "安全扫描: ${{ needs.security.result }}"
|
||||
echo "质量检查: ${{ needs.quality.result }}"
|
||||
echo "STATUS=failure" >> $GITHUB_ENV
|
||||
fi
|
||||
Reference in New Issue
Block a user