- Add version: 2 to .golangci.yml for local golangci-lint v2.1.6 compatibility - Pin CI to use golangci-lint v1.64.8 explicitly (should support v2 config) This ensures the config works both locally (v2.1.6) and in CI (v1.64.8). If v1.64.8 doesn't support v2 config, we may need to upgrade CI to v2.
139 lines
3.4 KiB
YAML
139 lines
3.4 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: Run golangci-lint
|
|
uses: golangci/golangci-lint-action@v3
|
|
with:
|
|
version: v1.64.8
|
|
args: --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
|