1
0
mirror of https://github.com/strongdm/comply synced 2024-11-22 07:34:54 +00:00

Specifying Jira Issuetype in config.yaml (#53)

* Jira integration documentation improved. Added ability to specify what type of issue to create in Jira

* Apparently, Go doesn't like http/https in front of package name in
This commit is contained in:
Alan Cox 2018-08-29 18:17:00 -04:00 committed by Justin McCarthy
parent 8f3d668789
commit bcc9b06ac4
4 changed files with 37 additions and 4 deletions

View File

@ -82,12 +82,28 @@ COMMANDS:
- Github - Github
- Gitlab - Gitlab
## Configuring Jira
When comply creates a ticket (through `proc`, for instance), it sets the following fields.
- assignee
- description
- issuetype
- labels
- project key
- reporter
- summary
Please make sure that the default *Create Screen* has all of those fields enabled. Additionally, make sure that there are no other required fields for the issue type you choose.
## Forking and local development ## Forking and local development
> Assumes installation of golang and configuration of GOPATH in .bash_profile, .zshrc, etc > Assumes installation of golang and configuration of GOPATH in .bash_profile, .zshrc, etc
> Inspiration: http://code.openark.org/blog/development/forking-golang-repositories-on-github-and-managing-the-import-path > Inspiration: http://code.openark.org/blog/development/forking-golang-repositories-on-github-and-managing-the-import-path
``` ```
$ go get http://github.com/strongdm/comply $ go get github.com/strongdm/comply
$ cd $GOPATH/src/github.com/strongdm/comply ; go get ./... $ cd $GOPATH/src/github.com/strongdm/comply ; go get ./...
$ make $ make
$ cd example $ cd example

View File

@ -5,6 +5,14 @@ tickets:
token: XXX token: XXX
username: strongdm username: strongdm
repo: comply repo: comply
# jira:
# username: xxxx # This is the username you log in to Jira's UI with. Probably your email address.
# password: xxxx # If you don't have a "managed account", use your password in this field. But if your organization
# # uses SAML or OAuth, or Jira's built-in multi-factor authentication, you need to use
# # an API token. Learn more here: https://confluence.atlassian.com/cloud/api-tokens-938839638.html
# project: comply
# url: https://yourjira
# taskType: Task # This must be an Issue, not a sub-task
# gitlab: # gitlab:
# domain: https://gitlab.example.com:443/ # or https://gitlab.com/ # domain: https://gitlab.example.com:443/ # or https://gitlab.com/
# token: token-here # token: token-here

View File

@ -16,6 +16,7 @@ const (
cfgPassword = "password" cfgPassword = "password"
cfgURL = "url" cfgURL = "url"
cfgProject = "project" cfgProject = "project"
cfgTaskType = "taskType"
) )
var prompts = map[string]string{ var prompts = map[string]string{
@ -23,6 +24,7 @@ var prompts = map[string]string{
cfgPassword: "Jira Password", cfgPassword: "Jira Password",
cfgURL: "Jira URL", cfgURL: "Jira URL",
cfgProject: "Jira Project Code", cfgProject: "Jira Project Code",
cfgTaskType: "Jira Task Type",
} }
// Prompts are human-readable configuration element names // Prompts are human-readable configuration element names
@ -40,6 +42,7 @@ type jiraPlugin struct {
password string password string
url string url string
project string project string
taskType string
clientMu sync.Mutex clientMu sync.Mutex
client *jira.Client client *jira.Client
@ -66,7 +69,7 @@ func (j *jiraPlugin) Get(ID string) (*model.Ticket, error) {
} }
func (j *jiraPlugin) Configured() bool { func (j *jiraPlugin) Configured() bool {
return j.username != "" && j.password != "" && j.url != "" && j.project != "" return j.username != "" && j.password != "" && j.url != "" && j.project != "" && j.taskType != ""
} }
func (j *jiraPlugin) Links() model.TicketLinks { func (j *jiraPlugin) Links() model.TicketLinks {
@ -93,6 +96,9 @@ func (j *jiraPlugin) Configure(cfg map[string]interface{}) error {
if j.project, err = getCfg(cfg, cfgProject); err != nil { if j.project, err = getCfg(cfg, cfgProject); err != nil {
return err return err
} }
if j.taskType, err = getCfg(cfg, cfgTaskType); err != nil {
return err
}
return nil return nil
} }
@ -134,7 +140,7 @@ func (j *jiraPlugin) Create(ticket *model.Ticket, labels []string) error {
i := jira.Issue{ i := jira.Issue{
Fields: &jira.IssueFields{ Fields: &jira.IssueFields{
Type: jira.IssueType{ Type: jira.IssueType{
Name: "Task", Name: j.taskType,
}, },
Project: jira.Project{ Project: jira.Project{
Key: j.project, Key: j.project,

View File

@ -87,7 +87,10 @@ func GetPlugin(ts TicketSystem) TicketPlugin {
} }
cfgStringed[kS] = v cfgStringed[kS] = v
} }
tp.Configure(cfgStringed) err := tp.Configure(cfgStringed)
if( err != nil) {
panic(fmt.Sprintf("Configuration error `%s` in project YAML", err))
}
} }
}) })
} }