diff --git a/.github/unit-test-coverage-helper/coverage.go b/.github/unit-test-coverage-helper/coverage.go new file mode 100644 index 000000000..f6043698d --- /dev/null +++ b/.github/unit-test-coverage-helper/coverage.go @@ -0,0 +1,56 @@ +package main + +import ( + "bufio" + "fmt" + "math" + "os" + "os/exec" + "strconv" + "strings" +) + +func main() { + const threshold = 45.0 // Set your desired threshold here + + // Execute the coverage command + cmd := exec.Command("go", "tool", "cover", "-func=coverage.out") + output, err := cmd.Output() + if err != nil { + fmt.Fprintln(os.Stderr, "Error executing coverage command:", err) + os.Exit(1) + } + + // Parse the output to find the total coverage percentage + var coverage float64 + scanner := bufio.NewScanner(strings.NewReader(string(output))) + for scanner.Scan() { + line := scanner.Text() + if strings.Contains(line, "total:") { + parts := strings.Fields(line) + if len(parts) > 2 { + coverageStr := strings.TrimSuffix(parts[2], "%") + coverage, err = strconv.ParseFloat(coverageStr, 64) + if err != nil { + fmt.Fprintln(os.Stderr, "Error parsing coverage:", err) + os.Exit(1) + } + coverage = math.Round(coverage) + fmt.Printf("Total Coverage: %.0f%%\n", coverage) + break + } + } + } + + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "Error reading coverage output:", err) + os.Exit(1) + } + + if coverage < threshold { + fmt.Fprintf(os.Stderr, "Coverage %.0f%% is below the %.0f%% threshold\n", coverage, threshold) + os.Exit(1) + } else { + fmt.Printf("Coverage %.0f%% meets the %.0f%% threshold\n", coverage, threshold) + } +} diff --git a/.github/workflows/ci-docs.yaml b/.github/workflows/ci-docs.yaml index f22da601b..bc31364e1 100644 --- a/.github/workflows/ci-docs.yaml +++ b/.github/workflows/ci-docs.yaml @@ -24,6 +24,7 @@ on: - '!.github/workflows/e2e-macos.yaml' - '!.github/workflows/e2e-windows.yaml' - '!.github/workflows/e2e-linux.yaml' + - '!.github/workflows/ci.yaml' pull_request: branches: - main @@ -39,6 +40,7 @@ on: - '!.github/workflows/e2e-macos.yaml' - '!.github/workflows/e2e-windows.yaml' - '!.github/workflows/e2e-linux.yaml' + - '!.github/workflows/ci.yaml' jobs: git-secrets: diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8a940f611..aebcd03ad 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -96,6 +96,11 @@ jobs: go-version-file: go.mod cache: false - run: make test-unit + + - run: | + go run .github/unit-test-coverage-helper/coverage.go + + # It's recommended to run golangci-lint in a job separate from other jobs (go test, etc) because different jobs run in parallel. go-linter: name: lint diff --git a/.github/workflows/e2e-linux.yaml b/.github/workflows/e2e-linux.yaml index ee3d3c1ff..a5a86cc8e 100644 --- a/.github/workflows/e2e-linux.yaml +++ b/.github/workflows/e2e-linux.yaml @@ -44,6 +44,7 @@ jobs: - name: Check repo out manually if: ${{ (startsWith(inputs.os, 'amazon') && inputs.version == '2' ) }} run: | + echo Hello git clone https://github.com/${GITHUB_REPOSITORY}.git . if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then git config --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"