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 }