github.com/jasei/goreleaser@v0.62.4-0.20180312171904-62cb6a8963a6/main_test.go (about) 1 package main 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 "time" 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 TestReleaseProject(t *testing.T) { 21 _, back := setup(t) 22 defer back() 23 assert.NoError(t, releaseProject(testParams())) 24 } 25 26 func TestReleaseProjectSkipPublish(t *testing.T) { 27 _, back := setup(t) 28 defer back() 29 params := testParams() 30 params.Snapshot = true 31 params.SkipPublish = true 32 assert.NoError(t, releaseProject(params)) 33 } 34 35 func TestConfigFileIsSetAndDontExist(t *testing.T) { 36 params := testParams() 37 params.Config = "/this/wont/exist" 38 assert.Error(t, releaseProject(params)) 39 } 40 41 func TestConfigFlagNotSetButExists(t *testing.T) { 42 for _, name := range []string{ 43 ".goreleaser.yml", 44 ".goreleaser.yaml", 45 "goreleaser.yml", 46 "goreleaser.yaml", 47 } { 48 t.Run(name, func(t *testing.T) { 49 folder, back := setup(t) 50 defer back() 51 err := os.Rename( 52 filepath.Join(folder, "goreleaser.yml"), 53 filepath.Join(folder, name), 54 ) 55 assert.NoError(t, err) 56 proj, err := loadConfig("") 57 assert.NoError(t, err) 58 assert.NotEqual(t, config.Project{}, proj) 59 }) 60 } 61 } 62 63 func TestConfigFileDoesntExist(t *testing.T) { 64 folder, back := setup(t) 65 defer back() 66 err := os.Remove(filepath.Join(folder, "goreleaser.yml")) 67 assert.NoError(t, err) 68 proj, err := loadConfig("") 69 assert.NoError(t, err) 70 assert.Equal(t, config.Project{}, proj) 71 } 72 73 func TestReleaseNotesFileDontExist(t *testing.T) { 74 params := testParams() 75 params.ReleaseNotes = "/this/also/wont/exist" 76 assert.Error(t, releaseProject(params)) 77 } 78 79 func TestCustomReleaseNotesFile(t *testing.T) { 80 _, back := setup(t) 81 defer back() 82 releaseNotes, err := ioutil.TempFile("", "") 83 assert.NoError(t, err) 84 createFile(t, releaseNotes.Name(), "nothing important at all") 85 var params = testParams() 86 params.ReleaseNotes = releaseNotes.Name() 87 assert.NoError(t, releaseProject(params)) 88 } 89 90 func TestBrokenPipe(t *testing.T) { 91 _, back := setup(t) 92 defer back() 93 createFile(t, "main.go", "not a valid go file") 94 assert.Error(t, releaseProject(testParams())) 95 } 96 97 func TestInitProject(t *testing.T) { 98 _, back := setup(t) 99 defer back() 100 var filename = "test_goreleaser.yml" 101 assert.NoError(t, initProject(filename)) 102 103 file, err := os.Open(filename) 104 assert.NoError(t, err) 105 out, err := ioutil.ReadAll(file) 106 assert.NoError(t, err) 107 108 var config = config.Project{} 109 assert.NoError(t, yaml.Unmarshal(out, &config)) 110 } 111 112 func TestInitProjectFileExist(t *testing.T) { 113 _, back := setup(t) 114 defer back() 115 var filename = "test_goreleaser.yml" 116 createFile(t, filename, "") 117 assert.Error(t, initProject(filename)) 118 } 119 120 func TestInitProjectDefaultPipeFails(t *testing.T) { 121 folder, back := setup(t) 122 defer back() 123 var filename = "test_goreleaser.yml" 124 assert.NoError(t, os.Chmod(folder, 0000)) 125 assert.EqualError(t, initProject(filename), `stat test_goreleaser.yml: permission denied`) 126 } 127 128 func testParams() releaseOptions { 129 return releaseOptions{ 130 Debug: true, 131 Parallelism: 4, 132 Snapshot: true, 133 Timeout: time.Minute, 134 } 135 } 136 137 func setup(t *testing.T) (current string, back func()) { 138 folder, err := ioutil.TempDir("", "") 139 assert.NoError(t, err) 140 previous, err := os.Getwd() 141 assert.NoError(t, err) 142 assert.NoError(t, os.Chdir(folder)) 143 createGoreleaserYaml(t) 144 createMainGo(t) 145 testlib.GitInit(t) 146 testlib.GitAdd(t) 147 testlib.GitCommit(t, "asdf") 148 testlib.GitTag(t, "v0.0.1") 149 testlib.GitCommit(t, "asas89d") 150 testlib.GitCommit(t, "assssf") 151 testlib.GitCommit(t, "assd") 152 testlib.GitTag(t, "v0.0.2") 153 testlib.GitRemoteAdd(t, "git@github.com:goreleaser/fake.git") 154 return folder, func() { 155 assert.NoError(t, os.Chdir(previous)) 156 } 157 } 158 159 func createFile(t *testing.T, filename, contents string) { 160 assert.NoError(t, ioutil.WriteFile(filename, []byte(contents), 0644)) 161 } 162 163 func createMainGo(t *testing.T) { 164 createFile(t, "main.go", "package main\nfunc main() {println(0)}") 165 } 166 167 func createGoreleaserYaml(t *testing.T) { 168 var yaml = `build: 169 binary: fake 170 goos: 171 - linux 172 goarch: 173 - amd64 174 release: 175 github: 176 owner: goreleaser 177 name: fake 178 ` 179 createFile(t, "goreleaser.yml", yaml) 180 }