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 }