github.com/ahmet2mir/goreleaser@v0.180.3-0.20210927151101-8e5ee5a9b8c5/internal/pipe/env/env_test.go (about) 1 package env 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "testing" 8 9 "github.com/goreleaser/goreleaser/pkg/config" 10 "github.com/goreleaser/goreleaser/pkg/context" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestDescription(t *testing.T) { 15 require.NotEmpty(t, Pipe{}.String()) 16 } 17 18 func TestSetDefaultTokenFiles(t *testing.T) { 19 t.Run("empty config", func(t *testing.T) { 20 ctx := context.New(config.Project{}) 21 setDefaultTokenFiles(ctx) 22 require.Equal(t, "~/.config/goreleaser/github_token", ctx.Config.EnvFiles.GitHubToken) 23 require.Equal(t, "~/.config/goreleaser/gitlab_token", ctx.Config.EnvFiles.GitLabToken) 24 require.Equal(t, "~/.config/goreleaser/gitea_token", ctx.Config.EnvFiles.GiteaToken) 25 }) 26 t.Run("custom config config", func(t *testing.T) { 27 cfg := "what" 28 ctx := context.New(config.Project{ 29 EnvFiles: config.EnvFiles{ 30 GitHubToken: cfg, 31 }, 32 }) 33 setDefaultTokenFiles(ctx) 34 require.Equal(t, cfg, ctx.Config.EnvFiles.GitHubToken) 35 }) 36 t.Run("templates", func(t *testing.T) { 37 ctx := context.New(config.Project{ 38 ProjectName: "foobar", 39 Env: []string{ 40 "FOO=FOO_{{ .Env.BAR }}", 41 "FOOBAR={{.ProjectName}}", 42 "EMPTY_VAL=", 43 }, 44 }) 45 ctx.Env["FOOBAR"] = "old foobar" 46 os.Setenv("BAR", "lebar") 47 os.Setenv("GITHUB_TOKEN", "fake") 48 require.NoError(t, Pipe{}.Run(ctx)) 49 require.Equal(t, "FOO_lebar", ctx.Env["FOO"]) 50 require.Equal(t, "foobar", ctx.Env["FOOBAR"]) 51 require.Equal(t, "", ctx.Env["EMPTY_VAL"]) 52 }) 53 54 t.Run("template error", func(t *testing.T) { 55 ctx := context.New(config.Project{ 56 Env: []string{ 57 "FOO={{ .Asss }", 58 }, 59 }) 60 require.EqualError(t, Pipe{}.Run(ctx), `template: tmpl:1: unexpected "}" in operand`) 61 }) 62 63 t.Run("no token", func(t *testing.T) { 64 ctx := context.New(config.Project{}) 65 require.NoError(t, Pipe{}.Run(ctx)) 66 require.Equal(t, ctx.TokenType, context.TokenTypeGitHub) 67 }) 68 } 69 70 func TestValidGithubEnv(t *testing.T) { 71 require.NoError(t, os.Setenv("GITHUB_TOKEN", "asdf")) 72 ctx := &context.Context{ 73 Config: config.Project{}, 74 } 75 require.NoError(t, Pipe{}.Run(ctx)) 76 require.Equal(t, "asdf", ctx.Token) 77 require.Equal(t, context.TokenTypeGitHub, ctx.TokenType) 78 // so the tests do not depend on each other 79 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 80 } 81 82 func TestValidGitlabEnv(t *testing.T) { 83 require.NoError(t, os.Setenv("GITLAB_TOKEN", "qwertz")) 84 ctx := &context.Context{ 85 Config: config.Project{}, 86 } 87 require.NoError(t, Pipe{}.Run(ctx)) 88 require.Equal(t, "qwertz", ctx.Token) 89 require.Equal(t, context.TokenTypeGitLab, ctx.TokenType) 90 // so the tests do not depend on each other 91 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 92 } 93 94 func TestValidGiteaEnv(t *testing.T) { 95 require.NoError(t, os.Setenv("GITEA_TOKEN", "token")) 96 ctx := &context.Context{ 97 Config: config.Project{}, 98 } 99 require.NoError(t, Pipe{}.Run(ctx)) 100 require.Equal(t, "token", ctx.Token) 101 require.Equal(t, context.TokenTypeGitea, ctx.TokenType) 102 // so the tests do not depend on each other 103 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 104 } 105 106 func TestInvalidEnv(t *testing.T) { 107 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 108 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 109 ctx := &context.Context{ 110 Config: config.Project{}, 111 } 112 require.Error(t, Pipe{}.Run(ctx)) 113 require.EqualError(t, Pipe{}.Run(ctx), ErrMissingToken.Error()) 114 } 115 116 func TestMultipleEnvTokens(t *testing.T) { 117 require.NoError(t, os.Setenv("GITHUB_TOKEN", "asdf")) 118 require.NoError(t, os.Setenv("GITLAB_TOKEN", "qwertz")) 119 require.NoError(t, os.Setenv("GITEA_TOKEN", "token")) 120 ctx := &context.Context{ 121 Config: config.Project{}, 122 } 123 require.Error(t, Pipe{}.Run(ctx)) 124 require.EqualError(t, Pipe{}.Run(ctx), ErrMultipleTokens.Error()) 125 // so the tests do not depend on each other 126 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 127 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 128 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 129 } 130 131 func TestEmptyGithubFileEnv(t *testing.T) { 132 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 133 ctx := &context.Context{ 134 Config: config.Project{}, 135 } 136 require.Error(t, Pipe{}.Run(ctx)) 137 } 138 139 func TestEmptyGitlabFileEnv(t *testing.T) { 140 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 141 ctx := &context.Context{ 142 Config: config.Project{}, 143 } 144 require.Error(t, Pipe{}.Run(ctx)) 145 } 146 147 func TestEmptyGiteaFileEnv(t *testing.T) { 148 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 149 ctx := &context.Context{ 150 Config: config.Project{}, 151 } 152 require.Error(t, Pipe{}.Run(ctx)) 153 } 154 155 func TestEmptyGithubEnvFile(t *testing.T) { 156 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 157 f, err := ioutil.TempFile(t.TempDir(), "token") 158 require.NoError(t, err) 159 require.NoError(t, f.Close()) 160 require.NoError(t, os.Chmod(f.Name(), 0o377)) 161 ctx := &context.Context{ 162 Config: config.Project{ 163 EnvFiles: config.EnvFiles{ 164 GitHubToken: f.Name(), 165 }, 166 }, 167 } 168 require.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load github token: open %s: permission denied", f.Name())) 169 } 170 171 func TestEmptyGitlabEnvFile(t *testing.T) { 172 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 173 f, err := ioutil.TempFile(t.TempDir(), "token") 174 require.NoError(t, err) 175 require.NoError(t, f.Close()) 176 require.NoError(t, os.Chmod(f.Name(), 0o377)) 177 ctx := &context.Context{ 178 Config: config.Project{ 179 EnvFiles: config.EnvFiles{ 180 GitLabToken: f.Name(), 181 }, 182 }, 183 } 184 require.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load gitlab token: open %s: permission denied", f.Name())) 185 } 186 187 func TestEmptyGiteaEnvFile(t *testing.T) { 188 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 189 f, err := ioutil.TempFile(t.TempDir(), "token") 190 require.NoError(t, err) 191 require.NoError(t, f.Close()) 192 require.NoError(t, os.Chmod(f.Name(), 0o377)) 193 ctx := &context.Context{ 194 Config: config.Project{ 195 EnvFiles: config.EnvFiles{ 196 GiteaToken: f.Name(), 197 }, 198 }, 199 } 200 require.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load gitea token: open %s: permission denied", f.Name())) 201 } 202 203 func TestInvalidEnvChecksSkipped(t *testing.T) { 204 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 205 ctx := &context.Context{ 206 Config: config.Project{}, 207 SkipPublish: true, 208 } 209 require.NoError(t, Pipe{}.Run(ctx)) 210 } 211 212 func TestInvalidEnvReleaseDisabled(t *testing.T) { 213 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 214 ctx := &context.Context{ 215 Config: config.Project{ 216 Release: config.Release{ 217 Disable: true, 218 }, 219 }, 220 } 221 require.NoError(t, Pipe{}.Run(ctx)) 222 } 223 224 func TestLoadEnv(t *testing.T) { 225 t.Run("env exists", func(t *testing.T) { 226 env := "SUPER_SECRET_ENV" 227 require.NoError(t, os.Setenv(env, "1")) 228 v, err := loadEnv(env, "nope") 229 require.NoError(t, err) 230 require.Equal(t, "1", v) 231 }) 232 t.Run("env file exists", func(t *testing.T) { 233 env := "SUPER_SECRET_ENV_NOPE" 234 require.NoError(t, os.Unsetenv(env)) 235 f, err := ioutil.TempFile(t.TempDir(), "token") 236 require.NoError(t, err) 237 fmt.Fprintf(f, "123") 238 require.NoError(t, f.Close()) 239 v, err := loadEnv(env, f.Name()) 240 require.NoError(t, err) 241 require.Equal(t, "123", v) 242 }) 243 t.Run("env file with an empty line at the end", func(t *testing.T) { 244 env := "SUPER_SECRET_ENV_NOPE" 245 require.NoError(t, os.Unsetenv(env)) 246 f, err := ioutil.TempFile(t.TempDir(), "token") 247 require.NoError(t, err) 248 fmt.Fprintf(f, "123\n") 249 require.NoError(t, f.Close()) 250 v, err := loadEnv(env, f.Name()) 251 require.NoError(t, err) 252 require.Equal(t, "123", v) 253 }) 254 t.Run("env file is not readable", func(t *testing.T) { 255 env := "SUPER_SECRET_ENV_NOPE" 256 require.NoError(t, os.Unsetenv(env)) 257 f, err := ioutil.TempFile(t.TempDir(), "token") 258 require.NoError(t, err) 259 fmt.Fprintf(f, "123") 260 require.NoError(t, f.Close()) 261 err = os.Chmod(f.Name(), 0o377) 262 require.NoError(t, err) 263 v, err := loadEnv(env, f.Name()) 264 require.EqualError(t, err, fmt.Sprintf("open %s: permission denied", f.Name())) 265 require.Equal(t, "", v) 266 }) 267 }