README
jira-cmd
A Jira command line interface based on jilla.
Its got tons of functionalities
- showing all jira assigned to you
- show all jira corresponding to custom JQL
- showing all jira with shortcut to custom JQL saved in config
- creating new jira
- creating new jira with shortcut that picks the default values for fields configured in config
- showing sprint details and sprint id for boards
- adding an issue to sprint
- adding multiple issues to a sprint in one go
- ability to use username alias shortcuts for commenting,assigning and adding watchers. It helps to not remember the usernames, just save their shortcuts in config.
Installation
Install node.js.
Then, in your shell type:
$ npm install -g jira-cmd
Usage
First use
$ jira
Jira URL: https://jira.atlassian.com/
Username: xxxxxx
Password: xxxxxx
Information stored!
This save your credentials (base64 encoded) in your $HOME/.jira
folder.
Help
Usage: jira.js [options] [command]
Commands:
ls [options] List my issues
start <issue> Start working on an issue.
stop <issue> Stop working on an issue.
review <issue> [assignee] Mark issue as being reviewed [by assignee(optional)].
done [options] <issue> Mark issue as finished.
running List issues in progress.
jql [options] <query> Run JQL query
link <from> <to> link issues
search <term> Find issues.
assign <issue> [user] Assign an issue to <user>. Provide only issue# to assign to me
watch <issue> [user] Watch an issue to <user>. Provide only issue# to watch to me
comment <issue> [text] Comment an issue.
show [options] <issue> Show info about an issue
open <issue> Open an issue in a browser
worklog <issue> Show worklog about an issue
worklogadd [options] <issue> <timeSpent> [comment] Log work for an issue
create [project[-issue]] Create an issue or a sub-task
config [options] Change configuration
sprint [options] Works with sprint boards
With no arguments, displays all rapid boards
With -r argument, attempt to find a single rapid board and display its active sprints
With both -r and -s arguments attempt to get a single rapidboard/ sprint and show its issues. If a single sprint board isnt found, show all matching sprint boards
Options:
-h, --help output usage information
-V, --version output the version number
Using Create
Usage: create [options] [project[-issue]]
Options:
-h, --help output usage information
-p, --project <project> Rapid board on which project is to be created
-P, --priority <priority> priority of the issue
-T --type <type> Issue type
-s --subtask <subtask> Issue subtask
-t --title <title> Issue title
-d --description <description> Issue description
-a --assignee <assignee> Issue assignee
Using jira new functionality
What does jira new offers
- if you make issues very frequently then you can save multiple templates of default values with a key to call with in ~/jira/config.json . then you just have to do jira new KEY1
"default_create" : {
<!-- fields which you want to prompt every time -->
<!-- whenever you create a new issue -->
"__always_ask" :{
"fields" :{
"description" :{}, <!-- description would be prompted everytime -->
"priority": {} <!-- priority would be prompted every time -->
}
},
<!-- you will do jira new KEY1 to use this template of default values -->
"KEY1" : {
"project": "YOUR_PROJECT", <!-- mandatory -->
"issueType": 3, <!-- mandatory -->
"default" : {
"components": [{
"id": "15226"
}],
"customfield_12901" : "infrastructure",
"customfield_10008" : "MDO-9584",
"customfield_12902": {
"id": "11237"
},
<!-- in this case, this customfield corresponds to cc-->
<!-- , so when creating new jira with this template-->
<!-- every iissue would have username prakhar in cc-->
"customfield_10901": [{ <!-- how to give usernames -->
"name": "prakhar"
}]
},
"quick" : { <!-- another template shortcut -->
},
"SOME_ALIAS" :{ <!-- yet another template shortcut -->
}
},
}
- Now there are 2 portions of
default_create
config__always_ask
: it contains the fields which would always be prompted when you create an issue. For eg. in above given json , whenever we'll create a new issue , description and priority would always be asked along with other mandatory fields for the board.- Rest of the keys in
default_create
are the shortcut keys which you will refer to while calling jira new key
Using jira edit functionality
This jira edit functionality is in beta phase and only few type of fields are allowed to be edited. currently only items of type strings are supported
- jira edit JRA-254
(0) Summary (1) Issue Type (2) Component/s (3) Dev Estimate (4) Description (5) Fix Version/s (6) Priority (7) Labels (8) Code Reviewer (9) Sprint (10) Epic Link (11) Attachment (12) Depn Team (13) CC (14) Due Date (15) Linked Issues (16) Comment (17) Assignee enter Input 7 labels Enter value testlabel1,testlabel2 Issue edited successfully!
```
to edit jira in non interactive mode, giving field to be edited and its values is possible.
- you first need to find the actual name of the field you want to edit. For this you can use the following url https://YOUR__JIRA__ENDPOINT/rest/api/2/issue/JRA-546/editmeta replace JRA-546 with the issue/type of issues you want to edit. Its sample output is given below
fields{ summary{…} issuetype{…} components{…} customfield_12000{…} description{…} fixVersions{…} priority{…} labels { requiredfalse schema{ type"array" items"string" system"labels" } name"Labels" autoCompleteUrl"https://jira.com….0/labels/suggest?query=" operations[…] } customfield_11600{…} customfield_10007{…} customfield_10008{…} attachment{…} customfield_11901{…} customfield_10901{…} duedate{…} issuelinks{…} comment{…} assignee{…} }
*
<kbd>jira edit JRA-254 "FIELD_NAME::FIELDVALUES"</kbd>
* Fieldnames can be hard to remember when using on command line, so you can save these field names in `~/.jira/config.json` . Suppose the response of edit meta is
``` json
fields {
summary {…}
issuetype {…}
components {…}
customfield_12000 {…}
description {…}
fixVersions {…}
priority {
required false
schema {
type "priority"
system "priority"
}
name "Priority"
operations […]
allowedValues {
0 {
self "https://jira.com/rest/api/2/priority/1"
iconUrl "https://jira.com…/priorities/critical.svg"
name "Highest"
id "1"
},
1 {
self "https://jira.com/rest/api/2/priority/2"
iconUrl "https://jira.com…cons/priorities/high.svg"
name "High"
id "2"
}
2 {,
self "https://jira.com/rest/api/2/priority/3"
iconUrl "https://jira.com…ns/priorities/medium.svg"
name "Medium"
id "3"
},
3 {
self "https://jira.com/rest/api/2/priority/4"
iconUrl "https://jira.com…icons/priorities/low.svg"
name "Low"
id "4"
},
4 {
self "https://jira.com/rest/api/2/priority/5"
iconUrl "https://jira.com…ns/priorities/lowest.svg"
name "Lowest"
id "5"
}
5 {…}
6 {…}
7 {…}
8 {…}
9 {…}
}
labels {…}
customfield_11600 {…}
customfield_10007 {…}
customfield_10008 {…}
attachment {…}
customfield_11901 {…}
customfield_10901 {…}
duedate {…}
issuelinks {…}
comment {…}
assignee {…}
}
```
* In above meta priority corresponds to CC field. So settign its default value in config.json would be
``` json
"edit_meta": {
"__default": { <!-- would work like "jira CART-2047 alias_for_high" would change the priority of task to high -->
"alias_for_high": {
"fields": {
"priority": {
"id": "2"
}
}
}
},
"sprint": {
"key": "customfield_10007"
},
"alias_for_label": { <!-- would work "jira edit CART-2047 alias_for_label::label1,label2" -->
"key": "labels",
"default": {
"test1": "t1,t2"
}
}
},
- entries in edit_meta are as follows
- __default : corresponds to raw put body we can put in config.json, which is passed as it is to the put call to jira edit api.
- Other keys at the level of __default are alias for fields which can be used as shortform for bigger named keys. Eg. jira edit JRA-546 "sprint::123" would first check alias for key sprint in
edit_meta
, if found it picks thekey
field from the alias. and makes a put call corresponding to the actual key that has been stored.- key : actual key to which call is made to edit
- default : if input value is not given corresponding to a key , for eg. jira edit JRA-354
alias_for_label
, then it picks this default key from config.json as though the input was given from commandline. It would act as if the command issued was jira edit JRA-354 "alias_for_label
::t1,t2"
- remember that enties in __default should be of form alias: {...actual json.. }
Jira mark functionality to mark a jira as done,blocked, invalid etc jira mark JRA-123
There are multiple other jira transitions beside done,invalid,start,stop etc which are directly supported as jira done JRA-123 or jira invalid JRA-786 etc.
Sometimes some jira do not change transition into these states directly due to defined workflow. They can go into certain states only from current state. In these cases or in general you can use jira mark functionality. It works as follows jira mark CART-2047