@@ -3,6 +3,7 @@ package commands
3
3
import (
4
4
"fmt"
5
5
"os"
6
+ "path"
6
7
7
8
"github.com/barelyhuman/commitlog/pkg"
8
9
"github.com/go-git/go-git/v5"
@@ -13,14 +14,29 @@ import (
13
14
14
15
func Release (c * cli.Context ) (err error ) {
15
16
16
- _ , err = os .ReadFile (".commitlog.release" )
17
+ fileDir := c .String ("path" )
18
+ filePath := path .Join (fileDir , ".commitlog.release" )
19
+
20
+ if c .Bool ("init" ) {
21
+ _ , err = os .Stat (filePath )
22
+ if os .IsNotExist (err ) {
23
+ err = nil
24
+ os .WriteFile (filePath , []byte ("v0.0.0" ), os .ModePerm )
25
+ fmt .Println ("[commitlog] Initialized commitlog release" )
26
+ } else {
27
+ err = fmt .Errorf (".commitlog.release already exists, cannot override" )
28
+ }
29
+ return
30
+ }
31
+
32
+ _ , err = os .Stat (filePath )
17
33
18
34
if os .IsNotExist (err ) {
19
35
err = fmt .Errorf ("couldn't find the release file, please run the `--init` flag first" )
20
36
return
21
37
}
22
38
23
- fileData , err := os .ReadFile (".commitlog.release" )
39
+ fileData , err := os .ReadFile (filePath )
24
40
25
41
if err != nil {
26
42
err = fmt .Errorf ("error reading the version file: %v" , err )
@@ -29,7 +45,12 @@ func Release(c *cli.Context) (err error) {
29
45
30
46
versionString := string (fileData )
31
47
32
- releaserOpts := []pkg.ReleaserMod {}
48
+ releaserOpts := []pkg.ReleaserMod {
49
+ // add in the pre-tag,
50
+ // will be used only if the pre flag
51
+ // is true
52
+ pkg .WithPreTag (c .String ("pre-tag" )),
53
+ }
33
54
34
55
if c .Bool ("major" ) {
35
56
releaserOpts = append (releaserOpts , pkg .WithMajorIncrement (), pkg .WithMinorReset (), pkg .WithPatchReset ())
@@ -53,43 +74,49 @@ func Release(c *cli.Context) (err error) {
53
74
return err
54
75
}
55
76
56
- err = os .WriteFile (".commitlog.release" , []byte (releaser .String ()), os .ModePerm )
77
+ err = os .WriteFile (filePath , []byte (releaser .String ()), os .ModePerm )
57
78
if err != nil {
58
79
return
59
80
}
60
81
61
- openRepo , err := git .PlainOpen (c .String ("path" ))
62
- if err != nil {
63
- return err
64
- }
82
+ var gitRepo * git.Repository
83
+ var toTagHash plumbing.Hash
84
+ var repoWt * git.Worktree
65
85
66
- var commitHash plumbing.Hash
67
- wt , err := openRepo .Worktree ()
68
- if err != nil {
69
- return err
86
+ if c .Bool ("commit" ) || c .Bool ("push" ) {
87
+ gitRepo , err = git .PlainOpen (c .String ("path" ))
88
+ if err != nil {
89
+ return err
90
+ }
91
+
92
+ repoWt , err = gitRepo .Worktree ()
93
+
94
+ if err != nil {
95
+ return err
96
+ }
70
97
}
71
98
72
99
if c .Bool ("commit" ) {
73
- wt .Add (".commitlog.release" )
74
- commitHash , err = wt .Commit ("chore: version" + releaser .String (), & git.CommitOptions {})
100
+ repoWt .Add (filePath )
101
+ toTagHash , err = repoWt .Commit ("chore: version" + releaser .String (), & git.CommitOptions {})
75
102
if err != nil {
76
103
return err
77
104
}
78
105
79
- _ , err = openRepo .CreateTag (releaser .String (), commitHash , & git.CreateTagOptions {})
106
+ _ , err = gitRepo .CreateTag (releaser .String (), toTagHash , & git.CreateTagOptions {})
80
107
if err != nil {
81
108
err = fmt .Errorf ("looks like there was error while creating a tag for the version commit, please try again or create a tag manually: %v" , err )
82
109
return err
83
110
}
84
111
}
85
112
86
113
if c .Bool ("push" ) {
87
- _ , err := wt .Status ()
114
+ _ , err := repoWt .Status ()
88
115
if err != nil {
89
116
return err
90
117
}
91
118
92
- openRepo .Push (& git.PushOptions {
119
+ gitRepo .Push (& git.PushOptions {
93
120
RemoteName : "origin" ,
94
121
Progress : os .Stdout ,
95
122
RefSpecs : []config.RefSpec {config .RefSpec ("refs/tags/*:refs/tags/*" )},
0 commit comments