github.com/triarius/goreleaser@v1.12.5/internal/pipe/release/release_test.go (about)

     1  package release
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/triarius/goreleaser/internal/artifact"
    10  	"github.com/triarius/goreleaser/internal/client"
    11  	"github.com/triarius/goreleaser/internal/testlib"
    12  	"github.com/triarius/goreleaser/pkg/config"
    13  	"github.com/triarius/goreleaser/pkg/context"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func TestPipeDescription(t *testing.T) {
    18  	require.NotEmpty(t, Pipe{}.String())
    19  }
    20  
    21  func createTmpFile(tb testing.TB, folder, path string) string {
    22  	tb.Helper()
    23  	f, err := os.Create(filepath.Join(folder, path))
    24  	require.NoError(tb, err)
    25  	require.NoError(tb, f.Close())
    26  	return f.Name()
    27  }
    28  
    29  func TestRunPipeWithoutIDsThenDoesNotFilter(t *testing.T) {
    30  	folder := t.TempDir()
    31  	tarfile := createTmpFile(t, folder, "bin.tar.gz")
    32  	srcfile := createTmpFile(t, folder, "source.tar.gz")
    33  	debfile := createTmpFile(t, folder, "bin.deb")
    34  	checksumfile := createTmpFile(t, folder, "checksum")
    35  	checksumsigfile := createTmpFile(t, folder, "checksum.sig")
    36  	checksumpemfile := createTmpFile(t, folder, "checksum.pem")
    37  	filteredtarfile := createTmpFile(t, folder, "filtered.tar.gz")
    38  	filtereddebfile := createTmpFile(t, folder, "filtered.deb")
    39  
    40  	config := config.Project{
    41  		Dist: folder,
    42  		Release: config.Release{
    43  			GitHub: config.Repo{
    44  				Owner: "test",
    45  				Name:  "test",
    46  			},
    47  		},
    48  	}
    49  	ctx := context.New(config)
    50  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
    51  	ctx.Artifacts.Add(&artifact.Artifact{
    52  		Type: artifact.UploadableArchive,
    53  		Name: "bin.tar.gz",
    54  		Path: tarfile,
    55  		Extra: map[string]interface{}{
    56  			artifact.ExtraID: "foo",
    57  		},
    58  	})
    59  	ctx.Artifacts.Add(&artifact.Artifact{
    60  		Type: artifact.LinuxPackage,
    61  		Name: "bin.deb",
    62  		Path: debfile,
    63  		Extra: map[string]interface{}{
    64  			artifact.ExtraID: "foo",
    65  		},
    66  	})
    67  	ctx.Artifacts.Add(&artifact.Artifact{
    68  		Type: artifact.UploadableArchive,
    69  		Name: "filtered.tar.gz",
    70  		Path: filteredtarfile,
    71  		Extra: map[string]interface{}{
    72  			artifact.ExtraID: "bar",
    73  		},
    74  	})
    75  	ctx.Artifacts.Add(&artifact.Artifact{
    76  		Type: artifact.LinuxPackage,
    77  		Name: "filtered.deb",
    78  		Path: filtereddebfile,
    79  		Extra: map[string]interface{}{
    80  			artifact.ExtraID: "bar",
    81  		},
    82  	})
    83  	ctx.Artifacts.Add(&artifact.Artifact{
    84  		Type: artifact.UploadableSourceArchive,
    85  		Name: "source.tar.gz",
    86  		Path: srcfile,
    87  		Extra: map[string]interface{}{
    88  			artifact.ExtraFormat: "tar.gz",
    89  		},
    90  	})
    91  
    92  	ctx.Artifacts.Add(&artifact.Artifact{
    93  		Type: artifact.Checksum,
    94  		Name: "checksum",
    95  		Path: checksumfile,
    96  		Extra: map[string]interface{}{
    97  			artifact.ExtraID: "bar",
    98  		},
    99  	})
   100  	ctx.Artifacts.Add(&artifact.Artifact{
   101  		Type: artifact.Signature,
   102  		Name: "checksum.sig",
   103  		Path: checksumsigfile,
   104  		Extra: map[string]interface{}{
   105  			artifact.ExtraID: "bar",
   106  		},
   107  	})
   108  	ctx.Artifacts.Add(&artifact.Artifact{
   109  		Type: artifact.Certificate,
   110  		Name: "checksum.pem",
   111  		Path: checksumpemfile,
   112  		Extra: map[string]interface{}{
   113  			artifact.ExtraID: "bar",
   114  		},
   115  	})
   116  	client := &client.Mock{}
   117  	require.NoError(t, doPublish(ctx, client))
   118  	require.True(t, client.CreatedRelease)
   119  	require.True(t, client.UploadedFile)
   120  	require.Contains(t, client.UploadedFileNames, "source.tar.gz")
   121  	require.Contains(t, client.UploadedFileNames, "bin.deb")
   122  	require.Contains(t, client.UploadedFileNames, "bin.tar.gz")
   123  	require.Contains(t, client.UploadedFileNames, "filtered.deb")
   124  	require.Contains(t, client.UploadedFileNames, "filtered.tar.gz")
   125  	require.Contains(t, client.UploadedFileNames, "checksum")
   126  	require.Contains(t, client.UploadedFileNames, "checksum.pem")
   127  	require.Contains(t, client.UploadedFileNames, "checksum.sig")
   128  }
   129  
   130  func TestRunPipeWithIDsThenFilters(t *testing.T) {
   131  	folder := t.TempDir()
   132  	tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz"))
   133  	require.NoError(t, err)
   134  	require.NoError(t, tarfile.Close())
   135  	debfile, err := os.Create(filepath.Join(folder, "bin.deb"))
   136  	require.NoError(t, err)
   137  	require.NoError(t, debfile.Close())
   138  	filteredtarfile, err := os.Create(filepath.Join(folder, "filtered.tar.gz"))
   139  	require.NoError(t, err)
   140  	require.NoError(t, filteredtarfile.Close())
   141  	filtereddebfile, err := os.Create(filepath.Join(folder, "filtered.deb"))
   142  	require.NoError(t, err)
   143  	require.NoError(t, filtereddebfile.Close())
   144  
   145  	config := config.Project{
   146  		Dist: folder,
   147  		Release: config.Release{
   148  			GitHub: config.Repo{
   149  				Owner: "test",
   150  				Name:  "test",
   151  			},
   152  			IDs: []string{"foo"},
   153  			ExtraFiles: []config.ExtraFile{
   154  				{Glob: "./testdata/**/*"},
   155  			},
   156  		},
   157  	}
   158  	ctx := context.New(config)
   159  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   160  	ctx.Artifacts.Add(&artifact.Artifact{
   161  		Type: artifact.UploadableArchive,
   162  		Name: "bin.tar.gz",
   163  		Path: tarfile.Name(),
   164  		Extra: map[string]interface{}{
   165  			artifact.ExtraID: "foo",
   166  		},
   167  	})
   168  	ctx.Artifacts.Add(&artifact.Artifact{
   169  		Type: artifact.LinuxPackage,
   170  		Name: "bin.deb",
   171  		Path: debfile.Name(),
   172  		Extra: map[string]interface{}{
   173  			artifact.ExtraID: "foo",
   174  		},
   175  	})
   176  	ctx.Artifacts.Add(&artifact.Artifact{
   177  		Type: artifact.UploadableArchive,
   178  		Name: "filtered.tar.gz",
   179  		Path: filteredtarfile.Name(),
   180  		Extra: map[string]interface{}{
   181  			artifact.ExtraID: "bar",
   182  		},
   183  	})
   184  	ctx.Artifacts.Add(&artifact.Artifact{
   185  		Type: artifact.LinuxPackage,
   186  		Name: "filtered.deb",
   187  		Path: filtereddebfile.Name(),
   188  		Extra: map[string]interface{}{
   189  			artifact.ExtraID: "bar",
   190  		},
   191  	})
   192  	client := &client.Mock{}
   193  	require.NoError(t, doPublish(ctx, client))
   194  	require.True(t, client.CreatedRelease)
   195  	require.True(t, client.UploadedFile)
   196  	require.Contains(t, client.UploadedFileNames, "bin.deb")
   197  	require.Contains(t, client.UploadedFileNames, "bin.tar.gz")
   198  	require.Contains(t, client.UploadedFileNames, "f1")
   199  	require.NotContains(t, client.UploadedFileNames, "filtered.deb")
   200  	require.NotContains(t, client.UploadedFileNames, "filtered.tar.gz")
   201  }
   202  
   203  func TestRunPipeReleaseCreationFailed(t *testing.T) {
   204  	config := config.Project{
   205  		Release: config.Release{
   206  			GitHub: config.Repo{
   207  				Owner: "test",
   208  				Name:  "test",
   209  			},
   210  		},
   211  	}
   212  	ctx := context.New(config)
   213  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   214  	client := &client.Mock{
   215  		FailToCreateRelease: true,
   216  	}
   217  	require.Error(t, doPublish(ctx, client))
   218  	require.False(t, client.CreatedRelease)
   219  	require.False(t, client.UploadedFile)
   220  }
   221  
   222  func TestRunPipeWithFileThatDontExist(t *testing.T) {
   223  	config := config.Project{
   224  		Release: config.Release{
   225  			GitHub: config.Repo{
   226  				Owner: "test",
   227  				Name:  "test",
   228  			},
   229  		},
   230  	}
   231  	ctx := context.New(config)
   232  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   233  	ctx.Artifacts.Add(&artifact.Artifact{
   234  		Type: artifact.UploadableArchive,
   235  		Name: "bin.tar.gz",
   236  		Path: "/nope/nope/nope",
   237  	})
   238  	client := &client.Mock{}
   239  	require.Error(t, doPublish(ctx, client))
   240  	require.True(t, client.CreatedRelease)
   241  	require.False(t, client.UploadedFile)
   242  }
   243  
   244  func TestRunPipeUploadFailure(t *testing.T) {
   245  	folder := t.TempDir()
   246  	tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz"))
   247  	require.NoError(t, err)
   248  	config := config.Project{
   249  		Release: config.Release{
   250  			GitHub: config.Repo{
   251  				Owner: "test",
   252  				Name:  "test",
   253  			},
   254  		},
   255  	}
   256  	ctx := context.New(config)
   257  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   258  	ctx.Artifacts.Add(&artifact.Artifact{
   259  		Type: artifact.UploadableArchive,
   260  		Name: "bin.tar.gz",
   261  		Path: tarfile.Name(),
   262  	})
   263  	client := &client.Mock{
   264  		FailToUpload: true,
   265  	}
   266  	require.EqualError(t, doPublish(ctx, client), "failed to upload bin.tar.gz after 1 tries: upload failed")
   267  	require.True(t, client.CreatedRelease)
   268  	require.False(t, client.UploadedFile)
   269  }
   270  
   271  func TestRunPipeExtraFileNotFound(t *testing.T) {
   272  	config := config.Project{
   273  		Release: config.Release{
   274  			GitHub: config.Repo{
   275  				Owner: "test",
   276  				Name:  "test",
   277  			},
   278  			ExtraFiles: []config.ExtraFile{
   279  				{Glob: "./testdata/f1.txt"},
   280  				{Glob: "./nope"},
   281  			},
   282  		},
   283  	}
   284  	ctx := context.New(config)
   285  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   286  	client := &client.Mock{}
   287  	require.EqualError(t, doPublish(ctx, client), "globbing failed for pattern ./nope: matching \"./nope\": file does not exist")
   288  	require.True(t, client.CreatedRelease)
   289  	require.False(t, client.UploadedFile)
   290  }
   291  
   292  func TestRunPipeExtraOverride(t *testing.T) {
   293  	config := config.Project{
   294  		Release: config.Release{
   295  			GitHub: config.Repo{
   296  				Owner: "test",
   297  				Name:  "test",
   298  			},
   299  			ExtraFiles: []config.ExtraFile{
   300  				{Glob: "./testdata/**/*"},
   301  				{Glob: "./testdata/upload_same_name/f1"},
   302  			},
   303  		},
   304  	}
   305  	ctx := context.New(config)
   306  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   307  	client := &client.Mock{}
   308  	require.NoError(t, doPublish(ctx, client))
   309  	require.True(t, client.CreatedRelease)
   310  	require.True(t, client.UploadedFile)
   311  	require.Contains(t, client.UploadedFileNames, "f1")
   312  	require.True(t, strings.HasSuffix(client.UploadedFilePaths["f1"], "testdata/upload_same_name/f1"))
   313  }
   314  
   315  func TestRunPipeUploadRetry(t *testing.T) {
   316  	folder := t.TempDir()
   317  	tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz"))
   318  	require.NoError(t, err)
   319  	config := config.Project{
   320  		Release: config.Release{
   321  			GitHub: config.Repo{
   322  				Owner: "test",
   323  				Name:  "test",
   324  			},
   325  		},
   326  	}
   327  	ctx := context.New(config)
   328  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   329  	ctx.Artifacts.Add(&artifact.Artifact{
   330  		Type: artifact.UploadableArchive,
   331  		Name: "bin.tar.gz",
   332  		Path: tarfile.Name(),
   333  	})
   334  	client := &client.Mock{
   335  		FailFirstUpload: true,
   336  	}
   337  	require.NoError(t, doPublish(ctx, client))
   338  	require.True(t, client.CreatedRelease)
   339  	require.True(t, client.UploadedFile)
   340  }
   341  
   342  func TestDefault(t *testing.T) {
   343  	testlib.Mktmp(t)
   344  	testlib.GitInit(t)
   345  	testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git")
   346  
   347  	ctx := context.New(config.Project{})
   348  	ctx.TokenType = context.TokenTypeGitHub
   349  	ctx.Config.GitHubURLs.Download = "https://github.com"
   350  	ctx.Git.CurrentTag = "v1.0.0"
   351  	require.NoError(t, Pipe{}.Default(ctx))
   352  	require.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Name)
   353  	require.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Owner)
   354  	require.Equal(t, "https://github.com/triarius/goreleaser/releases/tag/v1.0.0", ctx.ReleaseURL)
   355  }
   356  
   357  func TestDefaultInvalidURL(t *testing.T) {
   358  	testlib.Mktmp(t)
   359  	testlib.GitInit(t)
   360  	testlib.GitRemoteAdd(t, "git@github.com:goreleaser.git")
   361  
   362  	ctx := context.New(config.Project{})
   363  	ctx.TokenType = context.TokenTypeGitHub
   364  	ctx.Config.GitHubURLs.Download = "https://github.com"
   365  	ctx.Git.CurrentTag = "v1.0.0"
   366  	require.Error(t, Pipe{}.Default(ctx))
   367  }
   368  
   369  func TestDefaultWithGitlab(t *testing.T) {
   370  	testlib.Mktmp(t)
   371  	testlib.GitInit(t)
   372  	testlib.GitRemoteAdd(t, "git@gitlab.com:gitlabowner/gitlabrepo.git")
   373  
   374  	ctx := context.New(config.Project{})
   375  	ctx.TokenType = context.TokenTypeGitLab
   376  	ctx.Config.GitLabURLs.Download = "https://gitlab.com"
   377  	ctx.Git.CurrentTag = "v1.0.0"
   378  	require.NoError(t, Pipe{}.Default(ctx))
   379  	require.Equal(t, "gitlabrepo", ctx.Config.Release.GitLab.Name)
   380  	require.Equal(t, "gitlabowner", ctx.Config.Release.GitLab.Owner)
   381  	require.Equal(t, "https://gitlab.com/gitlabowner/gitlabrepo/-/releases/v1.0.0", ctx.ReleaseURL)
   382  }
   383  
   384  func TestDefaultWithGitlabInvalidURL(t *testing.T) {
   385  	testlib.Mktmp(t)
   386  	testlib.GitInit(t)
   387  	testlib.GitRemoteAdd(t, "git@gitlab.com:gitlabrepo.git")
   388  
   389  	ctx := context.New(config.Project{})
   390  	ctx.TokenType = context.TokenTypeGitLab
   391  	ctx.Config.GitLabURLs.Download = "https://gitlab.com"
   392  	ctx.Git.CurrentTag = "v1.0.0"
   393  	require.Error(t, Pipe{}.Default(ctx))
   394  }
   395  
   396  func TestDefaultWithGitea(t *testing.T) {
   397  	testlib.Mktmp(t)
   398  	testlib.GitInit(t)
   399  	testlib.GitRemoteAdd(t, "git@gitea.example.com:giteaowner/gitearepo.git")
   400  
   401  	ctx := context.New(config.Project{})
   402  	ctx.TokenType = context.TokenTypeGitea
   403  	ctx.Config.GiteaURLs.Download = "https://git.honk.com"
   404  	ctx.Git.CurrentTag = "v1.0.0"
   405  	require.NoError(t, Pipe{}.Default(ctx))
   406  	require.Equal(t, "gitearepo", ctx.Config.Release.Gitea.Name)
   407  	require.Equal(t, "giteaowner", ctx.Config.Release.Gitea.Owner)
   408  	require.Equal(t, "https://git.honk.com/giteaowner/gitearepo/releases/tag/v1.0.0", ctx.ReleaseURL)
   409  }
   410  
   411  func TestDefaultWithGiteaInvalidURL(t *testing.T) {
   412  	testlib.Mktmp(t)
   413  	testlib.GitInit(t)
   414  	testlib.GitRemoteAdd(t, "git@gitea.example.com:gitearepo.git")
   415  
   416  	ctx := context.New(config.Project{})
   417  	ctx.TokenType = context.TokenTypeGitea
   418  	ctx.Config.GiteaURLs.Download = "https://git.honk.com"
   419  	ctx.Git.CurrentTag = "v1.0.0"
   420  	require.Error(t, Pipe{}.Default(ctx))
   421  }
   422  
   423  func TestDefaultPreRelease(t *testing.T) {
   424  	testlib.Mktmp(t)
   425  	testlib.GitInit(t)
   426  	testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git")
   427  
   428  	t.Run("prerelease", func(t *testing.T) {
   429  		ctx := context.New(config.Project{
   430  			Release: config.Release{
   431  				Prerelease: "true",
   432  			},
   433  		})
   434  		ctx.TokenType = context.TokenTypeGitHub
   435  		ctx.Semver = context.Semver{
   436  			Major: 1,
   437  			Minor: 0,
   438  			Patch: 0,
   439  		}
   440  		require.NoError(t, Pipe{}.Default(ctx))
   441  		require.True(t, ctx.PreRelease)
   442  	})
   443  
   444  	t.Run("release", func(t *testing.T) {
   445  		ctx := context.New(config.Project{
   446  			Release: config.Release{
   447  				Prerelease: "false",
   448  			},
   449  		})
   450  		ctx.TokenType = context.TokenTypeGitHub
   451  		ctx.Semver = context.Semver{
   452  			Major:      1,
   453  			Minor:      0,
   454  			Patch:      0,
   455  			Prerelease: "rc1",
   456  		}
   457  		require.NoError(t, Pipe{}.Default(ctx))
   458  		require.False(t, ctx.PreRelease)
   459  	})
   460  
   461  	t.Run("auto-release", func(t *testing.T) {
   462  		ctx := context.New(config.Project{
   463  			Release: config.Release{
   464  				Prerelease: "auto",
   465  			},
   466  		})
   467  		ctx.TokenType = context.TokenTypeGitHub
   468  		ctx.Semver = context.Semver{
   469  			Major: 1,
   470  			Minor: 0,
   471  			Patch: 0,
   472  		}
   473  		require.NoError(t, Pipe{}.Default(ctx))
   474  		require.Equal(t, false, ctx.PreRelease)
   475  	})
   476  
   477  	t.Run("auto-rc", func(t *testing.T) {
   478  		ctx := context.New(config.Project{
   479  			Release: config.Release{
   480  				Prerelease: "auto",
   481  			},
   482  		})
   483  		ctx.TokenType = context.TokenTypeGitHub
   484  		ctx.Semver = context.Semver{
   485  			Major:      1,
   486  			Minor:      0,
   487  			Patch:      0,
   488  			Prerelease: "rc1",
   489  		}
   490  		require.NoError(t, Pipe{}.Default(ctx))
   491  		require.Equal(t, true, ctx.PreRelease)
   492  	})
   493  
   494  	t.Run("auto-rc-github-setup", func(t *testing.T) {
   495  		ctx := context.New(config.Project{
   496  			Release: config.Release{
   497  				GitHub: config.Repo{
   498  					Name:  "foo",
   499  					Owner: "foo",
   500  				},
   501  				Prerelease: "auto",
   502  			},
   503  		})
   504  		ctx.TokenType = context.TokenTypeGitHub
   505  		ctx.Semver = context.Semver{
   506  			Major:      1,
   507  			Minor:      0,
   508  			Patch:      0,
   509  			Prerelease: "rc1",
   510  		}
   511  		require.NoError(t, Pipe{}.Default(ctx))
   512  		require.Equal(t, true, ctx.PreRelease)
   513  	})
   514  }
   515  
   516  func TestDefaultPipeDisabled(t *testing.T) {
   517  	testlib.Mktmp(t)
   518  	testlib.GitInit(t)
   519  	testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git")
   520  
   521  	ctx := context.New(config.Project{
   522  		Release: config.Release{
   523  			Disable: true,
   524  		},
   525  	})
   526  	ctx.TokenType = context.TokenTypeGitHub
   527  	require.NoError(t, Pipe{}.Default(ctx))
   528  	require.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Name)
   529  	require.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Owner)
   530  }
   531  
   532  func TestDefaultFilled(t *testing.T) {
   533  	testlib.Mktmp(t)
   534  	testlib.GitInit(t)
   535  	testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git")
   536  
   537  	ctx := context.New(config.Project{
   538  		Release: config.Release{
   539  			GitHub: config.Repo{
   540  				Name:  "foo",
   541  				Owner: "bar",
   542  			},
   543  		},
   544  	})
   545  	ctx.TokenType = context.TokenTypeGitHub
   546  	require.NoError(t, Pipe{}.Default(ctx))
   547  	require.Equal(t, "foo", ctx.Config.Release.GitHub.Name)
   548  	require.Equal(t, "bar", ctx.Config.Release.GitHub.Owner)
   549  }
   550  
   551  func TestDefaultNotAGitRepo(t *testing.T) {
   552  	testlib.Mktmp(t)
   553  	ctx := context.New(config.Project{})
   554  	ctx.TokenType = context.TokenTypeGitHub
   555  	require.EqualError(t, Pipe{}.Default(ctx), "current folder is not a git repository")
   556  	require.Empty(t, ctx.Config.Release.GitHub.String())
   557  }
   558  
   559  func TestDefaultGitRepoWithoutOrigin(t *testing.T) {
   560  	testlib.Mktmp(t)
   561  	ctx := context.New(config.Project{})
   562  	ctx.TokenType = context.TokenTypeGitHub
   563  	testlib.GitInit(t)
   564  	require.EqualError(t, Pipe{}.Default(ctx), "no remote configured to list refs from")
   565  	require.Empty(t, ctx.Config.Release.GitHub.String())
   566  }
   567  
   568  func TestDefaultNotAGitRepoSnapshot(t *testing.T) {
   569  	testlib.Mktmp(t)
   570  	ctx := context.New(config.Project{})
   571  	ctx.TokenType = context.TokenTypeGitHub
   572  	ctx.Snapshot = true
   573  	require.NoError(t, Pipe{}.Default(ctx))
   574  	require.Empty(t, ctx.Config.Release.GitHub.String())
   575  }
   576  
   577  func TestDefaultGitRepoWithoutRemote(t *testing.T) {
   578  	testlib.Mktmp(t)
   579  	ctx := context.New(config.Project{})
   580  	ctx.TokenType = context.TokenTypeGitHub
   581  	require.Error(t, Pipe{}.Default(ctx))
   582  	require.Empty(t, ctx.Config.Release.GitHub.String())
   583  }
   584  
   585  func TestDefaultMultipleReleasesDefined(t *testing.T) {
   586  	ctx := context.New(config.Project{
   587  		Release: config.Release{
   588  			GitHub: config.Repo{
   589  				Owner: "githubName",
   590  				Name:  "githubName",
   591  			},
   592  			GitLab: config.Repo{
   593  				Owner: "gitlabOwner",
   594  				Name:  "gitlabName",
   595  			},
   596  			Gitea: config.Repo{
   597  				Owner: "giteaOwner",
   598  				Name:  "giteaName",
   599  			},
   600  		},
   601  	})
   602  	require.EqualError(t, Pipe{}.Default(ctx), ErrMultipleReleases.Error())
   603  }
   604  
   605  func TestSkip(t *testing.T) {
   606  	t.Run("skip", func(t *testing.T) {
   607  		ctx := context.New(config.Project{
   608  			Release: config.Release{
   609  				Disable: true,
   610  			},
   611  		})
   612  		require.True(t, Pipe{}.Skip(ctx))
   613  	})
   614  
   615  	t.Run("skip upload", func(t *testing.T) {
   616  		ctx := context.New(config.Project{
   617  			Release: config.Release{
   618  				SkipUpload: true,
   619  			},
   620  		})
   621  		client := &client.Mock{}
   622  		testlib.AssertSkipped(t, doPublish(ctx, client))
   623  		require.True(t, client.CreatedRelease)
   624  		require.False(t, client.UploadedFile)
   625  	})
   626  
   627  	t.Run("dont skip", func(t *testing.T) {
   628  		require.False(t, Pipe{}.Skip(context.New(config.Project{})))
   629  	})
   630  }