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