github.com/amane3/goreleaser@v0.182.0/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/amane3/goreleaser/pkg/config" 10 "github.com/amane3/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(tt *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(tt *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 } 37 38 func TestValidGithubEnv(t *testing.T) { 39 require.NoError(t, os.Setenv("GITHUB_TOKEN", "asdf")) 40 var ctx = &context.Context{ 41 Config: config.Project{}, 42 } 43 require.NoError(t, Pipe{}.Run(ctx)) 44 require.Equal(t, "asdf", ctx.Token) 45 require.Equal(t, context.TokenTypeGitHub, ctx.TokenType) 46 // so the tests do not depend on each other 47 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 48 } 49 50 func TestValidGitlabEnv(t *testing.T) { 51 require.NoError(t, os.Setenv("GITLAB_TOKEN", "qwertz")) 52 var ctx = &context.Context{ 53 Config: config.Project{}, 54 } 55 require.NoError(t, Pipe{}.Run(ctx)) 56 require.Equal(t, "qwertz", ctx.Token) 57 require.Equal(t, context.TokenTypeGitLab, ctx.TokenType) 58 // so the tests do not depend on each other 59 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 60 } 61 62 func TestValidGiteaEnv(t *testing.T) { 63 require.NoError(t, os.Setenv("GITEA_TOKEN", "token")) 64 var ctx = &context.Context{ 65 Config: config.Project{}, 66 } 67 require.NoError(t, Pipe{}.Run(ctx)) 68 require.Equal(t, "token", ctx.Token) 69 require.Equal(t, context.TokenTypeGitea, ctx.TokenType) 70 // so the tests do not depend on each other 71 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 72 } 73 74 func TestInvalidEnv(t *testing.T) { 75 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 76 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 77 var ctx = &context.Context{ 78 Config: config.Project{}, 79 } 80 require.Error(t, Pipe{}.Run(ctx)) 81 require.EqualError(t, Pipe{}.Run(ctx), ErrMissingToken.Error()) 82 } 83 84 func TestMultipleEnvTokens(t *testing.T) { 85 require.NoError(t, os.Setenv("GITHUB_TOKEN", "asdf")) 86 require.NoError(t, os.Setenv("GITLAB_TOKEN", "qwertz")) 87 require.NoError(t, os.Setenv("GITEA_TOKEN", "token")) 88 var ctx = &context.Context{ 89 Config: config.Project{}, 90 } 91 require.Error(t, Pipe{}.Run(ctx)) 92 require.EqualError(t, Pipe{}.Run(ctx), ErrMultipleTokens.Error()) 93 // so the tests do not depend on each other 94 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 95 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 96 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 97 } 98 99 func TestEmptyGithubFileEnv(t *testing.T) { 100 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 101 var ctx = &context.Context{ 102 Config: config.Project{}, 103 } 104 require.Error(t, Pipe{}.Run(ctx)) 105 } 106 107 func TestEmptyGitlabFileEnv(t *testing.T) { 108 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 109 var ctx = &context.Context{ 110 Config: config.Project{}, 111 } 112 require.Error(t, Pipe{}.Run(ctx)) 113 } 114 115 func TestEmptyGiteaFileEnv(t *testing.T) { 116 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 117 var ctx = &context.Context{ 118 Config: config.Project{}, 119 } 120 require.Error(t, Pipe{}.Run(ctx)) 121 } 122 123 func TestEmptyGithubEnvFile(t *testing.T) { 124 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 125 f, err := ioutil.TempFile(t.TempDir(), "token") 126 require.NoError(t, err) 127 require.NoError(t, os.Chmod(f.Name(), 0377)) 128 var ctx = &context.Context{ 129 Config: config.Project{ 130 EnvFiles: config.EnvFiles{ 131 GitHubToken: f.Name(), 132 }, 133 }, 134 } 135 require.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load github token: open %s: permission denied", f.Name())) 136 } 137 138 func TestEmptyGitlabEnvFile(t *testing.T) { 139 require.NoError(t, os.Unsetenv("GITLAB_TOKEN")) 140 f, err := ioutil.TempFile(t.TempDir(), "token") 141 require.NoError(t, err) 142 require.NoError(t, os.Chmod(f.Name(), 0377)) 143 var ctx = &context.Context{ 144 Config: config.Project{ 145 EnvFiles: config.EnvFiles{ 146 GitLabToken: f.Name(), 147 }, 148 }, 149 } 150 require.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load gitlab token: open %s: permission denied", f.Name())) 151 } 152 153 func TestEmptyGiteaEnvFile(t *testing.T) { 154 require.NoError(t, os.Unsetenv("GITEA_TOKEN")) 155 f, err := ioutil.TempFile(t.TempDir(), "token") 156 require.NoError(t, err) 157 require.NoError(t, os.Chmod(f.Name(), 0377)) 158 var ctx = &context.Context{ 159 Config: config.Project{ 160 EnvFiles: config.EnvFiles{ 161 GiteaToken: f.Name(), 162 }, 163 }, 164 } 165 require.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load gitea token: open %s: permission denied", f.Name())) 166 } 167 168 func TestInvalidEnvChecksSkipped(t *testing.T) { 169 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 170 var ctx = &context.Context{ 171 Config: config.Project{}, 172 SkipPublish: true, 173 } 174 require.NoError(t, Pipe{}.Run(ctx)) 175 } 176 177 func TestInvalidEnvReleaseDisabled(t *testing.T) { 178 require.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 179 var ctx = &context.Context{ 180 Config: config.Project{ 181 Release: config.Release{ 182 Disable: true, 183 }, 184 }, 185 } 186 require.NoError(t, Pipe{}.Run(ctx)) 187 } 188 189 func TestLoadEnv(t *testing.T) { 190 t.Run("env exists", func(tt *testing.T) { 191 var env = "SUPER_SECRET_ENV" 192 require.NoError(tt, os.Setenv(env, "1")) 193 v, err := loadEnv(env, "nope") 194 require.NoError(tt, err) 195 require.Equal(tt, "1", v) 196 }) 197 t.Run("env file exists", func(tt *testing.T) { 198 var env = "SUPER_SECRET_ENV_NOPE" 199 require.NoError(tt, os.Unsetenv(env)) 200 f, err := ioutil.TempFile(t.TempDir(), "token") 201 require.NoError(t, err) 202 fmt.Fprintf(f, "123") 203 v, err := loadEnv(env, f.Name()) 204 require.NoError(tt, err) 205 require.Equal(tt, "123", v) 206 }) 207 t.Run("env file with an empty line at the end", func(tt *testing.T) { 208 var env = "SUPER_SECRET_ENV_NOPE" 209 require.NoError(tt, os.Unsetenv(env)) 210 f, err := ioutil.TempFile(t.TempDir(), "token") 211 require.NoError(t, err) 212 fmt.Fprintf(f, "123\n") 213 v, err := loadEnv(env, f.Name()) 214 require.NoError(tt, err) 215 require.Equal(tt, "123", v) 216 }) 217 t.Run("env file is not readable", func(tt *testing.T) { 218 var env = "SUPER_SECRET_ENV_NOPE" 219 require.NoError(tt, os.Unsetenv(env)) 220 f, err := ioutil.TempFile(t.TempDir(), "token") 221 require.NoError(t, err) 222 fmt.Fprintf(f, "123") 223 err = os.Chmod(f.Name(), 0377) 224 require.NoError(tt, err) 225 v, err := loadEnv(env, f.Name()) 226 require.EqualError(tt, err, fmt.Sprintf("open %s: permission denied", f.Name())) 227 require.Equal(tt, "", v) 228 }) 229 }