gitee.com/mirrors_opencollective/goreleaser@v0.45.0/pipeline/release/release_test.go (about) 1 package release 2 3 import ( 4 "bytes" 5 "errors" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/goreleaser/goreleaser/config" 12 "github.com/goreleaser/goreleaser/context" 13 "github.com/goreleaser/goreleaser/internal/artifact" 14 "github.com/goreleaser/goreleaser/internal/testlib" 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestPipeDescription(t *testing.T) { 19 assert.NotEmpty(t, Pipe{}.String()) 20 } 21 22 func TestRunPipe(t *testing.T) { 23 folder, err := ioutil.TempDir("", "goreleasertest") 24 assert.NoError(t, err) 25 tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz")) 26 assert.NoError(t, err) 27 debfile, err := os.Create(filepath.Join(folder, "bin.deb")) 28 assert.NoError(t, err) 29 var config = config.Project{ 30 Dist: folder, 31 Release: config.Release{ 32 GitHub: config.Repo{ 33 Owner: "test", 34 Name: "test", 35 }, 36 }, 37 } 38 var ctx = context.New(config) 39 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 40 ctx.Publish = true 41 ctx.Artifacts.Add(artifact.Artifact{ 42 Type: artifact.UploadableArchive, 43 Name: "bin.tar.gz", 44 Path: tarfile.Name(), 45 }) 46 ctx.Artifacts.Add(artifact.Artifact{ 47 Type: artifact.LinuxPackage, 48 Name: "bin.deb", 49 Path: debfile.Name(), 50 }) 51 client := &DummyClient{} 52 assert.NoError(t, doRun(ctx, client)) 53 assert.True(t, client.CreatedRelease) 54 assert.True(t, client.UploadedFile) 55 assert.Contains(t, client.UploadedFileNames, "bin.deb") 56 assert.Contains(t, client.UploadedFileNames, "bin.tar.gz") 57 } 58 59 func TestRunPipeReleaseCreationFailed(t *testing.T) { 60 var config = config.Project{ 61 Release: config.Release{ 62 GitHub: config.Repo{ 63 Owner: "test", 64 Name: "test", 65 }, 66 }, 67 } 68 var ctx = context.New(config) 69 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 70 ctx.Publish = true 71 client := &DummyClient{ 72 FailToCreateRelease: true, 73 } 74 assert.Error(t, doRun(ctx, client)) 75 assert.False(t, client.CreatedRelease) 76 assert.False(t, client.UploadedFile) 77 } 78 79 func TestRunPipeWithFileThatDontExist(t *testing.T) { 80 var config = config.Project{ 81 Release: config.Release{ 82 GitHub: config.Repo{ 83 Owner: "test", 84 Name: "test", 85 }, 86 }, 87 } 88 var ctx = context.New(config) 89 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 90 ctx.Publish = true 91 ctx.Artifacts.Add(artifact.Artifact{ 92 Type: artifact.UploadableArchive, 93 Name: "bin.tar.gz", 94 Path: "/nope/nope/nope", 95 }) 96 client := &DummyClient{} 97 assert.Error(t, doRun(ctx, client)) 98 assert.True(t, client.CreatedRelease) 99 assert.False(t, client.UploadedFile) 100 } 101 102 func TestRunPipeUploadFailure(t *testing.T) { 103 folder, err := ioutil.TempDir("", "goreleasertest") 104 assert.NoError(t, err) 105 tarfile, err := os.Create(filepath.Join(folder, "bin.tar.gz")) 106 assert.NoError(t, err) 107 var config = config.Project{ 108 Release: config.Release{ 109 GitHub: config.Repo{ 110 Owner: "test", 111 Name: "test", 112 }, 113 }, 114 } 115 var ctx = context.New(config) 116 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 117 ctx.Publish = true 118 ctx.Artifacts.Add(artifact.Artifact{ 119 Type: artifact.UploadableArchive, 120 Name: "bin.tar.gz", 121 Path: tarfile.Name(), 122 }) 123 client := &DummyClient{ 124 FailToUpload: true, 125 } 126 assert.Error(t, doRun(ctx, client)) 127 assert.True(t, client.CreatedRelease) 128 assert.False(t, client.UploadedFile) 129 } 130 131 func TestSkipPublish(t *testing.T) { 132 var ctx = &context.Context{ 133 Publish: false, 134 Parallelism: 1, 135 } 136 client := &DummyClient{} 137 testlib.AssertSkipped(t, doRun(ctx, client)) 138 assert.False(t, client.CreatedRelease) 139 assert.False(t, client.UploadedFile) 140 } 141 142 func TestDefault(t *testing.T) { 143 _, back := testlib.Mktmp(t) 144 defer back() 145 testlib.GitInit(t) 146 testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git") 147 148 var ctx = &context.Context{ 149 Config: config.Project{}, 150 } 151 assert.NoError(t, Pipe{}.Default(ctx)) 152 assert.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Name) 153 assert.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Owner) 154 } 155 156 func TestDefaultFilled(t *testing.T) { 157 _, back := testlib.Mktmp(t) 158 defer back() 159 testlib.GitInit(t) 160 testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git") 161 162 var ctx = &context.Context{ 163 Config: config.Project{ 164 Release: config.Release{ 165 GitHub: config.Repo{ 166 Name: "foo", 167 Owner: "bar", 168 }, 169 }, 170 }, 171 } 172 assert.NoError(t, Pipe{}.Default(ctx)) 173 assert.Equal(t, "foo", ctx.Config.Release.GitHub.Name) 174 assert.Equal(t, "bar", ctx.Config.Release.GitHub.Owner) 175 } 176 177 func TestDefaultNotAGitRepo(t *testing.T) { 178 _, back := testlib.Mktmp(t) 179 defer back() 180 testlib.GitInit(t) 181 var ctx = &context.Context{ 182 Config: config.Project{}, 183 } 184 assert.Error(t, Pipe{}.Default(ctx)) 185 assert.Empty(t, ctx.Config.Release.GitHub.String()) 186 } 187 188 func TestDefaultGitRepoWithoutRemote(t *testing.T) { 189 _, back := testlib.Mktmp(t) 190 defer back() 191 var ctx = &context.Context{ 192 Config: config.Project{}, 193 } 194 assert.Error(t, Pipe{}.Default(ctx)) 195 assert.Empty(t, ctx.Config.Release.GitHub.String()) 196 } 197 198 type DummyClient struct { 199 FailToCreateRelease bool 200 FailToUpload bool 201 CreatedRelease bool 202 UploadedFile bool 203 UploadedFileNames []string 204 } 205 206 func (client *DummyClient) CreateRelease(ctx *context.Context, body string) (releaseID int, err error) { 207 if client.FailToCreateRelease { 208 return 0, errors.New("release failed") 209 } 210 client.CreatedRelease = true 211 return 212 } 213 214 func (client *DummyClient) CreateFile(ctx *context.Context, content bytes.Buffer, path string) (err error) { 215 return 216 } 217 218 func (client *DummyClient) Upload(ctx *context.Context, releaseID int, name string, file *os.File) (err error) { 219 if client.FailToUpload { 220 return errors.New("upload failed") 221 } 222 client.UploadedFile = true 223 client.UploadedFileNames = append(client.UploadedFileNames, name) 224 return 225 }