github.com/goreleaser/goreleaser@v1.25.1/internal/git/config_test.go (about) 1 package git_test 2 3 import ( 4 "context" 5 "strings" 6 "testing" 7 8 "github.com/goreleaser/goreleaser/internal/git" 9 "github.com/goreleaser/goreleaser/internal/testlib" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestNotARepo(t *testing.T) { 14 testlib.Mktmp(t) 15 _, err := git.ExtractRepoFromConfig(context.Background()) 16 require.EqualError(t, err, `current folder is not a git repository`) 17 } 18 19 func TestNoRemote(t *testing.T) { 20 testlib.Mktmp(t) 21 testlib.GitInit(t) 22 _, err := git.ExtractRepoFromConfig(context.Background()) 23 require.EqualError(t, err, `no remote configured to list refs from`) 24 } 25 26 func TestRelativeRemote(t *testing.T) { 27 ctx := context.Background() 28 testlib.Mktmp(t) 29 testlib.GitInit(t) 30 testlib.GitRemoteAddWithName(t, "upstream", "https://github.com/goreleaser/goreleaser.git") 31 _, err := git.Run(ctx, "pull", "upstream", "main") 32 require.NoError(t, err) 33 _, err = git.Run(ctx, "branch", "--set-upstream-to", "upstream/main") 34 require.NoError(t, err) 35 _, err = git.Run(ctx, "checkout", "--track", "-b", "relative_branch") 36 require.NoError(t, err) 37 gitCfg, err := git.Run(ctx, "config", "--local", "--list") 38 require.NoError(t, err) 39 require.True(t, strings.Contains(gitCfg, "branch.relative_branch.remote=.")) 40 repo, err := git.ExtractRepoFromConfig(ctx) 41 require.NoError(t, err) 42 require.Equal(t, "goreleaser/goreleaser", repo.String()) 43 } 44 45 func TestRepoName(t *testing.T) { 46 testlib.Mktmp(t) 47 testlib.GitInit(t) 48 testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git") 49 repo, err := git.ExtractRepoFromConfig(context.Background()) 50 require.NoError(t, err) 51 require.Equal(t, "goreleaser/goreleaser", repo.String()) 52 } 53 54 func TestRepoNameWithDifferentRemote(t *testing.T) { 55 ctx := context.Background() 56 testlib.Mktmp(t) 57 testlib.GitInit(t) 58 testlib.GitRemoteAddWithName(t, "upstream", "https://github.com/goreleaser/goreleaser.git") 59 _, err := git.Run(ctx, "pull", "upstream", "main") 60 require.NoError(t, err) 61 _, err = git.Run(ctx, "branch", "--set-upstream-to", "upstream/main") 62 require.NoError(t, err) 63 repo, err := git.ExtractRepoFromConfig(ctx) 64 require.NoError(t, err) 65 require.Equal(t, "goreleaser/goreleaser", repo.String()) 66 } 67 68 func TestExtractRepoFromURL(t *testing.T) { 69 // valid urls 70 for _, url := range []string{ 71 "git@github.com:goreleaser/goreleaser.git", 72 "git@custom:goreleaser/goreleaser.git", 73 "https://foo@github.com/goreleaser/goreleaser", 74 "https://github.com/goreleaser/goreleaser.git", 75 "https://something.with.port:8080/goreleaser/goreleaser.git", 76 "https://github.enterprise.com/goreleaser/goreleaser.git", 77 "https://gitlab-ci-token:SOME_TOKEN@gitlab.yourcompany.com/goreleaser/goreleaser.git", 78 } { 79 t.Run(url, func(t *testing.T) { 80 repo, err := git.ExtractRepoFromURL(url) 81 require.NoError(t, err) 82 require.Equal(t, "goreleaser/goreleaser", repo.String()) 83 require.NoError(t, repo.CheckSCM()) 84 require.Equal(t, url, repo.RawURL) 85 }) 86 } 87 88 // nested urls 89 for _, url := range []string{ 90 "git@custom:group/nested/goreleaser/goreleaser.git", 91 "https://gitlab.mycompany.com/group/nested/goreleaser/goreleaser.git", 92 "https://gitlab-ci-token:SOME_TOKEN@gitlab.yourcompany.com/group/nested/goreleaser/goreleaser.git", 93 } { 94 t.Run(url, func(t *testing.T) { 95 repo, err := git.ExtractRepoFromURL(url) 96 require.NoError(t, err) 97 require.Equal(t, "group/nested/goreleaser/goreleaser", repo.String()) 98 require.NoError(t, repo.CheckSCM()) 99 require.Equal(t, url, repo.RawURL) 100 }) 101 } 102 103 for _, url := range []string{ 104 "git@gist.github.com:someid.git", 105 "https://gist.github.com/someid.git", 106 } { 107 t.Run(url, func(t *testing.T) { 108 repo, err := git.ExtractRepoFromURL(url) 109 require.NoError(t, err) 110 require.Equal(t, "someid", repo.String()) 111 require.Error(t, repo.CheckSCM()) 112 require.Equal(t, url, repo.RawURL) 113 }) 114 } 115 116 // invalid urls 117 for _, url := range []string{ 118 "git@gist.github.com:", 119 "https://gist.github.com/", 120 } { 121 t.Run(url, func(t *testing.T) { 122 repo, err := git.ExtractRepoFromURL(url) 123 require.EqualError(t, err, "unsupported repository URL: "+url) 124 require.Equal(t, "", repo.String()) 125 require.Error(t, repo.CheckSCM()) 126 require.Equal(t, url, repo.RawURL) 127 }) 128 } 129 }