From 3f8167cef8d73c65491bc6ff52efc7c0d348c1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vlado=20Paji=C4=87?= Date: Sun, 17 Nov 2024 11:49:39 +0100 Subject: [PATCH 1/3] update --- .github/workflows/test.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e3e1a3bd..83ceac2d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,6 +50,7 @@ jobs: - name: check test coverage id: coverage uses: vladopajic/go-test-coverage@v2 + continue-on-error: true # Should fail after coverage comment is posted with: config: ./.github/.testcoverage.yml profile: cover.ubuntu-latest.profile,cover.macos-latest.profile @@ -88,4 +89,9 @@ jobs: ``` ${{ fromJSON(steps.coverage.outputs.report) }} ``` - edit-mode: replace \ No newline at end of file + edit-mode: replace + + - name: "finally check coverage" + if: steps.coverage.outcome == 'failure' + shell: bash + run: echo "coverage check failed" && exit 1 \ No newline at end of file From a0c92da0436d406c8bf803a1e47bbdb475297df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vlado=20Paji=C4=87?= Date: Sun, 17 Nov 2024 11:50:45 +0100 Subject: [PATCH 2/3] test fail ci --- pkg/testcoverage/badgestorer/github_test.go | 112 -------------------- 1 file changed, 112 deletions(-) delete mode 100644 pkg/testcoverage/badgestorer/github_test.go diff --git a/pkg/testcoverage/badgestorer/github_test.go b/pkg/testcoverage/badgestorer/github_test.go deleted file mode 100644 index f85de448..00000000 --- a/pkg/testcoverage/badgestorer/github_test.go +++ /dev/null @@ -1,112 +0,0 @@ -package badgestorer_test - -import ( - "context" - "fmt" - "os" - "runtime" - "testing" - "time" - - "github.com/google/go-github/v56/github" - "github.com/stretchr/testify/assert" - - . "github.com/vladopajic/go-test-coverage/v2/pkg/testcoverage/badgestorer" -) - -const envGitToken = "GITHUB_TOKEN" //nolint:gosec // false-positive - -func Test_Github_Error(t *testing.T) { - t.Parallel() - - if testing.Short() { - return - } - - data := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} - cfg := Git{ - Token: `🔑`, - Owner: "owner", - Repository: "repo", - } - s := NewGithub(cfg) - - updated, err := s.Store(data) - assert.Error(t, err) - assert.False(t, updated) -} - -func Test_Github(t *testing.T) { - t.Parallel() - - if testing.Short() { - return - } - - if getEnv(envGitToken) == "" { - t.Skipf("%v env variable not set", envGitToken) - return - } - - data := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} - cfg := Git{ - Token: getEnv(envGitToken), - Owner: "vladopajic", - Repository: "go-test-coverage", - Branch: "badges-integration-test", - // badge name must be unique because two tests running from different platforms - // in CI can cause race condition if badge has the same name - FileName: fmt.Sprintf("badge_%s_%d.svg", runtime.GOOS, time.Now().UnixNano()), - } - s := NewGithub(cfg) - - // put badge - updated, err := s.Store(data) - assert.NoError(t, err) - assert.True(t, updated) - - // put badge again - no change - updated, err = s.Store(data) - assert.NoError(t, err) - assert.False(t, updated) - - // put badge again - expect change - updated, err = s.Store(append(data, byte(1))) - assert.NoError(t, err) - assert.True(t, updated) - - deleteFile(t, cfg) -} - -func getEnv(key string) string { - value, _ := os.LookupEnv(key) - return value -} - -func deleteFile(t *testing.T, cfg Git) { - t.Helper() - - client := github.NewClient(nil).WithAuthToken(cfg.Token) - - fc, _, _, err := client.Repositories.GetContents( - context.Background(), - cfg.Owner, - cfg.Repository, - cfg.FileName, - &github.RepositoryContentGetOptions{Ref: cfg.Branch}, - ) - assert.NoError(t, err) - - _, _, err = client.Repositories.DeleteFile( - context.Background(), - cfg.Owner, - cfg.Repository, - cfg.FileName, - &github.RepositoryContentFileOptions{ - Message: github.String("delete testing badge " + cfg.FileName), - Branch: &cfg.Branch, - SHA: fc.SHA, - }, - ) - assert.NoError(t, err) -} From cfbcf22fbaf4f9e2c6e89ab57a27a49646fc4c22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vlado=20Paji=C4=87?= Date: Sun, 17 Nov 2024 11:55:48 +0100 Subject: [PATCH 3/3] revert test change + docs --- docs/github_action.md | 6 ++ pkg/testcoverage/badgestorer/github_test.go | 112 ++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 pkg/testcoverage/badgestorer/github_test.go diff --git a/docs/github_action.md b/docs/github_action.md index 3a053384..6b9b7663 100644 --- a/docs/github_action.md +++ b/docs/github_action.md @@ -48,6 +48,7 @@ Here is an example of how to post comments with the coverage report to your pull - name: check test coverage id: coverage uses: vladopajic/go-test-coverage@v2 + continue-on-error: true # Should fail after coverage comment is posted with: config: ./.github/.testcoverage.yml @@ -84,4 +85,9 @@ Here is an example of how to post comments with the coverage report to your pull ${{ fromJSON(steps.coverage.outputs.report) }} ``` edit-mode: replace + + - name: "finally check coverage" + if: steps.coverage.outcome == 'failure' + shell: bash + run: echo "coverage check failed" && exit 1 ``` \ No newline at end of file diff --git a/pkg/testcoverage/badgestorer/github_test.go b/pkg/testcoverage/badgestorer/github_test.go new file mode 100644 index 00000000..f85de448 --- /dev/null +++ b/pkg/testcoverage/badgestorer/github_test.go @@ -0,0 +1,112 @@ +package badgestorer_test + +import ( + "context" + "fmt" + "os" + "runtime" + "testing" + "time" + + "github.com/google/go-github/v56/github" + "github.com/stretchr/testify/assert" + + . "github.com/vladopajic/go-test-coverage/v2/pkg/testcoverage/badgestorer" +) + +const envGitToken = "GITHUB_TOKEN" //nolint:gosec // false-positive + +func Test_Github_Error(t *testing.T) { + t.Parallel() + + if testing.Short() { + return + } + + data := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} + cfg := Git{ + Token: `🔑`, + Owner: "owner", + Repository: "repo", + } + s := NewGithub(cfg) + + updated, err := s.Store(data) + assert.Error(t, err) + assert.False(t, updated) +} + +func Test_Github(t *testing.T) { + t.Parallel() + + if testing.Short() { + return + } + + if getEnv(envGitToken) == "" { + t.Skipf("%v env variable not set", envGitToken) + return + } + + data := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} + cfg := Git{ + Token: getEnv(envGitToken), + Owner: "vladopajic", + Repository: "go-test-coverage", + Branch: "badges-integration-test", + // badge name must be unique because two tests running from different platforms + // in CI can cause race condition if badge has the same name + FileName: fmt.Sprintf("badge_%s_%d.svg", runtime.GOOS, time.Now().UnixNano()), + } + s := NewGithub(cfg) + + // put badge + updated, err := s.Store(data) + assert.NoError(t, err) + assert.True(t, updated) + + // put badge again - no change + updated, err = s.Store(data) + assert.NoError(t, err) + assert.False(t, updated) + + // put badge again - expect change + updated, err = s.Store(append(data, byte(1))) + assert.NoError(t, err) + assert.True(t, updated) + + deleteFile(t, cfg) +} + +func getEnv(key string) string { + value, _ := os.LookupEnv(key) + return value +} + +func deleteFile(t *testing.T, cfg Git) { + t.Helper() + + client := github.NewClient(nil).WithAuthToken(cfg.Token) + + fc, _, _, err := client.Repositories.GetContents( + context.Background(), + cfg.Owner, + cfg.Repository, + cfg.FileName, + &github.RepositoryContentGetOptions{Ref: cfg.Branch}, + ) + assert.NoError(t, err) + + _, _, err = client.Repositories.DeleteFile( + context.Background(), + cfg.Owner, + cfg.Repository, + cfg.FileName, + &github.RepositoryContentFileOptions{ + Message: github.String("delete testing badge " + cfg.FileName), + Branch: &cfg.Branch, + SHA: fc.SHA, + }, + ) + assert.NoError(t, err) +}