github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/release/scm_test.go (about)

     1  package release
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/goreleaser/goreleaser/internal/git"
     7  	"github.com/goreleaser/goreleaser/internal/testctx"
     8  	"github.com/goreleaser/goreleaser/pkg/config"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestSetupGitLab(t *testing.T) {
    13  	t.Run("no repo", func(t *testing.T) {
    14  		ctx := testctx.New()
    15  		require.NoError(t, setupGitLab(ctx))
    16  		repo, err := git.ExtractRepoFromConfig(ctx)
    17  		require.NoError(t, err)
    18  		require.Equal(t, repo.Owner, ctx.Config.Release.GitLab.Owner)
    19  		require.Equal(t, repo.Name, ctx.Config.Release.GitLab.Name)
    20  	})
    21  
    22  	t.Run("with templates", func(t *testing.T) {
    23  		ctx := testctx.NewWithCfg(config.Project{
    24  			Env: []string{"NAME=foo", "OWNER=bar"},
    25  			GitLabURLs: config.GitLabURLs{
    26  				Download: "https://{{ .Env.OWNER }}/download",
    27  			},
    28  			Release: config.Release{
    29  				GitLab: config.Repo{
    30  					Owner: "{{.Env.OWNER}}",
    31  					Name:  "{{.Env.NAME}}",
    32  				},
    33  			},
    34  		})
    35  
    36  		require.NoError(t, setupGitLab(ctx))
    37  		require.Equal(t, "bar", ctx.Config.Release.GitLab.Owner)
    38  		require.Equal(t, "foo", ctx.Config.Release.GitLab.Name)
    39  		require.Equal(t, "https://bar/download/bar/foo/-/releases/", ctx.ReleaseURL)
    40  	})
    41  
    42  	t.Run("with invalid templates", func(t *testing.T) {
    43  		t.Run("owner", func(t *testing.T) {
    44  			ctx := testctx.NewWithCfg(config.Project{
    45  				Release: config.Release{
    46  					GitLab: config.Repo{
    47  						Name:  "foo",
    48  						Owner: "{{.Env.NOPE}}",
    49  					},
    50  				},
    51  			})
    52  
    53  			require.Error(t, setupGitLab(ctx))
    54  		})
    55  
    56  		t.Run("name", func(t *testing.T) {
    57  			ctx := testctx.NewWithCfg(config.Project{
    58  				Release: config.Release{
    59  					GitLab: config.Repo{
    60  						Name: "{{.Env.NOPE}}",
    61  					},
    62  				},
    63  			})
    64  
    65  			require.Error(t, setupGitLab(ctx))
    66  		})
    67  	})
    68  }
    69  
    70  func TestSetupGitea(t *testing.T) {
    71  	t.Run("no repo", func(t *testing.T) {
    72  		ctx := testctx.New()
    73  		require.NoError(t, setupGitea(ctx))
    74  		require.Equal(t, "goreleaser", ctx.Config.Release.Gitea.Owner)
    75  		require.Equal(t, "goreleaser", ctx.Config.Release.Gitea.Name)
    76  	})
    77  
    78  	t.Run("with templates", func(t *testing.T) {
    79  		ctx := testctx.NewWithCfg(config.Project{
    80  			Env: []string{"NAME=foo", "OWNER=bar"},
    81  			GiteaURLs: config.GiteaURLs{
    82  				Download: "https://{{ .Env.OWNER }}/download",
    83  			},
    84  			Release: config.Release{
    85  				Gitea: config.Repo{
    86  					Owner: "{{.Env.OWNER}}",
    87  					Name:  "{{.Env.NAME}}",
    88  				},
    89  			},
    90  		})
    91  
    92  		require.NoError(t, setupGitea(ctx))
    93  		require.Equal(t, "bar", ctx.Config.Release.Gitea.Owner)
    94  		require.Equal(t, "foo", ctx.Config.Release.Gitea.Name)
    95  		require.Equal(t, "https://bar/download/bar/foo/releases/tag/", ctx.ReleaseURL)
    96  	})
    97  
    98  	t.Run("with invalid templates", func(t *testing.T) {
    99  		t.Run("owner", func(t *testing.T) {
   100  			ctx := testctx.NewWithCfg(config.Project{
   101  				Release: config.Release{
   102  					Gitea: config.Repo{
   103  						Name:  "foo",
   104  						Owner: "{{.Env.NOPE}}",
   105  					},
   106  				},
   107  			})
   108  
   109  			require.Error(t, setupGitea(ctx))
   110  		})
   111  
   112  		t.Run("name", func(t *testing.T) {
   113  			ctx := testctx.NewWithCfg(config.Project{
   114  				Release: config.Release{
   115  					Gitea: config.Repo{
   116  						Name: "{{.Env.NOPE}}",
   117  					},
   118  				},
   119  			})
   120  
   121  			require.Error(t, setupGitea(ctx))
   122  		})
   123  	})
   124  }
   125  
   126  func TestSetupGitHub(t *testing.T) {
   127  	t.Run("no repo", func(t *testing.T) {
   128  		ctx := testctx.New()
   129  		require.NoError(t, setupGitHub(ctx))
   130  		require.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Owner)
   131  		require.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Name)
   132  	})
   133  
   134  	t.Run("with templates", func(t *testing.T) {
   135  		ctx := testctx.NewWithCfg(config.Project{
   136  			Env: []string{"NAME=foo", "OWNER=bar"},
   137  			GitHubURLs: config.GitHubURLs{
   138  				Download: "https://{{ .Env.OWNER }}/download",
   139  			},
   140  			Release: config.Release{
   141  				GitHub: config.Repo{
   142  					Owner: "{{.Env.OWNER}}",
   143  					Name:  "{{.Env.NAME}}",
   144  				},
   145  			},
   146  		})
   147  
   148  		require.NoError(t, setupGitHub(ctx))
   149  		require.Equal(t, "bar", ctx.Config.Release.GitHub.Owner)
   150  		require.Equal(t, "foo", ctx.Config.Release.GitHub.Name)
   151  		require.Equal(t, "https://bar/download/bar/foo/releases/tag/", ctx.ReleaseURL)
   152  	})
   153  
   154  	t.Run("with invalid templates", func(t *testing.T) {
   155  		t.Run("owner", func(t *testing.T) {
   156  			ctx := testctx.NewWithCfg(config.Project{
   157  				Release: config.Release{
   158  					GitHub: config.Repo{
   159  						Name:  "foo",
   160  						Owner: "{{.Env.NOPE}}",
   161  					},
   162  				},
   163  			})
   164  
   165  			require.Error(t, setupGitHub(ctx))
   166  		})
   167  
   168  		t.Run("name", func(t *testing.T) {
   169  			ctx := testctx.NewWithCfg(config.Project{
   170  				Release: config.Release{
   171  					GitHub: config.Repo{
   172  						Name: "{{.Env.NOPE}}",
   173  					},
   174  				},
   175  			})
   176  
   177  			require.Error(t, setupGitHub(ctx))
   178  		})
   179  	})
   180  }