Skip to content

Commit e0ce9c6

Browse files
committed
feat(releaser): add init and pre-tag handlers
will add support for using the init flag and pre-tag flags on the release command also adds a sub feature for the path flag
1 parent 110c9b2 commit e0ce9c6

File tree

3 files changed

+76
-25
lines changed

3 files changed

+76
-25
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ CHANGELOG.md
33
.DS_Store
44
dist
55
commitlog
6+
lab

commands/release.go

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package commands
33
import (
44
"fmt"
55
"os"
6+
"path"
67

78
"github.com/barelyhuman/commitlog/pkg"
89
"github.com/go-git/go-git/v5"
@@ -13,14 +14,29 @@ import (
1314

1415
func Release(c *cli.Context) (err error) {
1516

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)
1733

1834
if os.IsNotExist(err) {
1935
err = fmt.Errorf("couldn't find the release file, please run the `--init` flag first")
2036
return
2137
}
2238

23-
fileData, err := os.ReadFile(".commitlog.release")
39+
fileData, err := os.ReadFile(filePath)
2440

2541
if err != nil {
2642
err = fmt.Errorf("error reading the version file: %v", err)
@@ -29,7 +45,12 @@ func Release(c *cli.Context) (err error) {
2945

3046
versionString := string(fileData)
3147

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+
}
3354

3455
if c.Bool("major") {
3556
releaserOpts = append(releaserOpts, pkg.WithMajorIncrement(), pkg.WithMinorReset(), pkg.WithPatchReset())
@@ -53,43 +74,49 @@ func Release(c *cli.Context) (err error) {
5374
return err
5475
}
5576

56-
err = os.WriteFile(".commitlog.release", []byte(releaser.String()), os.ModePerm)
77+
err = os.WriteFile(filePath, []byte(releaser.String()), os.ModePerm)
5778
if err != nil {
5879
return
5980
}
6081

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
6585

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+
}
7097
}
7198

7299
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{})
75102
if err != nil {
76103
return err
77104
}
78105

79-
_, err = openRepo.CreateTag(releaser.String(), commitHash, &git.CreateTagOptions{})
106+
_, err = gitRepo.CreateTag(releaser.String(), toTagHash, &git.CreateTagOptions{})
80107
if err != nil {
81108
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)
82109
return err
83110
}
84111
}
85112

86113
if c.Bool("push") {
87-
_, err := wt.Status()
114+
_, err := repoWt.Status()
88115
if err != nil {
89116
return err
90117
}
91118

92-
openRepo.Push(&git.PushOptions{
119+
gitRepo.Push(&git.PushOptions{
93120
RemoteName: "origin",
94121
Progress: os.Stdout,
95122
RefSpecs: []config.RefSpec{config.RefSpec("refs/tags/*:refs/tags/*")},

pkg/releaser.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ type version struct {
1616
}
1717

1818
type Releaser struct {
19-
raw string
20-
v version
21-
next version
19+
raw string
20+
v version
21+
next version
22+
preTag string
2223
}
2324

2425
func (r *Releaser) HasPrerelease() bool {
@@ -37,6 +38,7 @@ func (r *Releaser) String() (s string) {
3738
b.WriteString(strconv.Itoa(r.next.patch))
3839

3940
if len(r.next.preString) > 0 {
41+
b.Write([]byte("-"))
4042
b.Write([]byte(r.next.preString))
4143
}
4244

@@ -86,6 +88,8 @@ func CreateNewReleaser(vString string, mods ...ReleaserMod) (r *Releaser, err er
8688

8789
r.v.preString = semver.Prerelease(vString)
8890

91+
r.preTag = strings.Split(r.v.preString, ".")[0]
92+
8993
r.next.major = r.v.major
9094
r.next.minor = r.v.minor
9195
r.next.patch = r.v.patch
@@ -106,11 +110,24 @@ func WithPrerelease(pre string) ReleaserMod {
106110

107111
func WithPrereleaseIncrement() ReleaserMod {
108112
return func(r *Releaser) {
109-
preParts := strings.Split(r.v.preString, ".")
110-
prePointer, _ := strconv.Atoi(preParts[1])
111-
prePointer += 1
112-
preParts[1] = strconv.Itoa(prePointer)
113-
r.next.preString = strings.Join(preParts[:], ".")
113+
114+
// if a pre string already exists
115+
if len(r.v.preString) > 0 {
116+
preParts := strings.Split(r.v.preString, ".")
117+
prePointer, _ := strconv.Atoi(preParts[1])
118+
prePointer += 1
119+
preParts[1] = strconv.Itoa(prePointer)
120+
preParts[0] = r.preTag
121+
r.next.preString = strings.Join(preParts[:], ".")
122+
return
123+
}
124+
125+
preToCreate := []string{
126+
r.preTag,
127+
"0",
128+
}
129+
130+
r.next.preString = strings.Join(preToCreate[:], ".")
114131
}
115132
}
116133

@@ -164,3 +181,9 @@ func WithClearPrerelease() ReleaserMod {
164181
r.next.preString = ""
165182
}
166183
}
184+
185+
func WithPreTag(preTag string) ReleaserMod {
186+
return func(r *Releaser) {
187+
r.preTag = preTag
188+
}
189+
}

0 commit comments

Comments
 (0)