github.com/elyscape/goreleaser@v0.66.1-0.20180515111211-5252f74ade63/pipeline/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/config"
    11  	"github.com/goreleaser/goreleaser/context"
    12  	"github.com/goreleaser/goreleaser/internal/artifact"
    13  	"github.com/goreleaser/goreleaser/internal/testlib"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestDescription(t *testing.T) {
    18  	assert.NotEmpty(t, Pipe{}.String())
    19  }
    20  
    21  func TestRunPipeNoFormats(t *testing.T) {
    22  	var ctx = &context.Context{
    23  		Git: context.GitInfo{
    24  			CurrentTag: "v1.0.0",
    25  		},
    26  		Config:      config.Project{},
    27  		Parallelism: runtime.NumCPU(),
    28  	}
    29  	testlib.AssertSkipped(t, Pipe{}.Run(ctx))
    30  }
    31  
    32  func TestRunPipeInvalidFormat(t *testing.T) {
    33  	var ctx = context.New(config.Project{
    34  		ProjectName: "nope",
    35  		NFPM: config.NFPM{
    36  			Bindir:  "/usr/bin",
    37  			Formats: []string{"nope"},
    38  			NFPMOverridables: config.NFPMOverridables{
    39  				NameTemplate: defaultNameTemplate,
    40  				Files:        map[string]string{},
    41  			},
    42  		},
    43  	})
    44  	ctx.Git = context.GitInfo{
    45  		CurrentTag: "v1.2.3",
    46  	}
    47  	for _, goos := range []string{"linux", "darwin"} {
    48  		for _, goarch := range []string{"amd64", "386"} {
    49  			ctx.Artifacts.Add(artifact.Artifact{
    50  				Name:   "mybin",
    51  				Path:   "whatever",
    52  				Goarch: goarch,
    53  				Goos:   goos,
    54  				Type:   artifact.Binary,
    55  			})
    56  		}
    57  	}
    58  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `no packager registered for the format nope`)
    59  }
    60  
    61  func TestRunPipe(t *testing.T) {
    62  	folder, err := ioutil.TempDir("", "archivetest")
    63  	assert.NoError(t, err)
    64  	var dist = filepath.Join(folder, "dist")
    65  	assert.NoError(t, os.Mkdir(dist, 0755))
    66  	assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755))
    67  	var binPath = filepath.Join(dist, "mybin", "mybin")
    68  	_, err = os.Create(binPath)
    69  	assert.NoError(t, err)
    70  	var ctx = context.New(config.Project{
    71  		ProjectName: "mybin",
    72  		Dist:        dist,
    73  		NFPM: config.NFPM{
    74  			Bindir:      "/usr/bin",
    75  			Formats:     []string{"deb", "rpm"},
    76  			Description: "Some description",
    77  			License:     "MIT",
    78  			Maintainer:  "me@me",
    79  			Vendor:      "asdf",
    80  			Homepage:    "https://goreleaser.github.io",
    81  			NFPMOverridables: config.NFPMOverridables{
    82  				NameTemplate: defaultNameTemplate,
    83  				Dependencies: []string{"make"},
    84  				Recommends:   []string{"svn"},
    85  				Suggests:     []string{"bzr"},
    86  				Conflicts:    []string{"git"},
    87  				Files: map[string]string{
    88  					"./testdata/testfile.txt": "/usr/share/testfile.txt",
    89  				},
    90  				ConfigFiles: map[string]string{
    91  					"./testdata/testfile.txt": "/etc/nope.conf",
    92  				},
    93  			},
    94  			Overrides: map[string]config.NFPMOverridables{
    95  				"rpm": {
    96  					ConfigFiles: map[string]string{
    97  						"./testdata/testfile.txt": "/etc/nope-rpm.conf",
    98  					},
    99  				},
   100  			},
   101  		},
   102  	})
   103  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   104  	for _, goos := range []string{"linux", "darwin"} {
   105  		for _, goarch := range []string{"amd64", "386"} {
   106  			ctx.Artifacts.Add(artifact.Artifact{
   107  				Name:   "mybin",
   108  				Path:   binPath,
   109  				Goarch: goarch,
   110  				Goos:   goos,
   111  				Type:   artifact.Binary,
   112  			})
   113  		}
   114  	}
   115  	assert.NoError(t, Pipe{}.Run(ctx))
   116  	assert.Len(t, ctx.Config.NFPM.Files, 1, "should not modify the config file list")
   117  }
   118  
   119  func TestInvalidNameTemplate(t *testing.T) {
   120  	var ctx = &context.Context{
   121  		Parallelism: runtime.NumCPU(),
   122  		Artifacts:   artifact.New(),
   123  		Config: config.Project{
   124  			NFPM: config.NFPM{
   125  				NFPMOverridables: config.NFPMOverridables{NameTemplate: "{{.Foo}"},
   126  				Formats:          []string{"deb"},
   127  			},
   128  		},
   129  	}
   130  	ctx.Artifacts.Add(artifact.Artifact{
   131  		Name:   "mybin",
   132  		Goos:   "linux",
   133  		Goarch: "amd64",
   134  		Type:   artifact.Binary,
   135  	})
   136  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `template: {{.Foo}:1: unexpected "}" in operand`)
   137  }
   138  
   139  func TestCreateFileDoesntExist(t *testing.T) {
   140  	folder, err := ioutil.TempDir("", "archivetest")
   141  	assert.NoError(t, err)
   142  	var dist = filepath.Join(folder, "dist")
   143  	assert.NoError(t, os.Mkdir(dist, 0755))
   144  	assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755))
   145  	var ctx = context.New(config.Project{
   146  		Dist:        dist,
   147  		ProjectName: "asd",
   148  		NFPM: config.NFPM{
   149  			Formats: []string{"deb", "rpm"},
   150  			NFPMOverridables: config.NFPMOverridables{
   151  				Files: map[string]string{
   152  					"testdata/testfile.txt": "/var/lib/test/testfile.txt",
   153  				},
   154  			},
   155  		},
   156  	})
   157  	ctx.Git = context.GitInfo{
   158  		CurrentTag: "v1.2.3",
   159  	}
   160  	ctx.Artifacts.Add(artifact.Artifact{
   161  		Name:   "mybin",
   162  		Path:   filepath.Join(dist, "mybin", "mybin"),
   163  		Goos:   "linux",
   164  		Goarch: "amd64",
   165  		Type:   artifact.Binary,
   166  	})
   167  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `dist/mybin/mybin: file does not exist`)
   168  }
   169  
   170  func TestInvalidConfig(t *testing.T) {
   171  	folder, err := ioutil.TempDir("", "archivetest")
   172  	assert.NoError(t, err)
   173  	var dist = filepath.Join(folder, "dist")
   174  	assert.NoError(t, os.Mkdir(dist, 0755))
   175  	assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755))
   176  	var ctx = context.New(config.Project{
   177  		Dist: dist,
   178  		NFPM: config.NFPM{
   179  			Formats: []string{"deb"},
   180  		},
   181  	})
   182  	ctx.Artifacts.Add(artifact.Artifact{
   183  		Name:   "mybin",
   184  		Path:   filepath.Join(dist, "mybin", "mybin"),
   185  		Goos:   "linux",
   186  		Goarch: "amd64",
   187  		Type:   artifact.Binary,
   188  	})
   189  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `invalid nfpm config: package name cannot be empty`)
   190  }
   191  
   192  func TestDefault(t *testing.T) {
   193  	var ctx = &context.Context{
   194  		Config: config.Project{
   195  			NFPM: config.NFPM{},
   196  		},
   197  	}
   198  	assert.NoError(t, Pipe{}.Default(ctx))
   199  	assert.Equal(t, "/usr/local/bin", ctx.Config.NFPM.Bindir)
   200  	assert.Equal(t, defaultNameTemplate, ctx.Config.NFPM.NameTemplate)
   201  }
   202  
   203  func TestDefaultSet(t *testing.T) {
   204  	var ctx = &context.Context{
   205  		Config: config.Project{
   206  			NFPM: config.NFPM{
   207  				Bindir: "/bin",
   208  				NFPMOverridables: config.NFPMOverridables{
   209  					NameTemplate: "foo",
   210  				},
   211  			},
   212  		},
   213  	}
   214  	assert.NoError(t, Pipe{}.Default(ctx))
   215  	assert.Equal(t, "/bin", ctx.Config.NFPM.Bindir)
   216  	assert.Equal(t, "foo", ctx.Config.NFPM.NameTemplate)
   217  }
   218  
   219  func TestOverrides(t *testing.T) {
   220  	var ctx = &context.Context{
   221  		Config: config.Project{
   222  			NFPM: config.NFPM{
   223  				Bindir: "/bin",
   224  				NFPMOverridables: config.NFPMOverridables{
   225  					NameTemplate: "foo",
   226  				},
   227  				Overrides: map[string]config.NFPMOverridables{
   228  					"deb": {
   229  						NameTemplate: "bar",
   230  					},
   231  				},
   232  			},
   233  		},
   234  	}
   235  	assert.NoError(t, Pipe{}.Default(ctx))
   236  	merged, err := mergeOverrides(ctx, "deb")
   237  	assert.NoError(t, err)
   238  	assert.Equal(t, "/bin", ctx.Config.NFPM.Bindir)
   239  	assert.Equal(t, "foo", ctx.Config.NFPM.NameTemplate)
   240  	assert.Equal(t, "bar", ctx.Config.NFPM.Overrides["deb"].NameTemplate)
   241  	assert.Equal(t, "bar", merged.NameTemplate)
   242  }