feat: implement git client concurrency control with observability #98
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [ main, develop, feat/* ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| env: | |
| GO_VERSION: '1.24' | |
| jobs: | |
| lint: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: ${{ env.GO_VERSION }} | |
| - name: Run golangci-lint | |
| uses: golangci/golangci-lint-action@v3 | |
| with: | |
| version: latest | |
| args: --timeout=5m | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| test-suite: | |
| - unit | |
| - integration | |
| - race | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: ${{ env.GO_VERSION }} | |
| - name: Get dependencies | |
| run: | | |
| go mod download | |
| go mod verify | |
| - name: Run unit tests | |
| if: matrix.test-suite == 'unit' | |
| run: | | |
| go test -v -coverprofile=coverage.out -covermode=atomic ./pkg/... | |
| go tool cover -func=coverage.out | |
| - name: Run integration tests | |
| if: matrix.test-suite == 'integration' | |
| run: | | |
| go test -v -tags=integration ./tests/integration/... | |
| - name: Run tests with race detector | |
| if: matrix.test-suite == 'race' | |
| run: | | |
| echo "Running tests with race detector to catch concurrency bugs..." | |
| go test -race -count=1 -v ./pkg/... | |
| echo "Race detection complete." | |
| - name: Upload coverage | |
| if: matrix.test-suite == 'unit' | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| file: ./coverage.out | |
| test-race-comprehensive: | |
| name: Comprehensive Race Detection | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: ${{ env.GO_VERSION }} | |
| - name: Get dependencies | |
| run: | | |
| go mod download | |
| go mod verify | |
| - name: Run comprehensive race detection | |
| run: | | |
| echo "=== Running comprehensive race detection across all packages ===" | |
| echo "This helps catch concurrency bugs early in development." | |
| echo "" | |
| # Run race detection on all packages including tests | |
| echo "Testing all packages with race detector..." | |
| go test -race -count=1 ./... -timeout 10m || true | |
| # Focus on critical concurrent components | |
| echo "" | |
| echo "=== Focused race detection on concurrent components ===" | |
| # Git client concurrency | |
| echo "Testing git client concurrency..." | |
| go test -race -count=1 -v ./pkg/git -run "Concurrent" -timeout 5m | |
| # Controller concurrency | |
| echo "Testing controller concurrency..." | |
| go test -race -count=1 -v ./pkg/controllers -timeout 5m || true | |
| # LLM client concurrency | |
| echo "Testing LLM client concurrency..." | |
| go test -race -count=1 -v ./pkg/llm -run "Concurrent|Parallel|Worker" -timeout 5m || true | |
| # RAG pipeline concurrency | |
| echo "Testing RAG pipeline concurrency..." | |
| go test -race -count=1 -v ./pkg/rag -run "Concurrent|Parallel|Async" -timeout 5m || true | |
| echo "" | |
| echo "=== Race detection complete ===" | |
| echo "Note: Some failures are expected in components still being hardened." | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| needs: [lint, test] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: ${{ env.GO_VERSION }} | |
| - name: Build binaries | |
| run: | | |
| echo "Building nephio-bridge..." | |
| go build -v -o bin/nephio-bridge ./cmd/nephio-bridge | |
| echo "Building llm-processor..." | |
| go build -v -o bin/llm-processor ./cmd/llm-processor | |
| echo "Building oran-adaptor..." | |
| go build -v -o bin/oran-adaptor ./cmd/oran-adaptor | |
| echo "Build complete!" | |
| ls -la bin/ | |
| security: | |
| name: Security Scan | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Run Trivy vulnerability scanner | |
| uses: aquasecurity/trivy-action@master | |
| with: | |
| scan-type: 'fs' | |
| scan-ref: '.' | |
| format: 'sarif' | |
| output: 'trivy-results.sarif' | |
| - name: Upload Trivy results to GitHub Security | |
| uses: github/codeql-action/upload-sarif@v2 | |
| if: always() | |
| with: | |
| sarif_file: 'trivy-results.sarif' | |
| validate-concurrency: | |
| name: Validate Concurrency Configuration | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: ${{ env.GO_VERSION }} | |
| - name: Test concurrent push limits | |
| run: | | |
| echo "=== Testing Git Concurrent Push Limits ===" | |
| echo "" | |
| echo "Testing default limit (4)..." | |
| go test -v ./pkg/git -run TestConcurrentPushLimit -timeout 2m | |
| echo "" | |
| echo "Testing with custom limit via environment..." | |
| export GIT_CONCURRENT_PUSH_LIMIT=2 | |
| go test -v ./pkg/git -run TestConcurrentPushLimit -timeout 2m | |
| echo "" | |
| echo "Testing error propagation under concurrency..." | |
| go test -v ./pkg/git -run TestConcurrentPushWithErrors -timeout 2m | |
| echo "" | |
| echo "Testing deadlock prevention..." | |
| go test -v ./pkg/git -run TestConcurrentPushDeadlockPrevention -timeout 2m | |
| echo "" | |
| echo "=== Concurrency validation complete ===" | |
| docker: | |
| name: Docker Build | |
| runs-on: ubuntu-latest | |
| needs: [build] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Docker images | |
| run: | | |
| docker build -t nephoran-operator:ci . | |
| docker images |