Use find with proper path handling to copy all generated .go files while excluding the schema directory and preserving subdirectory structure.
218 lines
6.8 KiB
YAML
218 lines
6.8 KiB
YAML
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 directory..."
|
|
if [ -d "ent" ] && [ -f "ent/generate.go" ]; then
|
|
echo "Generating Ent code..."
|
|
go install entgo.io/ent/cmd/ent@latest
|
|
cd ent && go run -mod=mod entgo.io/ent/cmd/ent generate ./schema
|
|
echo "Copying Ent code to internal/ent..."
|
|
mkdir -p ../internal/ent
|
|
find . -name "*.go" -type f ! -path "./schema/*" -exec sh -c 'mkdir -p ../internal/ent/$(dirname "{}") && cp "{}" ../internal/ent/"{}"' \;
|
|
rm -f ../internal/ent/generate.go
|
|
echo "Verifying internal/ent/ent.go exists..."
|
|
ls -la ../internal/ent/ent.go || echo "ERROR: ent.go not found!"
|
|
else
|
|
echo "WARNING: ent directory or generate.go 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 directory..."
|
|
if [ -d "ent" ] && [ -f "ent/generate.go" ]; then
|
|
echo "Generating Ent code..."
|
|
go install entgo.io/ent/cmd/ent@latest
|
|
cd ent && go run -mod=mod entgo.io/ent/cmd/ent generate ./schema
|
|
echo "Copying Ent code to internal/ent..."
|
|
mkdir -p ../internal/ent
|
|
find . -name "*.go" -type f ! -path "./schema/*" -exec sh -c 'mkdir -p ../internal/ent/$(dirname "{}") && cp "{}" ../internal/ent/"{}"' \;
|
|
rm -f ../internal/ent/generate.go
|
|
echo "Verifying internal/ent/ent.go exists..."
|
|
ls -la ../internal/ent/ent.go || echo "ERROR: ent.go not found!"
|
|
else
|
|
echo "WARNING: ent directory or generate.go not found!"
|
|
fi
|
|
|
|
- name: Install golangci-lint
|
|
run: |
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
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 directory..."
|
|
if [ -d "ent" ] && [ -f "ent/generate.go" ]; then
|
|
echo "Generating Ent code..."
|
|
go install entgo.io/ent/cmd/ent@latest
|
|
cd ent && go run -mod=mod entgo.io/ent/cmd/ent generate ./schema
|
|
echo "Copying Ent code to internal/ent..."
|
|
mkdir -p ../internal/ent
|
|
find . -name "*.go" -type f ! -path "./schema/*" -exec sh -c 'mkdir -p ../internal/ent/$(dirname "{}") && cp "{}" ../internal/ent/"{}"' \;
|
|
rm -f ../internal/ent/generate.go
|
|
echo "Verifying internal/ent/ent.go exists..."
|
|
ls -la ../internal/ent/ent.go || echo "ERROR: ent.go not found!"
|
|
else
|
|
echo "WARNING: ent directory or generate.go 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
|