Skip to content
This repository was archived by the owner on Jul 19, 2025. It is now read-only.

Commit 975388f

Browse files
committed
feat: dry-run option
1 parent 81e85fa commit 975388f

File tree

2 files changed

+62
-15
lines changed

2 files changed

+62
-15
lines changed

cmd/jira-versioner/main.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func init() {
3737
rootCmd.Flags().StringP("jira-project", "p", "", "Jira project, it has to be ID, example: 10003")
3838
rootCmd.Flags().StringP("jira-base-url", "u", "", "Jira service base url, example: https://example.atlassian.net")
3939
rootCmd.Flags().StringP("dir", "d", pwd, "Absolute directory path to git repository")
40+
rootCmd.Flags().BoolP("dry-run", "", false, "Enable dry run mode")
4041
rootCmd.MarkFlagRequired("tag")
4142
rootCmd.MarkFlagRequired("jira-email")
4243
rootCmd.MarkFlagRequired("jira-token")
@@ -52,6 +53,7 @@ func main() {
5253

5354
func rootFunc(c *cobra.Command, args []string) {
5455
log := zap.NewExample().Sugar()
56+
dryRun := false
5557
defer log.Sync()
5658

5759
tag := c.Flag("tag").Value.String()
@@ -65,8 +67,23 @@ func rootFunc(c *cobra.Command, args []string) {
6567
jiraToken := c.Flag("jira-token").Value.String()
6668
jiraProject := c.Flag("jira-project").Value.String()
6769
jiraBaseUrl := c.Flag("jira-base-url").Value.String()
70+
dryRunRaw := c.Flag("dry-run").Value.String()
71+
if dryRunRaw == "true" {
72+
dryRun = true
73+
}
6874
gitDir := c.Flag("dir").Value.String()
69-
log.Debugf("[JIRA-VERSIONER] starting with params jira-email: %s, jira-token: %s, jira-project: %s, jira-base-url: %s, dir: %s, tag: %s, jira-version: %s", jiraEmail, jiraToken, jiraProject, jiraBaseUrl, gitDir, tag, version)
75+
76+
log.Debugf(
77+
"[JIRA-VERSIONER] starting with params jira-email: %s, jira-token: %s, jira-project: %s, jira-base-url: %s, dir: %s, tag: %s, jira-version: %s, dry-run: %t",
78+
jiraEmail,
79+
jiraToken,
80+
jiraProject,
81+
jiraBaseUrl,
82+
gitDir,
83+
tag,
84+
version,
85+
dryRun,
86+
)
7087
log.Infof("[JIRA-VERSIONER] git directory: %s", gitDir)
7188

7289
g := git.New(gitDir, log)
@@ -76,7 +93,15 @@ func rootFunc(c *cobra.Command, args []string) {
7693
log.Fatalf("[GIT] error while getting tasks since latest commit %+v", err)
7794
}
7895

79-
j, err := jira.New(jiraEmail, jiraToken, jiraProject, jiraBaseUrl, log)
96+
var jiraConfig = jira.NewConfig{
97+
Username: jiraEmail,
98+
Token: jiraToken,
99+
ProjectID: jiraProject,
100+
BaseURL: jiraBaseUrl,
101+
Log: log,
102+
DryRun: dryRun,
103+
}
104+
j, err := jira.New(jiraConfig)
80105
if err != nil {
81106
log.Fatalf("[VERSION] error while connecting to jira server %+v", err)
82107
}

pkg/jira/jira.go

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type Jira struct {
1717
ProjectID string
1818
Version *jira.Version
1919
log pslog.Logger
20+
dryRun bool
2021
}
2122

2223
type UpdatePayload struct {
@@ -33,24 +34,34 @@ type IdVersion struct {
3334
Id string `json:"id"`
3435
}
3536

36-
// New creates Jira instance with all required details like email, token, base url
37-
func New(email, token, projectId, baseUrl string, log pslog.Logger) (Jira, error) {
37+
type NewConfig struct {
38+
Username string
39+
Token string
40+
ProjectID string
41+
BaseURL string
42+
Log pslog.Logger
43+
DryRun bool
44+
}
45+
46+
// New creates Jira instance with all required details like email, Token, base url
47+
func New(config NewConfig) (Jira, error) {
3848
j := Jira{
39-
log: log,
49+
log: config.Log,
50+
dryRun: config.DryRun,
4051
}
4152
tp := jira.BasicAuthTransport{
42-
Username: email,
43-
Password: token,
53+
Username: config.Username,
54+
Password: config.Token,
4455
}
4556

46-
client, err := jira.NewClient(tp.Client(), baseUrl)
57+
client, err := jira.NewClient(tp.Client(), config.BaseURL)
4758
if err != nil {
4859
return j, err
4960
}
5061

5162
j.Client = client
5263

53-
_, err = j.getProject(projectId)
64+
_, err = j.getProject(config.ProjectID)
5465
if err != nil {
5566
return j, err
5667
}
@@ -116,12 +127,15 @@ func (j *Jira) CreateVersion(name string) (*jira.Version, error) {
116127
// TODO: put task ids into description
117128
Description: "",
118129
}
119-
version, _, err = j.Client.Version.Create(v)
120-
if err != nil {
121-
return v, err
130+
131+
if !j.dryRun {
132+
v, _, err = j.Client.Version.Create(v)
133+
if err != nil {
134+
return v, err
135+
}
122136
}
123137

124-
j.Version = version
138+
j.Version = v
125139

126140
j.log.Infof("[JIRA] version created %s", j.Version.Name)
127141

@@ -142,6 +156,7 @@ func (j Jira) LinkTasksToVersion(taskIds []string) {
142156

143157
// SetIssueVersion makes http request to Jira service to update task with fixed version
144158
func (j Jira) SetIssueVersion(taskID string) error {
159+
var res *jira.Response
145160
p := UpdatePayload{
146161
Update: UpdateTypePayload{
147162
FixVersions: []AddFixedVersion{
@@ -155,9 +170,16 @@ func (j Jira) SetIssueVersion(taskID string) error {
155170
}
156171

157172
j.log.Debugf("[JIRA] setting version %s for task %s", j.Version.Name, taskID)
158-
req, _ := j.Client.NewRequest("PUT", "/rest/api/2/issue/"+taskID, p)
173+
req, err := j.Client.NewRequest("PUT", "/rest/api/2/issue/"+taskID, p)
174+
if err != nil {
175+
return errors.Wrapf(err, "can't create Jira request to %s", "/rest/api/2/issue/"+taskID)
176+
}
159177
req.Header.Add("Content-Type", "application/json;charset=UTF-8")
160-
res, err := j.Client.Do(req, nil)
178+
179+
if !j.dryRun {
180+
res, err = j.Client.Do(req, nil)
181+
}
182+
161183
if err != nil {
162184
body, readErr := ioutil.ReadAll(res.Body)
163185
if readErr != nil {

0 commit comments

Comments
 (0)