github.com/goenning/goreleaser@v0.36.0/goreleaserlib/goreleaser_test.go (about) 1 package goreleaserlib 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "strconv" 8 "testing" 9 10 "github.com/goreleaser/goreleaser/config" 11 "github.com/goreleaser/goreleaser/internal/testlib" 12 "github.com/stretchr/testify/assert" 13 yaml "gopkg.in/yaml.v2" 14 ) 15 16 func init() { 17 _ = os.Unsetenv("GITHUB_TOKEN") 18 } 19 20 func TestRelease(t *testing.T) { 21 _, back := setup(t) 22 defer back() 23 var flags = fakeFlags{ 24 flags: map[string]string{ 25 "skip-publish": "true", 26 "skip-validate": "true", 27 "debug": "true", 28 "parallelism": "4", 29 }, 30 } 31 assert.NoError(t, Release(flags)) 32 } 33 34 func TestSnapshotRelease(t *testing.T) { 35 _, back := setup(t) 36 defer back() 37 var flags = fakeFlags{ 38 flags: map[string]string{ 39 "snapshot": "true", 40 "parallelism": "4", 41 }, 42 } 43 assert.NoError(t, Release(flags)) 44 } 45 46 func TestConfigFileIsSetAndDontExist(t *testing.T) { 47 var flags = fakeFlags{ 48 flags: map[string]string{ 49 "config": "/this/wont/exist", 50 }, 51 } 52 assert.Error(t, Release(flags)) 53 } 54 55 func TestConfigFlagNotSetButExists(t *testing.T) { 56 for _, name := range []string{ 57 ".goreleaser.yml", 58 ".goreleaser.yaml", 59 "goreleaser.yml", 60 "goreleaser.yaml", 61 } { 62 t.Run(name, func(t *testing.T) { 63 folder, back := setup(t) 64 defer back() 65 assert.NoError( 66 t, 67 os.Rename( 68 filepath.Join(folder, "goreleaser.yml"), 69 filepath.Join(folder, name), 70 ), 71 ) 72 var flags = fakeFlags{ 73 flags: map[string]string{}, 74 } 75 assert.Equal(t, name, getConfigFile(flags)) 76 }) 77 } 78 } 79 80 func TestReleaseNotesFileDontExist(t *testing.T) { 81 var flags = fakeFlags{ 82 flags: map[string]string{ 83 "release-notes": "/this/also/wont/exist", 84 }, 85 } 86 assert.Error(t, Release(flags)) 87 } 88 89 func TestCustomReleaseNotesFile(t *testing.T) { 90 folder, back := setup(t) 91 defer back() 92 var releaseNotes = filepath.Join(folder, "notes.md") 93 createFile(t, releaseNotes, "nothing important at all") 94 var flags = fakeFlags{ 95 flags: map[string]string{ 96 "release-notes": releaseNotes, 97 "skip-publish": "true", 98 "skip-validate": "true", 99 "parallelism": "4", 100 }, 101 } 102 assert.NoError(t, Release(flags)) 103 } 104 105 func TestBrokenPipe(t *testing.T) { 106 _, back := setup(t) 107 defer back() 108 createFile(t, "main.go", "not a valid go file") 109 var flags = fakeFlags{ 110 flags: map[string]string{ 111 "skip-publish": "true", 112 "skip-validate": "true", 113 "parallelism": "4", 114 }, 115 } 116 assert.Error(t, Release(flags)) 117 } 118 119 func TestInitProject(t *testing.T) { 120 _, back := setup(t) 121 defer back() 122 var filename = "test_goreleaser.yml" 123 assert.NoError(t, InitProject(filename)) 124 125 file, err := os.Open(filename) 126 assert.NoError(t, err) 127 out, err := ioutil.ReadAll(file) 128 assert.NoError(t, err) 129 130 var config = config.Project{} 131 assert.NoError(t, yaml.Unmarshal(out, &config)) 132 } 133 134 func TestInitProjectFileExist(t *testing.T) { 135 _, back := setup(t) 136 defer back() 137 var filename = "test_goreleaser.yml" 138 createFile(t, filename, "") 139 assert.Error(t, InitProject(filename)) 140 } 141 142 func TestInitProjectDefaultPipeFails(t *testing.T) { 143 _, back := setup(t) 144 defer back() 145 var filename = "test_goreleaser.yml" 146 assert.NoError(t, os.RemoveAll(".git")) 147 assert.Error(t, InitProject(filename)) 148 } 149 150 // fakeFlags is a mock of the cli flags 151 type fakeFlags struct { 152 flags map[string]string 153 } 154 155 func (f fakeFlags) IsSet(s string) bool { 156 return f.flags[s] != "" 157 } 158 159 func (f fakeFlags) String(s string) string { 160 return f.flags[s] 161 } 162 163 func (f fakeFlags) Int(s string) int { 164 i, _ := strconv.ParseInt(f.flags[s], 10, 32) 165 return int(i) 166 } 167 168 func (f fakeFlags) Bool(s string) bool { 169 return f.flags[s] == "true" 170 } 171 172 func setup(t *testing.T) (current string, back func()) { 173 folder, err := ioutil.TempDir("", "goreleaser") 174 assert.NoError(t, err) 175 previous, err := os.Getwd() 176 assert.NoError(t, err) 177 assert.NoError(t, os.Chdir(folder)) 178 createGoreleaserYaml(t) 179 createMainGo(t) 180 testlib.GitInit(t) 181 testlib.GitAdd(t) 182 testlib.GitCommit(t, "asdf") 183 testlib.GitTag(t, "v0.0.1") 184 testlib.GitCommit(t, "asas89d") 185 testlib.GitCommit(t, "assssf") 186 testlib.GitCommit(t, "assd") 187 testlib.GitTag(t, "v0.0.2") 188 testlib.GitRemoteAdd(t, "git@github.com:goreleaser/fake.git") 189 return folder, func() { 190 assert.NoError(t, os.Chdir(previous)) 191 } 192 } 193 194 func createFile(t *testing.T, filename, contents string) { 195 assert.NoError(t, ioutil.WriteFile(filename, []byte(contents), 0644)) 196 } 197 198 func createMainGo(t *testing.T) { 199 createFile(t, "main.go", "package main\nfunc main() {println(0)}") 200 } 201 202 func createGoreleaserYaml(t *testing.T) { 203 var yaml = `build: 204 binary: fake 205 goos: 206 - linux 207 goarch: 208 - amd64 209 release: 210 github: 211 owner: goreleaser 212 name: fake 213 ` 214 createFile(t, "goreleaser.yml", yaml) 215 }