name: CI on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: test: name: Test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25.3' - name: Cache Go modules uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download dependencies run: go mod download - name: Verify dependencies run: go mod verify - name: Install protoc and plugins run: | apk add --no-cache protobuf-dev protoc go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest echo "$HOME/go/bin" >> $GITHUB_PATH - name: Generate code run: | make generate-proto echo "Checking for Ent schema directory..." if [ -d "ent/schema" ]; then echo "Generating Ent code..." go install entgo.io/ent/cmd/ent@latest cd ent/schema && go run -mod=mod entgo.io/ent/cmd/ent generate . echo "Copying Ent code to internal/ent..." cd .. && mkdir -p ../internal/ent cp -r *.go */ ../internal/ent/ 2>/dev/null || true rm -f ../internal/ent/generate.go rm -rf ../internal/ent/schema echo "Verifying internal/ent/ent.go exists..." ls -la ../internal/ent/ent.go || echo "ERROR: ent.go not found!" else echo "WARNING: ent/schema directory not found!" fi - name: Check for test files id: check-tests run: | echo "Checking for test files..." TEST_FILES=$(find . -name "*_test.go" -not -path "./vendor/*" -not -path "./.git/*" 2>/dev/null || true) if [ -n "$TEST_FILES" ]; then echo "Found test files:" echo "$TEST_FILES" echo "tests_exist=true" >> $GITHUB_OUTPUT else echo "No test files found. Skipping test execution." echo "tests_exist=false" >> $GITHUB_OUTPUT fi - name: Run tests if: steps.check-tests.outputs.tests_exist == 'true' env: CGO_ENABLED: 1 run: make test-coverage - name: Upload coverage if: steps.check-tests.outputs.tests_exist == 'true' uses: codecov/codecov-action@v3 with: file: ./coverage.out fail_ci_if_error: false - name: Verify build (no tests) if: steps.check-tests.outputs.tests_exist == 'false' run: make build lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25.3' - name: Download dependencies run: go mod download - name: Install protoc and plugins run: | apk add --no-cache protobuf-dev protoc go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest echo "$HOME/go/bin" >> $GITHUB_PATH - name: Generate code run: | make generate-proto echo "Checking for Ent schema directory..." if [ -d "ent/schema" ]; then echo "Generating Ent code..." go install entgo.io/ent/cmd/ent@latest cd ent/schema && go run -mod=mod entgo.io/ent/cmd/ent generate . echo "Copying Ent code to internal/ent..." cd .. && mkdir -p ../internal/ent cp -r *.go */ ../internal/ent/ 2>/dev/null || true rm -f ../internal/ent/generate.go rm -rf ../internal/ent/schema echo "Verifying internal/ent/ent.go exists..." ls -la ../internal/ent/ent.go || echo "ERROR: ent.go not found!" else echo "WARNING: ent/schema directory not found!" fi - name: Install golangci-lint run: | go install github.com/golangci/golangci-lint/cmd/golangci-lint@v2 echo "$HOME/go/bin" >> $GITHUB_PATH - name: Run linters run: make lint build: name: Build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25.3' - name: Cache Go modules uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download dependencies run: go mod download - name: Install protoc and plugins run: | apk add --no-cache protobuf-dev protoc go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest echo "$HOME/go/bin" >> $GITHUB_PATH - name: Generate code run: | make generate-proto echo "Checking for Ent schema directory..." if [ -d "ent/schema" ]; then echo "Generating Ent code..." go install entgo.io/ent/cmd/ent@latest cd ent/schema && go run -mod=mod entgo.io/ent/cmd/ent generate . echo "Copying Ent code to internal/ent..." cd .. && mkdir -p ../internal/ent cp -r *.go */ ../internal/ent/ 2>/dev/null || true rm -f ../internal/ent/generate.go rm -rf ../internal/ent/schema echo "Verifying internal/ent/ent.go exists..." ls -la ../internal/ent/ent.go || echo "ERROR: ent.go not found!" else echo "WARNING: ent/schema directory not found!" fi - name: Build run: make build - name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: binaries path: | bin/platform bin/api-gateway bin/auth-service bin/identity-service bin/authz-service bin/audit-service retention-days: 7 fmt: name: Format Check runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25.3' - name: Check formatting run: make fmt-check