github.com/goreleaser/goreleaser@v1.25.1/cmd/release_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/goreleaser/goreleaser/internal/skips"
     8  	"github.com/goreleaser/goreleaser/internal/testctx"
     9  	"github.com/goreleaser/goreleaser/pkg/context"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestRelease(t *testing.T) {
    14  	setup(t)
    15  	cmd := newReleaseCmd()
    16  	cmd.cmd.SetArgs([]string{"--snapshot", "--timeout=1m", "--parallelism=2", "--deprecated"})
    17  	require.NoError(t, cmd.cmd.Execute())
    18  }
    19  
    20  func TestReleaseAutoSnapshot(t *testing.T) {
    21  	t.Run("clean", func(t *testing.T) {
    22  		setup(t)
    23  		cmd := newReleaseCmd()
    24  		cmd.cmd.SetArgs([]string{"--auto-snapshot", "--skip-publish"})
    25  		require.NoError(t, cmd.cmd.Execute())
    26  		require.FileExists(t, "dist/fake_0.0.2_checksums.txt", "should have created checksums when run with --snapshot")
    27  	})
    28  
    29  	t.Run("dirty", func(t *testing.T) {
    30  		setup(t)
    31  		createFile(t, "foo", "force dirty tree")
    32  		cmd := newReleaseCmd()
    33  		cmd.cmd.SetArgs([]string{"--auto-snapshot", "--skip-publish"})
    34  		require.NoError(t, cmd.cmd.Execute())
    35  		matches, err := filepath.Glob("./dist/fake_0.0.2-SNAPSHOT-*_checksums.txt")
    36  		require.NoError(t, err)
    37  		require.Len(t, matches, 1, "should have implied --snapshot")
    38  	})
    39  }
    40  
    41  func TestReleaseInvalidConfig(t *testing.T) {
    42  	setup(t)
    43  	createFile(t, "goreleaser.yml", "foo: bar")
    44  	cmd := newReleaseCmd()
    45  	cmd.cmd.SetArgs([]string{"--snapshot", "--timeout=1m", "--parallelism=2", "--deprecated"})
    46  	require.EqualError(t, cmd.cmd.Execute(), "yaml: unmarshal errors:\n  line 1: field foo not found in type config.Project")
    47  }
    48  
    49  func TestReleaseBrokenProject(t *testing.T) {
    50  	setup(t)
    51  	createFile(t, "main.go", "not a valid go file")
    52  	cmd := newReleaseCmd()
    53  	cmd.cmd.SetArgs([]string{"--snapshot", "--timeout=1m", "--parallelism=2"})
    54  	require.EqualError(t, cmd.cmd.Execute(), "failed to parse dir: .: main.go:1:1: expected 'package', found not")
    55  }
    56  
    57  func TestReleaseFlags(t *testing.T) {
    58  	setup := func(tb testing.TB, opts releaseOpts) *context.Context {
    59  		tb.Helper()
    60  		ctx := testctx.New()
    61  		require.NoError(t, setupReleaseContext(ctx, opts))
    62  		return ctx
    63  	}
    64  
    65  	t.Run("action", func(t *testing.T) {
    66  		ctx := setup(t, releaseOpts{})
    67  		require.Equal(t, context.ActionRelease, ctx.Action)
    68  	})
    69  
    70  	t.Run("snapshot", func(t *testing.T) {
    71  		ctx := setup(t, releaseOpts{
    72  			snapshot: true,
    73  		})
    74  		require.True(t, ctx.Snapshot)
    75  		requireAll(t, ctx, skips.Publish, skips.Validate, skips.Announce)
    76  	})
    77  
    78  	t.Run("skips (old)", func(t *testing.T) {
    79  		ctx := setup(t, releaseOpts{
    80  			skipPublish:  true,
    81  			skipSign:     true,
    82  			skipValidate: true,
    83  		})
    84  
    85  		requireAll(t, ctx, skips.Sign, skips.Publish, skips.Validate, skips.Announce)
    86  	})
    87  
    88  	t.Run("skips", func(t *testing.T) {
    89  		ctx := setup(t, releaseOpts{
    90  			skips: []string{
    91  				string(skips.Publish),
    92  				string(skips.Sign),
    93  				string(skips.Validate),
    94  			},
    95  		})
    96  
    97  		requireAll(t, ctx, skips.Sign, skips.Publish, skips.Validate, skips.Announce)
    98  	})
    99  
   100  	t.Run("parallelism", func(t *testing.T) {
   101  		require.Equal(t, 1, setup(t, releaseOpts{
   102  			parallelism: 1,
   103  		}).Parallelism)
   104  	})
   105  
   106  	t.Run("notes", func(t *testing.T) {
   107  		notes := "foo.md"
   108  		header := "header.md"
   109  		footer := "footer.md"
   110  		ctx := setup(t, releaseOpts{
   111  			releaseNotesFile:  notes,
   112  			releaseHeaderFile: header,
   113  			releaseFooterFile: footer,
   114  		})
   115  		require.Equal(t, notes, ctx.ReleaseNotesFile)
   116  		require.Equal(t, header, ctx.ReleaseHeaderFile)
   117  		require.Equal(t, footer, ctx.ReleaseFooterFile)
   118  	})
   119  
   120  	t.Run("templated notes", func(t *testing.T) {
   121  		notes := "foo.md"
   122  		header := "header.md"
   123  		footer := "footer.md"
   124  		ctx := setup(t, releaseOpts{
   125  			releaseNotesTmpl:  notes,
   126  			releaseHeaderTmpl: header,
   127  			releaseFooterTmpl: footer,
   128  		})
   129  		require.Equal(t, notes, ctx.ReleaseNotesTmpl)
   130  		require.Equal(t, header, ctx.ReleaseHeaderTmpl)
   131  		require.Equal(t, footer, ctx.ReleaseFooterTmpl)
   132  	})
   133  
   134  	t.Run("rm dist", func(t *testing.T) {
   135  		require.True(t, setup(t, releaseOpts{
   136  			clean: true,
   137  		}).Clean)
   138  	})
   139  }