github.com/wesleimp/goreleaser@v0.92.0/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/internal/testlib"
    11  	"github.com/goreleaser/goreleaser/pkg/config"
    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  }