name: CI on: push: branches: [main, master] pull_request: branches: [main, master] workflow_dispatch: env: GOLANGCI_LINT_VERSION: 'v1.64.4' jobs: validate: name: Validate Project runs-on: ubuntu-latest strategy: matrix: go-version: ['1.24.x', '1.25.x'] steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} cache: true - name: Validate go.mod run: | # Verify go.mod is valid go mod verify # Verify go.sum is up to date go mod tidy -v # Check if any changes were made if [ -n "$(git status --porcelain)" ]; then echo "go.mod or go.sum is not up to date. Run 'go mod tidy' locally." git diff exit 1 fi lint: name: Lint runs-on: ubuntu-latest needs: validate strategy: matrix: go-version: ['1.24.x', '1.25.x'] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} cache: true - name: Install golangci-lint run: | curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | \ sh -s -- -b $(go env GOPATH)/bin ${{ env.GOLANGCI_LINT_VERSION }} - name: Run golangci-lint run: make lint build: name: Build runs-on: ubuntu-latest needs: validate strategy: matrix: go-version: ['1.24.x', '1.25.x'] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} cache: true - name: Build run: make build unit-tests: name: Unit Tests runs-on: ubuntu-latest needs: [lint, build] strategy: matrix: go-version: ['1.24.x', '1.25.x'] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} cache: true - name: Run unit tests run: make test-unit