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