github.com/joselitofilho/goreleaser@v0.155.1-0.20210123221854-e4891856c593/internal/pipe/nfpm/nfpm_test.go (about) 1 package nfpm 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "runtime" 8 "testing" 9 10 "github.com/goreleaser/goreleaser/internal/artifact" 11 "github.com/goreleaser/goreleaser/internal/testlib" 12 "github.com/goreleaser/goreleaser/pkg/config" 13 "github.com/goreleaser/goreleaser/pkg/context" 14 "github.com/goreleaser/nfpm/v2/files" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestDescription(t *testing.T) { 19 require.NotEmpty(t, Pipe{}.String()) 20 } 21 22 func TestRunPipeNoFormats(t *testing.T) { 23 var ctx = &context.Context{ 24 Version: "1.0.0", 25 Git: context.GitInfo{ 26 CurrentTag: "v1.0.0", 27 }, 28 Config: config.Project{ 29 NFPMs: []config.NFPM{ 30 {}, 31 }, 32 }, 33 Parallelism: runtime.NumCPU(), 34 } 35 require.NoError(t, Pipe{}.Default(ctx)) 36 testlib.AssertSkipped(t, Pipe{}.Run(ctx)) 37 } 38 39 func TestRunPipeInvalidFormat(t *testing.T) { 40 var ctx = context.New(config.Project{ 41 ProjectName: "nope", 42 NFPMs: []config.NFPM{ 43 { 44 Bindir: "/usr/bin", 45 Formats: []string{"nope"}, 46 Builds: []string{"foo"}, 47 NFPMOverridables: config.NFPMOverridables{ 48 PackageName: "foo", 49 FileNameTemplate: defaultNameTemplate, 50 }, 51 }, 52 }, 53 }) 54 ctx.Version = "1.2.3" 55 ctx.Git = context.GitInfo{ 56 CurrentTag: "v1.2.3", 57 } 58 for _, goos := range []string{"linux", "darwin"} { 59 for _, goarch := range []string{"amd64", "386"} { 60 ctx.Artifacts.Add(&artifact.Artifact{ 61 Name: "mybin", 62 Path: "testdata/testfile.txt", 63 Goarch: goarch, 64 Goos: goos, 65 Type: artifact.Binary, 66 Extra: map[string]interface{}{ 67 "ID": "foo", 68 }, 69 }) 70 } 71 } 72 require.Contains(t, Pipe{}.Run(ctx).Error(), `no packager registered for the format nope`) 73 } 74 75 func TestRunPipe(t *testing.T) { 76 var folder = t.TempDir() 77 var dist = filepath.Join(folder, "dist") 78 require.NoError(t, os.Mkdir(dist, 0755)) 79 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 80 var binPath = filepath.Join(dist, "mybin", "mybin") 81 _, err := os.Create(binPath) 82 require.NoError(t, err) 83 var ctx = context.New(config.Project{ 84 ProjectName: "mybin", 85 Dist: dist, 86 NFPMs: []config.NFPM{ 87 { 88 ID: "someid", 89 Bindir: "/usr/bin", 90 Builds: []string{"default"}, 91 Formats: []string{"deb", "rpm", "apk"}, 92 Section: "somesection", 93 Priority: "standard", 94 Description: "Some description", 95 License: "MIT", 96 Maintainer: "me@me", 97 Vendor: "asdf", 98 Homepage: "https://goreleaser.github.io", 99 NFPMOverridables: config.NFPMOverridables{ 100 FileNameTemplate: defaultNameTemplate + "-{{ .Release }}-{{ .Epoch }}", 101 PackageName: "foo", 102 Dependencies: []string{"make"}, 103 Recommends: []string{"svn"}, 104 Suggests: []string{"bzr"}, 105 Replaces: []string{"fish"}, 106 Conflicts: []string{"git"}, 107 EmptyFolders: []string{"/var/log/foobar"}, 108 Release: "10", 109 Epoch: "20", 110 Contents: []*files.Content{ 111 { 112 Source: "./testdata/testfile.txt", 113 Destination: "/usr/share/testfile.txt", 114 }, 115 { 116 Source: "./testdata/testfile.txt", 117 Destination: "/etc/nope.conf", 118 Type: "config", 119 }, 120 { 121 Source: "./testdata/testfile.txt", 122 Destination: "/etc/nope-rpm.conf", 123 Type: "config", 124 Packager: "rpm", 125 }, 126 { 127 Source: "/etc/nope.conf", 128 Destination: "/etc/nope2.conf", 129 Type: "symlink", 130 }, 131 }, 132 Replacements: map[string]string{ 133 "linux": "Tux", 134 }, 135 }, 136 }, 137 }, 138 }) 139 ctx.Version = "1.0.0" 140 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 141 for _, goos := range []string{"linux", "darwin"} { 142 for _, goarch := range []string{"amd64", "386"} { 143 ctx.Artifacts.Add(&artifact.Artifact{ 144 Name: "mybin", 145 Path: binPath, 146 Goarch: goarch, 147 Goos: goos, 148 Type: artifact.Binary, 149 Extra: map[string]interface{}{ 150 "ID": "default", 151 }, 152 }) 153 } 154 } 155 require.NoError(t, Pipe{}.Run(ctx)) 156 var packages = ctx.Artifacts.Filter(artifact.ByType(artifact.LinuxPackage)).List() 157 require.Len(t, packages, 6) 158 for _, pkg := range packages { 159 var format = pkg.ExtraOr("Format", "").(string) 160 require.NotEmpty(t, format) 161 require.Equal(t, pkg.Name, "mybin_1.0.0_Tux_"+pkg.Goarch+"-10-20."+format) 162 require.Equal(t, pkg.ExtraOr("ID", ""), "someid") 163 require.ElementsMatch(t, []string{ 164 "/usr/share/testfile.txt", 165 "/etc/nope.conf", 166 "/etc/nope-rpm.conf", 167 "/etc/nope2.conf", 168 "/usr/bin/mybin", 169 }, destinations(pkg.ExtraOr("Files", files.Contents{}).(files.Contents))) 170 } 171 require.Len(t, ctx.Config.NFPMs[0].Contents, 4, "should not modify the config file list") 172 } 173 174 func TestInvalidNameTemplate(t *testing.T) { 175 var ctx = &context.Context{ 176 Parallelism: runtime.NumCPU(), 177 Artifacts: artifact.New(), 178 Config: config.Project{ 179 NFPMs: []config.NFPM{ 180 { 181 NFPMOverridables: config.NFPMOverridables{ 182 PackageName: "foo", 183 FileNameTemplate: "{{.Foo}", 184 }, 185 Formats: []string{"deb"}, 186 Builds: []string{"default"}, 187 }, 188 }, 189 }, 190 } 191 ctx.Artifacts.Add(&artifact.Artifact{ 192 Name: "mybin", 193 Goos: "linux", 194 Goarch: "amd64", 195 Type: artifact.Binary, 196 Extra: map[string]interface{}{ 197 "ID": "default", 198 }, 199 }) 200 require.Contains(t, Pipe{}.Run(ctx).Error(), `template: tmpl:1: unexpected "}" in operand`) 201 } 202 203 func TestNoBuildsFound(t *testing.T) { 204 var ctx = &context.Context{ 205 Parallelism: runtime.NumCPU(), 206 Artifacts: artifact.New(), 207 Config: config.Project{ 208 NFPMs: []config.NFPM{ 209 { 210 Formats: []string{"deb"}, 211 Builds: []string{"nope"}, 212 }, 213 }, 214 }, 215 } 216 ctx.Artifacts.Add(&artifact.Artifact{ 217 Name: "mybin", 218 Goos: "linux", 219 Goarch: "amd64", 220 Type: artifact.Binary, 221 Extra: map[string]interface{}{ 222 "ID": "default", 223 }, 224 }) 225 require.EqualError(t, Pipe{}.Run(ctx), `no linux binaries found for builds [nope]`) 226 } 227 228 func TestCreateFileDoesntExist(t *testing.T) { 229 var folder = t.TempDir() 230 var dist = filepath.Join(folder, "dist") 231 require.NoError(t, os.Mkdir(dist, 0755)) 232 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 233 var ctx = context.New(config.Project{ 234 Dist: dist, 235 ProjectName: "asd", 236 NFPMs: []config.NFPM{ 237 { 238 Formats: []string{"deb", "rpm"}, 239 Builds: []string{"default"}, 240 NFPMOverridables: config.NFPMOverridables{ 241 PackageName: "foo", 242 Contents: []*files.Content{ 243 { 244 Source: "testdata/testfile.txt", 245 Destination: "/var/lib/test/testfile.txt", 246 }, 247 }, 248 }, 249 }, 250 }, 251 }) 252 ctx.Version = "1.2.3" 253 ctx.Git = context.GitInfo{ 254 CurrentTag: "v1.2.3", 255 } 256 ctx.Artifacts.Add(&artifact.Artifact{ 257 Name: "mybin", 258 Path: filepath.Join(dist, "mybin", "mybin"), 259 Goos: "linux", 260 Goarch: "amd64", 261 Type: artifact.Binary, 262 Extra: map[string]interface{}{ 263 "ID": "default", 264 }, 265 }) 266 require.Contains(t, Pipe{}.Run(ctx).Error(), `dist/mybin/mybin": file does not exist`) 267 } 268 269 func TestInvalidConfig(t *testing.T) { 270 var folder = t.TempDir() 271 var dist = filepath.Join(folder, "dist") 272 require.NoError(t, os.Mkdir(dist, 0755)) 273 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 274 var ctx = context.New(config.Project{ 275 Dist: dist, 276 NFPMs: []config.NFPM{ 277 { 278 Formats: []string{"deb"}, 279 Builds: []string{"default"}, 280 }, 281 }, 282 }) 283 ctx.Git.CurrentTag = "v1.2.3" 284 ctx.Version = "v1.2.3" 285 ctx.Artifacts.Add(&artifact.Artifact{ 286 Name: "mybin", 287 Path: filepath.Join(dist, "mybin", "mybin"), 288 Goos: "linux", 289 Goarch: "amd64", 290 Type: artifact.Binary, 291 Extra: map[string]interface{}{ 292 "ID": "default", 293 }, 294 }) 295 require.Contains(t, Pipe{}.Run(ctx).Error(), `invalid nfpm config: package name must be provided`) 296 } 297 298 func TestDefault(t *testing.T) { 299 var ctx = &context.Context{ 300 Config: config.Project{ 301 ProjectName: "foobar", 302 NFPMs: []config.NFPM{ 303 {}, 304 }, 305 Builds: []config.Build{ 306 {ID: "foo"}, 307 {ID: "bar"}, 308 }, 309 }, 310 } 311 require.NoError(t, Pipe{}.Default(ctx)) 312 require.Equal(t, "/usr/local/bin", ctx.Config.NFPMs[0].Bindir) 313 require.Equal(t, []string{"foo", "bar"}, ctx.Config.NFPMs[0].Builds) 314 require.Equal(t, defaultNameTemplate, ctx.Config.NFPMs[0].FileNameTemplate) 315 require.Equal(t, ctx.Config.ProjectName, ctx.Config.NFPMs[0].PackageName) 316 } 317 318 func TestDefaultDeprecatedOptions(t *testing.T) { 319 var ctx = &context.Context{ 320 Config: config.Project{ 321 ProjectName: "foobar", 322 NFPMs: []config.NFPM{ 323 { 324 NFPMOverridables: config.NFPMOverridables{ 325 Files: map[string]string{ 326 "testdata/testfile.txt": "/bin/foo", 327 }, 328 ConfigFiles: map[string]string{ 329 "testdata/testfile.txt": "/etc/foo.conf", 330 }, 331 Symlinks: map[string]string{ 332 "/etc/foo.conf": "/etc/foov2.conf", 333 }, 334 RPM: config.NFPMRPM{ 335 GhostFiles: []string{"/etc/ghost.conf"}, 336 ConfigNoReplaceFiles: map[string]string{ 337 "testdata/testfile.txt": "/etc/foo_keep.conf", 338 }, 339 }, 340 Deb: config.NFPMDeb{ 341 VersionMetadata: "beta1", 342 }, 343 }, 344 }, 345 }, 346 Builds: []config.Build{ 347 {ID: "foo"}, 348 {ID: "bar"}, 349 }, 350 }, 351 } 352 require.NoError(t, Pipe{}.Default(ctx)) 353 require.Equal(t, "/usr/local/bin", ctx.Config.NFPMs[0].Bindir) 354 require.Equal(t, []string{"foo", "bar"}, ctx.Config.NFPMs[0].Builds) 355 require.ElementsMatch(t, []*files.Content{ 356 {Source: "testdata/testfile.txt", Destination: "/bin/foo"}, 357 {Source: "testdata/testfile.txt", Destination: "/etc/foo.conf", Type: "config"}, 358 {Source: "/etc/foo.conf", Destination: "/etc/foov2.conf", Type: "symlink"}, 359 {Destination: "/etc/ghost.conf", Type: "ghost", Packager: "rpm"}, 360 {Source: "testdata/testfile.txt", Destination: "/etc/foo_keep.conf", Type: "config|noreplace", Packager: "rpm"}, 361 }, ctx.Config.NFPMs[0].Contents) 362 require.Equal(t, defaultNameTemplate, ctx.Config.NFPMs[0].FileNameTemplate) 363 require.Equal(t, ctx.Config.ProjectName, ctx.Config.NFPMs[0].PackageName) 364 require.Equal(t, "beta1", ctx.Config.NFPMs[0].VersionMetadata) 365 } 366 367 func TestDefaultSet(t *testing.T) { 368 var ctx = &context.Context{ 369 Config: config.Project{ 370 Builds: []config.Build{ 371 {ID: "foo"}, 372 {ID: "bar"}, 373 }, 374 NFPMs: []config.NFPM{ 375 { 376 Builds: []string{"foo"}, 377 Bindir: "/bin", 378 NFPMOverridables: config.NFPMOverridables{ 379 FileNameTemplate: "foo", 380 }, 381 }, 382 }, 383 }, 384 } 385 require.NoError(t, Pipe{}.Default(ctx)) 386 require.Equal(t, "/bin", ctx.Config.NFPMs[0].Bindir) 387 require.Equal(t, "foo", ctx.Config.NFPMs[0].FileNameTemplate) 388 require.Equal(t, []string{"foo"}, ctx.Config.NFPMs[0].Builds) 389 } 390 391 func TestOverrides(t *testing.T) { 392 var ctx = &context.Context{ 393 Config: config.Project{ 394 NFPMs: []config.NFPM{ 395 { 396 Bindir: "/bin", 397 NFPMOverridables: config.NFPMOverridables{ 398 FileNameTemplate: "foo", 399 }, 400 Overrides: map[string]config.NFPMOverridables{ 401 "deb": { 402 FileNameTemplate: "bar", 403 }, 404 }, 405 }, 406 }, 407 }, 408 } 409 require.NoError(t, Pipe{}.Default(ctx)) 410 merged, err := mergeOverrides(ctx.Config.NFPMs[0], "deb") 411 require.NoError(t, err) 412 require.Equal(t, "/bin", ctx.Config.NFPMs[0].Bindir) 413 require.Equal(t, "foo", ctx.Config.NFPMs[0].FileNameTemplate) 414 require.Equal(t, "bar", ctx.Config.NFPMs[0].Overrides["deb"].FileNameTemplate) 415 require.Equal(t, "bar", merged.FileNameTemplate) 416 } 417 418 func TestDebSpecificConfig(t *testing.T) { 419 var folder = t.TempDir() 420 var dist = filepath.Join(folder, "dist") 421 require.NoError(t, os.Mkdir(dist, 0755)) 422 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 423 var binPath = filepath.Join(dist, "mybin", "mybin") 424 _, err := os.Create(binPath) 425 require.NoError(t, err) 426 var ctx = context.New(config.Project{ 427 ProjectName: "mybin", 428 Dist: dist, 429 NFPMs: []config.NFPM{ 430 { 431 ID: "someid", 432 Builds: []string{"default"}, 433 Formats: []string{"deb"}, 434 NFPMOverridables: config.NFPMOverridables{ 435 PackageName: "foo", 436 Contents: []*files.Content{ 437 { 438 Source: "testdata/testfile.txt", 439 Destination: "/usr/share/testfile.txt", 440 }, 441 }, 442 Deb: config.NFPMDeb{ 443 Signature: config.NFPMDebSignature{ 444 KeyFile: "./testdata/privkey.gpg", 445 }, 446 }, 447 }, 448 }, 449 }, 450 }) 451 ctx.Version = "1.0.0" 452 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 453 for _, goos := range []string{"linux", "darwin"} { 454 for _, goarch := range []string{"amd64", "386"} { 455 ctx.Artifacts.Add(&artifact.Artifact{ 456 Name: "mybin", 457 Path: binPath, 458 Goarch: goarch, 459 Goos: goos, 460 Type: artifact.Binary, 461 Extra: map[string]interface{}{ 462 "ID": "default", 463 }, 464 }) 465 } 466 } 467 468 t.Run("no passphrase set", func(t *testing.T) { 469 require.Contains( 470 t, 471 Pipe{}.Run(ctx).Error(), 472 `key is encrypted but no passphrase was provided`, 473 ) 474 }) 475 476 t.Run("general passphrase set", func(t *testing.T) { 477 ctx.Env = map[string]string{ 478 "NFPM_SOMEID_PASSPHRASE": "hunter2", 479 } 480 require.NoError(t, Pipe{}.Run(ctx)) 481 }) 482 483 t.Run("packager specific passphrase set", func(t *testing.T) { 484 ctx.Env = map[string]string{ 485 "NFPM_SOMEID_DEB_PASSPHRASE": "hunter2", 486 } 487 require.NoError(t, Pipe{}.Run(ctx)) 488 }) 489 } 490 491 func TestRPMSpecificConfig(t *testing.T) { 492 var folder = t.TempDir() 493 var dist = filepath.Join(folder, "dist") 494 require.NoError(t, os.Mkdir(dist, 0755)) 495 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 496 var binPath = filepath.Join(dist, "mybin", "mybin") 497 _, err := os.Create(binPath) 498 require.NoError(t, err) 499 var ctx = context.New(config.Project{ 500 ProjectName: "mybin", 501 Dist: dist, 502 NFPMs: []config.NFPM{ 503 { 504 ID: "someid", 505 Builds: []string{"default"}, 506 Formats: []string{"rpm"}, 507 NFPMOverridables: config.NFPMOverridables{ 508 PackageName: "foo", 509 Contents: []*files.Content{ 510 { 511 Source: "testdata/testfile.txt", 512 Destination: "/usr/share/testfile.txt", 513 }, 514 }, 515 RPM: config.NFPMRPM{ 516 Signature: config.NFPMRPMSignature{ 517 KeyFile: "./testdata/privkey.gpg", 518 }, 519 }, 520 }, 521 }, 522 }, 523 }) 524 ctx.Version = "1.0.0" 525 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 526 for _, goos := range []string{"linux", "darwin"} { 527 for _, goarch := range []string{"amd64", "386"} { 528 ctx.Artifacts.Add(&artifact.Artifact{ 529 Name: "mybin", 530 Path: binPath, 531 Goarch: goarch, 532 Goos: goos, 533 Type: artifact.Binary, 534 Extra: map[string]interface{}{ 535 "ID": "default", 536 }, 537 }) 538 } 539 } 540 541 t.Run("no passphrase set", func(t *testing.T) { 542 require.Contains( 543 t, 544 Pipe{}.Run(ctx).Error(), 545 `key is encrypted but no passphrase was provided`, 546 ) 547 }) 548 549 t.Run("general passphrase set", func(t *testing.T) { 550 ctx.Env = map[string]string{ 551 "NFPM_SOMEID_PASSPHRASE": "hunter2", 552 } 553 require.NoError(t, Pipe{}.Run(ctx)) 554 }) 555 556 t.Run("packager specific passphrase set", func(t *testing.T) { 557 ctx.Env = map[string]string{ 558 "NFPM_SOMEID_RPM_PASSPHRASE": "hunter2", 559 } 560 require.NoError(t, Pipe{}.Run(ctx)) 561 }) 562 } 563 564 func TestAPKSpecificConfig(t *testing.T) { 565 var folder = t.TempDir() 566 var dist = filepath.Join(folder, "dist") 567 require.NoError(t, os.Mkdir(dist, 0755)) 568 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 569 var binPath = filepath.Join(dist, "mybin", "mybin") 570 _, err := os.Create(binPath) 571 require.NoError(t, err) 572 var ctx = context.New(config.Project{ 573 ProjectName: "mybin", 574 Dist: dist, 575 NFPMs: []config.NFPM{ 576 { 577 ID: "someid", 578 Maintainer: "me@me", 579 Builds: []string{"default"}, 580 Formats: []string{"apk"}, 581 NFPMOverridables: config.NFPMOverridables{ 582 PackageName: "foo", 583 Contents: []*files.Content{ 584 { 585 Source: "testdata/testfile.txt", 586 Destination: "/usr/share/testfile.txt", 587 }, 588 }, 589 APK: config.NFPMAPK{ 590 Signature: config.NFPMAPKSignature{ 591 KeyFile: "./testdata/rsa.priv", 592 }, 593 }, 594 }, 595 }, 596 }, 597 }) 598 ctx.Version = "1.0.0" 599 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 600 for _, goos := range []string{"linux", "darwin"} { 601 for _, goarch := range []string{"amd64", "386"} { 602 ctx.Artifacts.Add(&artifact.Artifact{ 603 Name: "mybin", 604 Path: binPath, 605 Goarch: goarch, 606 Goos: goos, 607 Type: artifact.Binary, 608 Extra: map[string]interface{}{ 609 "ID": "default", 610 }, 611 }) 612 } 613 } 614 615 t.Run("no passphrase set", func(t *testing.T) { 616 require.Contains( 617 t, 618 Pipe{}.Run(ctx).Error(), 619 `key is encrypted but no passphrase was provided`, 620 ) 621 }) 622 623 t.Run("general passphrase set", func(t *testing.T) { 624 ctx.Env = map[string]string{ 625 "NFPM_SOMEID_PASSPHRASE": "hunter2", 626 } 627 require.NoError(t, Pipe{}.Run(ctx)) 628 }) 629 630 t.Run("packager specific passphrase set", func(t *testing.T) { 631 ctx.Env = map[string]string{ 632 "NFPM_SOMEID_APK_PASSPHRASE": "hunter2", 633 } 634 require.NoError(t, Pipe{}.Run(ctx)) 635 }) 636 } 637 638 func TestSeveralNFPMsWithTheSameID(t *testing.T) { 639 var ctx = &context.Context{ 640 Config: config.Project{ 641 NFPMs: []config.NFPM{ 642 { 643 ID: "a", 644 }, 645 { 646 ID: "a", 647 }, 648 }, 649 }, 650 } 651 require.EqualError(t, Pipe{}.Default(ctx), "found 2 nfpms with the ID 'a', please fix your config") 652 } 653 654 func TestMeta(t *testing.T) { 655 var folder = t.TempDir() 656 var dist = filepath.Join(folder, "dist") 657 require.NoError(t, os.Mkdir(dist, 0755)) 658 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 659 var binPath = filepath.Join(dist, "mybin", "mybin") 660 _, err := os.Create(binPath) 661 require.NoError(t, err) 662 var ctx = context.New(config.Project{ 663 ProjectName: "mybin", 664 Dist: dist, 665 NFPMs: []config.NFPM{ 666 { 667 ID: "someid", 668 Bindir: "/usr/bin", 669 Builds: []string{"default"}, 670 Formats: []string{"deb", "rpm"}, 671 Section: "somesection", 672 Priority: "standard", 673 Description: "Some description", 674 License: "MIT", 675 Maintainer: "me@me", 676 Vendor: "asdf", 677 Homepage: "https://goreleaser.github.io", 678 Meta: true, 679 NFPMOverridables: config.NFPMOverridables{ 680 FileNameTemplate: defaultNameTemplate + "-{{ .Release }}-{{ .Epoch }}", 681 PackageName: "foo", 682 Dependencies: []string{"make"}, 683 Recommends: []string{"svn"}, 684 Suggests: []string{"bzr"}, 685 Replaces: []string{"fish"}, 686 Conflicts: []string{"git"}, 687 EmptyFolders: []string{"/var/log/foobar"}, 688 Release: "10", 689 Epoch: "20", 690 Contents: []*files.Content{ 691 { 692 Source: "testdata/testfile.txt", 693 Destination: "/usr/share/testfile.txt", 694 }, 695 { 696 Source: "./testdata/testfile.txt", 697 Destination: "/etc/nope.conf", 698 Type: "config", 699 }, 700 { 701 Source: "./testdata/testfile.txt", 702 Destination: "/etc/nope-rpm.conf", 703 Type: "config", 704 Packager: "rpm", 705 }, 706 }, 707 Replacements: map[string]string{ 708 "linux": "Tux", 709 }, 710 }, 711 }, 712 }, 713 }) 714 ctx.Version = "1.0.0" 715 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 716 for _, goos := range []string{"linux", "darwin"} { 717 for _, goarch := range []string{"amd64", "386"} { 718 ctx.Artifacts.Add(&artifact.Artifact{ 719 Name: "mybin", 720 Path: binPath, 721 Goarch: goarch, 722 Goos: goos, 723 Type: artifact.Binary, 724 Extra: map[string]interface{}{ 725 "ID": "default", 726 }, 727 }) 728 } 729 } 730 require.NoError(t, Pipe{}.Run(ctx)) 731 var packages = ctx.Artifacts.Filter(artifact.ByType(artifact.LinuxPackage)).List() 732 require.Len(t, packages, 4) 733 for _, pkg := range packages { 734 var format = pkg.ExtraOr("Format", "").(string) 735 require.NotEmpty(t, format) 736 require.Equal(t, pkg.Name, "mybin_1.0.0_Tux_"+pkg.Goarch+"-10-20."+format) 737 require.Equal(t, pkg.ExtraOr("ID", ""), "someid") 738 require.ElementsMatch(t, []string{ 739 "/usr/share/testfile.txt", 740 "/etc/nope.conf", 741 "/etc/nope-rpm.conf", 742 }, destinations(pkg.ExtraOr("Files", files.Contents{}).(files.Contents))) 743 } 744 745 require.Len(t, ctx.Config.NFPMs[0].Contents, 3, "should not modify the config file list") 746 } 747 748 func TestSkipSign(t *testing.T) { 749 folder, err := ioutil.TempDir("", "archivetest") 750 require.NoError(t, err) 751 var dist = filepath.Join(folder, "dist") 752 require.NoError(t, os.Mkdir(dist, 0755)) 753 require.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 754 var binPath = filepath.Join(dist, "mybin", "mybin") 755 _, err = os.Create(binPath) 756 require.NoError(t, err) 757 var ctx = context.New(config.Project{ 758 ProjectName: "mybin", 759 Dist: dist, 760 NFPMs: []config.NFPM{ 761 { 762 ID: "someid", 763 Builds: []string{"default"}, 764 Formats: []string{"deb", "rpm", "apk"}, 765 NFPMOverridables: config.NFPMOverridables{ 766 PackageName: "foo", 767 FileNameTemplate: defaultNameTemplate, 768 Contents: []*files.Content{ 769 { 770 Source: "testdata/testfile.txt", 771 Destination: "/usr/share/testfile.txt", 772 }, 773 }, 774 Deb: config.NFPMDeb{ 775 Signature: config.NFPMDebSignature{ 776 KeyFile: "/does/not/exist.gpg", 777 }, 778 }, 779 RPM: config.NFPMRPM{ 780 Signature: config.NFPMRPMSignature{ 781 KeyFile: "/does/not/exist.gpg", 782 }, 783 }, 784 APK: config.NFPMAPK{ 785 Signature: config.NFPMAPKSignature{ 786 KeyFile: "/does/not/exist.gpg", 787 }, 788 }, 789 }, 790 }, 791 }, 792 }) 793 ctx.Version = "1.0.0" 794 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 795 for _, goos := range []string{"linux", "darwin"} { 796 for _, goarch := range []string{"amd64", "386"} { 797 ctx.Artifacts.Add(&artifact.Artifact{ 798 Name: "mybin", 799 Path: binPath, 800 Goarch: goarch, 801 Goos: goos, 802 Type: artifact.Binary, 803 Extra: map[string]interface{}{ 804 "ID": "default", 805 }, 806 }) 807 } 808 } 809 810 t.Run("skip sign not set", func(t *testing.T) { 811 require.Contains( 812 t, 813 Pipe{}.Run(ctx).Error(), 814 `open /does/not/exist.gpg: no such file or directory`, 815 ) 816 }) 817 818 t.Run("skip sign set", func(t *testing.T) { 819 ctx.SkipSign = true 820 require.NoError(t, Pipe{}.Run(ctx)) 821 }) 822 }