name: Test on: push: branches: - main - master - develop - 'feature/**' pull_request: branches: - main - master - develop jobs: 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.23' cache-dependency-path: go.sum - name: Download dependencies run: go mod download - name: Run tests run: go test -v -race -coverprofile=coverage.out -covermode=atomic ./... - name: Generate coverage report run: | go tool cover -html=coverage.out -o coverage.html go tool cover -func=coverage.out -o coverage.txt - name: Upload coverage reports uses: actions/upload-artifact@v3 with: name: coverage-reports path: | coverage.out coverage.html coverage.txt - name: Display coverage summary run: | echo "## Test Coverage Summary" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY cat coverage.txt >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY 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.23' cache-dependency-path: go.sum - name: Download dependencies run: go mod download - name: Run golangci-lint uses: golangci/golangci-lint-action@v3 with: version: latest args: --timeout=5m build: runs-on: ubuntu-latest needs: [test, lint] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.23' cache-dependency-path: go.sum - name: Download dependencies run: go mod download - name: Build run: go build -v -o server ./cmd/server - name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: build-artifacts path: server