name: CI on: push: branches: - main pull_request: branches: - main jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Go uses: actions/setup-go@v5 with: go-version: 1.26.x - name: golangci-lint uses: golangci/golangci-lint-action@v8 with: version: v2.11.1 - name: Build run: make test: runs-on: ubuntu-latest needs: lint strategy: matrix: module: [agent, cli, cmd, internal, pkg, manager] include: - module: manager sudo: true steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Go uses: actions/setup-go@v5 with: go-version: 1.26.x - name: Create coverage directory run: mkdir -p coverage - name: Run tests for ${{ matrix.module }} run: | if [[ "${{ matrix.module }}" == "manager" ]]; then sudo GOTOOLCHAIN=go1.26.0+auto go test -v --race -covermode=atomic -coverprofile coverage/${{ matrix.module }}.out ./${{ matrix.module }}/... else GOTOOLCHAIN=go1.26.0+auto go test -v --race -covermode=atomic -coverprofile coverage/${{ matrix.module }}.out ./${{ matrix.module }}/... fi - name: Upload coverage artifact uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.module }} path: coverage/${{ matrix.module }}.out retention-days: 1 upload-coverage: runs-on: ubuntu-latest needs: test steps: - name: Checkout code uses: actions/checkout@v4 - name: Download all coverage artifacts uses: actions/download-artifact@v4 with: pattern: coverage-* path: coverage/ merge-multiple: true - name: Upload results to Codecov uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage/*.out codecov_yml_path: codecov.yml verbose: true