Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions internal/cmd/epic/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ func create(cmd *cobra.Command, _ []string) {
Components: params.Components,
FixVersions: params.FixVersions,
AffectsVersions: params.AffectsVersions,
DueDate: params.DueDate,
CustomFields: params.CustomFields,
EpicField: viper.GetString("epic.name"),
}
Expand Down Expand Up @@ -235,6 +236,10 @@ func parseFlags(flags query.FlagParser) *cmdcommon.CreateParams {
affectsVersions, err := flags.GetStringArray("affects-version")
cmdutil.ExitIfError(err)

dueDate, err := flags.GetString("due-date")
cmdutil.ExitIfError(err)
cmdutil.ExitIfError(cmdcommon.ValidateDueDate(dueDate))

custom, err := flags.GetStringToString("custom")
cmdutil.ExitIfError(err)

Expand All @@ -258,6 +263,7 @@ func parseFlags(flags query.FlagParser) *cmdcommon.CreateParams {
Components: components,
FixVersions: fixVersions,
AffectsVersions: affectsVersions,
DueDate: dueDate,
CustomFields: custom,
Template: template,
NoInput: noInput,
Expand Down
6 changes: 6 additions & 0 deletions internal/cmd/issue/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ func create(cmd *cobra.Command, _ []string) {
FixVersions: params.FixVersions,
AffectsVersions: params.AffectsVersions,
OriginalEstimate: params.OriginalEstimate,
DueDate: params.DueDate,
CustomFields: params.CustomFields,
EpicField: viper.GetString("epic.link"),
}
Expand Down Expand Up @@ -367,6 +368,10 @@ func parseFlags(flags query.FlagParser) *cmdcommon.CreateParams {
originalEstimate, err := flags.GetString("original-estimate")
cmdutil.ExitIfError(err)

dueDate, err := flags.GetString("due-date")
cmdutil.ExitIfError(err)
cmdutil.ExitIfError(cmdcommon.ValidateDueDate(dueDate))

custom, err := flags.GetStringToString("custom")
cmdutil.ExitIfError(err)

Expand All @@ -392,6 +397,7 @@ func parseFlags(flags query.FlagParser) *cmdcommon.CreateParams {
FixVersions: fixVersions,
AffectsVersions: affectsVersions,
OriginalEstimate: originalEstimate,
DueDate: dueDate,
CustomFields: custom,
Template: template,
NoInput: noInput,
Expand Down
15 changes: 15 additions & 0 deletions internal/cmdcommon/create.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package cmdcommon

import (
"fmt"
"strings"
"time"

"github.com/AlecAivazis/survey/v2"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -36,6 +38,7 @@ type CreateParams struct {
FixVersions []string
AffectsVersions []string
OriginalEstimate string
DueDate string
CustomFields map[string]string
Template string
NoInput bool
Expand Down Expand Up @@ -65,6 +68,7 @@ And, this field is mandatory when creating a sub-task.`)
cmd.Flags().StringArray("fix-version", []string{}, "Release info (fixVersions)")
cmd.Flags().StringArray("affects-version", []string{}, "Release info (affectsVersions)")
cmd.Flags().StringP("original-estimate", "e", "", prefix+" Original estimate")
cmd.Flags().String("due-date", "", prefix+" due date (format: YYYY-MM-DD)")
cmd.Flags().StringToString("custom", custom, "Set custom fields")
cmd.Flags().StringP("template", "T", "", "Path to a file to read body/description from")
cmd.Flags().Bool("web", false, "Open in web browser after successful creation")
Expand Down Expand Up @@ -239,6 +243,17 @@ func GetConfiguredCustomFields() ([]jira.IssueTypeField, error) {
return configuredFields, nil
}

// ValidateDueDate validates that the due date is in YYYY-MM-DD format.
func ValidateDueDate(dueDate string) error {
if dueDate == "" {
return nil
}
if _, err := time.Parse("2006-01-02", dueDate); err != nil {
return fmt.Errorf("invalid due date %q: expected format YYYY-MM-DD", dueDate)
}
return nil
}

// ValidateCustomFields validates custom fields.
// TODO: Fail with error instead of warning in future release.
func ValidateCustomFields(fields map[string]string, configuredFields []jira.IssueTypeField) {
Expand Down
4 changes: 3 additions & 1 deletion pkg/jira/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ type CreateRequest struct {
FixVersions []string
AffectsVersions []string
OriginalEstimate string
DueDate string
// EpicField is the dynamic epic field name
// that changes per jira installation.
EpicField string
Expand Down Expand Up @@ -132,6 +133,7 @@ func (*Client) getRequestData(req *CreateRequest) *createRequest {
Name: req.Name,
Summary: req.Summary,
Labels: req.Labels,
DueDate: req.DueDate,
epicField: req.EpicField,
}

Expand Down Expand Up @@ -221,7 +223,6 @@ func (*Client) getRequestData(req *CreateRequest) *createRequest {
OriginalEstimate string `json:"originalEstimate,omitempty"`
}{OriginalEstimate: req.OriginalEstimate}
}

constructCustomFields(req.CustomFields, req.configuredCustomFields, &data)

return &data
Expand Down Expand Up @@ -313,6 +314,7 @@ type createFields struct {
TimeTracking *struct {
OriginalEstimate string `json:"originalEstimate,omitempty"`
} `json:"timetracking,omitempty"`
DueDate string `json:"duedate,omitempty"`
epicField string
customFields customField
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/jira/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestCreate(t *testing.T) {
expectedBody := `{"update":{},"fields":{"project":{"key":"TEST"},"issuetype":{"name":"Bug"},` +
`"summary":"Test bug","description":"Test description","priority":{"name":"Normal"},"labels":["test","dev"],` +
`"components":[{"name":"BE"},{"name":"FE"}],"fixVersions":[{"name":"v2.0"},{"name":"v2.1-hotfix"}],"versions":[{"name":"v3.0"},{"name":"v3.1-hotfix"}],` +
`"timetracking":{"originalEstimate":"2d"}}}`
`"timetracking":{"originalEstimate":"2d"},"duedate":"2006-01-02"}}`
testServer := createTestServer{code: 201}
server := testServer.serve(t, expectedBody)
defer server.Close()
Expand All @@ -65,6 +65,7 @@ func TestCreate(t *testing.T) {
FixVersions: []string{"v2.0", "v2.1-hotfix"},
AffectsVersions: []string{"v3.0", "v3.1-hotfix"},
OriginalEstimate: "2d",
DueDate: "2006-01-02",
}
actual, err := client.CreateV2(&requestData)
assert.NoError(t, err)
Expand Down