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  }