The golangci-lint-action has compatibility issues with v2.1.6 (uses --out-format flag which v2 doesn't support). Install golangci-lint manually to avoid action limitations and remove version field from config to be compatible with CI v1.64.8. Local v2.x will work but may show warnings.
141 lines
3.5 KiB
YAML
141 lines
3.5 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.24'
|
|
|
|
- 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: 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: go test -v -race -coverprofile=coverage.out -timeout=5m ./...
|
|
|
|
- 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: |
|
|
echo "No tests found. Verifying code compiles instead..."
|
|
go 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.24'
|
|
|
|
- name: Install golangci-lint
|
|
run: |
|
|
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.64.8
|
|
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
|
|
|
|
- name: Run golangci-lint
|
|
run: golangci-lint run --timeout=5m
|
|
|
|
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.24'
|
|
|
|
- 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: Build
|
|
run: go build -v -o bin/platform ./cmd/platform
|
|
|
|
- name: Upload build artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: platform-binary
|
|
path: bin/platform
|
|
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.24'
|
|
|
|
- name: Check formatting
|
|
run: |
|
|
if [ "$(gofmt -s -l . | wc -l)" -gt 0 ]; then
|
|
echo "The following files need formatting:"
|
|
gofmt -s -d .
|
|
exit 1
|
|
fi
|