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

     1  package cmd
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  	"github.com/windmeup/goreleaser/internal/skips"
     9  	"github.com/windmeup/goreleaser/internal/testctx"
    10  	"github.com/windmeup/goreleaser/pkg/context"
    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 not have 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  		setupReleaseContext(ctx, opts)
    62  		return ctx
    63  	}
    64  
    65  	t.Run("snapshot", func(t *testing.T) {
    66  		ctx := setup(t, releaseOpts{
    67  			snapshot: true,
    68  		})
    69  		require.True(t, ctx.Snapshot)
    70  		requireAll(t, ctx, skips.Publish, skips.Validate, skips.Announce)
    71  	})
    72  
    73  	t.Run("skips (old)", func(t *testing.T) {
    74  		ctx := setup(t, releaseOpts{
    75  			skipPublish:  true,
    76  			skipSign:     true,
    77  			skipValidate: true,
    78  		})
    79  
    80  		requireAll(t, ctx, skips.Sign, skips.Publish, skips.Validate, skips.Announce)
    81  	})
    82  
    83  	t.Run("skips", func(t *testing.T) {
    84  		ctx := setup(t, releaseOpts{
    85  			skips: []string{
    86  				string(skips.Publish),
    87  				string(skips.Sign),
    88  				string(skips.Validate),
    89  			},
    90  		})
    91  
    92  		requireAll(t, ctx, skips.Sign, skips.Publish, skips.Validate, skips.Announce)
    93  	})
    94  
    95  	t.Run("parallelism", func(t *testing.T) {
    96  		require.Equal(t, 1, setup(t, releaseOpts{
    97  			parallelism: 1,
    98  		}).Parallelism)
    99  	})
   100  
   101  	t.Run("notes", func(t *testing.T) {
   102  		notes := "foo.md"
   103  		header := "header.md"
   104  		footer := "footer.md"
   105  		ctx := setup(t, releaseOpts{
   106  			releaseNotesFile:  notes,
   107  			releaseHeaderFile: header,
   108  			releaseFooterFile: footer,
   109  		})
   110  		require.Equal(t, notes, ctx.ReleaseNotesFile)
   111  		require.Equal(t, header, ctx.ReleaseHeaderFile)
   112  		require.Equal(t, footer, ctx.ReleaseFooterFile)
   113  	})
   114  
   115  	t.Run("templated notes", func(t *testing.T) {
   116  		notes := "foo.md"
   117  		header := "header.md"
   118  		footer := "footer.md"
   119  		ctx := setup(t, releaseOpts{
   120  			releaseNotesTmpl:  notes,
   121  			releaseHeaderTmpl: header,
   122  			releaseFooterTmpl: footer,
   123  		})
   124  		require.Equal(t, notes, ctx.ReleaseNotesTmpl)
   125  		require.Equal(t, header, ctx.ReleaseHeaderTmpl)
   126  		require.Equal(t, footer, ctx.ReleaseFooterTmpl)
   127  	})
   128  
   129  	t.Run("rm dist", func(t *testing.T) {
   130  		require.True(t, setup(t, releaseOpts{
   131  			clean: true,
   132  		}).Clean)
   133  	})
   134  }