Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/novoid/jira2org-story.py

Extract Jira Issues and Generate Org-mode Headings
https://github.com/novoid/jira2org-story.py

jira jira-api orgdown orgmode personal-information-management pim

Last synced: about 2 months ago
JSON representation

Extract Jira Issues and Generate Org-mode Headings

Awesome Lists containing this project

README

        

* jira2org-story.py - Extract Jira Issues and Generate Org-mode Headings

This Python script fetches information of Jira issues and
returns an Org-mode representation of those issues in Org-mode format.
This Org-mode format is highly specific for my own purpose but you are
able to modify this structure to meet your requirements. Therefore,
this script works as a blueprint or template for you.

You can use one to many Jira issue numbers (for stories) as command
line parameter. If you use Jira issues that are Epics, all
corresponding stories are retrieved as well.

- Author: Karl Voit
- License: GPLv3 or higher
- Coding was started in May 2016

** Installation

1. Install Python version 2.x
2. Install Python Jira library via ~pip install jira~ or similar
3. Invoke the script via ~python ./jira2org-story.py~
4. Generate the file ~jiraconfig.py~
- similar to the template from the previous script output
- in the same directory as the other Python script
5. Re-start the script via ~python ./jira2org-story.py 1234~ and it
should give you a similar output as stated below

** Command Line Parameters

#+BEGIN_SRC sh :results output :wrap quote
python ./jira2org-story.py --help
#+END_SRC

#+BEGIN_src
usage: jira2org-story.py [-h] [--version] IPD [IPD ...]

This tool retrieves a Jira issue and returns an Org-mode
representation according to the system of Karl Voit.

The output is highly specific for my personal usage. If you want to have
a similar functionality, you have to adapt it to your needs. This would
require at least a search&replace of "IPD" with the Jira project ID of
your choice, all Jira URLs, and the custom org-mode link "ipd:1234".

positional arguments:
IPD One or many IPD numbers of stories or epics (without "IPD-"
prefix)

optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit

autor: Karl Voit
license: GPL v3 or any later version
URL: https://github.com/novoid/jira2org-story.py/
bugreports: via GitHub
version: Time-stamp: <2016-05-13 14:00:47 karl.voit>
#+END_src

** Motivation and Similar Projects

I work as a Product Owner in an agile Scrum process. To simplify my
digial life, I use Org-mode for almost everything there is.

For managing my scrum stories, I was using an Org-mode representation
long before I extracted things from Jira via scripts. I did not want
to change how I am using Org-mode for Jira stories.

This is why I do not use ready-to-use projects that mirror or
synchronize Jira with Org-mode:
- [[https://www.emacswiki.org/emacs/OrgJiraMode][Org Jira Mode]]
- [[https://github.com/baohaojun/org-jira][org-jira]]

** Example

Following headings are an example output when I call my script with
the parameter "1234" (as of 2016-05-14).

Usually, I do use babel to execute the script:

: #+BEGIN_SRC sh :results output raw :dir c:/Users/karl.voit/src/jira2org-story.py/
: c:/Users/karl.voit/src/jira2org-story.py/jira2org-story.py 1234
: #+END_SRC

Some remarks:

- Please note that I make use of task dependencies using TRIGGER and
BLOCKER properties according to [[http://orgmode.org/worg/org-contrib/org-depend.html][org-depend.el]].

- I did create a customized link so that "IPD:1234" links to its Jira
representative "https://product.infonova.at/jira/browse/IPD-1234".

- Usually, I manually do search&replace "i1234" with a human-readable
short version of the story title.

- You might wonder about the status "NEXT". I am using "TODO" to
define a task which will be of interest in future (but not now) and
"NEXT" for a task that can be done *now*.

This structure is in constant change as I add and remove things or
modify my Org-mode-related workflows.

: *** TODO [[IPD:1234]] This Is The Title Of The Story [0/7] :US_i1234:
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-Story-i1234
: :END:
:
: | [[IPD:1234][1234]] | This Is The Title Of The Story | Joe.Assignee |
:
: **** STARTED create Jira [[IPD:1234]]
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-i1234-create-jira-ipd
: :BLOCKER:
: :TRIGGER: 2016-05-14-i1234-define-champ(NEXT) 2016-05-14-i1234-estimation(NEXT)
: :END:
:
: - fill out:
: - [X] set reporter
: - [ ] set level red
: - [ ] fixVersion
:
: **** NEXT create Confluence page with template
: SCHEDULED: <2016-05-14>
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-i1234-create-confluence-page
: :BLOCKER:
: :TRIGGER: 2016-05-14-i1234-write-acceptance-criteria(NEXT)
: :END:
:
: - fill out:
: - [ ] add Jira-Link [[IPD:1234]]
: - [ ] PO
: - [ ] Title
: - [ ] Business Value
: - [ ] add Confluence-short-URL to story table above
:
: **** TODO write Acceptance Criteria, Docu, Perms
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-i1234-write-acceptance-criteria
: :BLOCKER: 2016-05-14-i1234-create-confluence-page
: :TRIGGER: 2016-05-14-i1234-confidence-green(NEXT) 2016-05-14-i1234-hand-over-team(NEXT)
: :END:
:
: **** TODO add Champ to Confluence and Jira :refinement:
: :PROPERTIES:
: :CATEGORY: refinement
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-i1234-define-champ
: :BLOCKER:
: :END:
:
: **** TODO get Estimation on [[IPD:1234]] :refinement:
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :CATEGORY: refinement
: :ID: 2016-05-14-i1234-estimation
: :BLOCKER: 2016-05-14-i1234-create-jira-ipd
: :TRIGGER:
: :END:
:
: - Estimation:
:
: **** TODO get confidence-level green on [[IPD:1234]] :refinement:
: :PROPERTIES:
: :CATEGORY: refinement
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-i1234-confidence-green
: :BLOCKER: 2016-05-14-i1234-write-acceptance-criteria 2016-05-14-i1234-estimation
: :TRIGGER:
: :END:
:
: **** TODO hand over to team
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :BLOCKER: 2016-05-14-i1234-write-acceptance-criteria 2016-05-14-i1234-estimation
: :ID: 2016-05-14-i1234-hand-over-team
: :TRIGGER: 2016-05-14-i1234-accept(WAITING) 2016-05-14-Story-i1234(TEAM)
: :END:
:
: **** acceptance + finish US
: :PROPERTIES:
: :CREATED: [2016-05-14 Sat 19:14]
: :ID: 2016-05-14-i1234-accept
: :BLOCKER: 2016-05-14-i1234-hand-over-team
: :TRIGGER: 2016-05-14-Story-i1234(DONE)
: :END: