The cp -r *.go */ command was failing because glob patterns don't work reliably in shell scripts. Use find to copy all .go files recursively while preserving directory structure.
221 lines
6.7 KiB
YAML
221 lines
6.7 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 -exec cp --parents {} ../internal/ent/ \;
|
|
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 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 -exec cp --parents {} ../internal/ent/ \;
|
|
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 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 -exec cp --parents {} ../internal/ent/ \;
|
|
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 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
|