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  }