JIRA To Omnifocus Script

This script logs into your JIRA and creates OmniFocus tasks for each of the JIRA items that are assigned to you, so they sync to your Omnifocus for iPhone, you only have to keep track of one inbox, etc. It only takes a tiny bit of setup.

Setting up

To set this up, do the following:

  1. Download the script and put it somewhere it will run
  2. Install the required gems (appscript, crypt, password) with gem install.
  3. Go to JIRA and create a saved filter with whatever settings you like. Note the filter ID.
  4. Go to the top of the jiratoomnifocus file and set it on the JIRA_FILTER_ID constant, and set the JIRA_BASE_URL to the URL of your JIRA installation.
  5. If you like to keep your system very secure, take a look at the security warning, below, at this time
  6. Run it. You will be asked to login the first time. After it's done, note the new tasks on your Omnifocus. Delete a task and run it again to see it add it again without asking you for authentication.

You're set up! Now you can put it on a cron line, like this one which sets it to run at office hours (use cron -e on Terminal for this):

0,10,20,30,40,50 7-18 * * * /yourdir/jiratoomnifocus > /yourdir//log/jira_to_omnifocus.log 2>&1

Congratulations! You now have only one inbox again. Let me know if you use it; I'd love to know of more ideas on how we can make it better/easier to setup.

Security Warning

The password for your JIRA account will be saved on a file on your computer called ~/.hackerdude/jira_credentials.yml. It is encrypted using blowfish using a constant key.

As long as both your jiratoomnifocus script and your credentials file are secured as (chmod 700 and owned by the user that will be running it on cron), you should be okay and secure (unless someone breaks into your account, in which case you have bigger problems than your JIRA access!). The crypt key used is a constant on the jiratoomnifocus script. Change the CRYPT_KEY key for any other random string of the same length and delete the jira_credentials.yml file (so it asks for your password again) and it will be recreated using your key the next time you start it.

Be Sociable, Share!

18 Comments

AlainApril 4th, 2009 at 11:47 am

Hi,

Thanks for publishing this script!

For me, it’s not really useful though, mainly for just one reason: When i move an issue from my omnifocus-inbox to a project, it will be reimportet by jiratoomnifocus next time it’s running, which leads to lots of duplicates.

If that’s resolved, it would help a lot :)
Alain

traneHeadApril 7th, 2009 at 12:15 am

Works for me. Had to install getopt also though.

Thanks a lot!

HackerdudeApril 7th, 2009 at 11:14 am

Ah, Alain was right. I just uploaded a new version on the same URL that does take into account tasks in other sections of the file. You can now move the task to the folder and it won’t add duplicates.

Thanks for trying it out, and let me know if there’s other features you want (patches also welcome).

AlainApril 11th, 2009 at 4:36 am

Hi Hackerdude,

thanks a lot for the patch, that was fast :)

I have later learned, that one can have default contexts in projects, so when dragged the issues to a project, i just set the context like this and i circumvented the duplicates. but now it’s even better! i will try it out right on.

What i’d really like if it would also set the estimated time and the due-date (if one is set in JIRA) :)

I did some playing around with getting updated tasks back to JIRA. For now, i am able to update the estimated time and the due date. in my setup i also set the context in omnifocus to the same string as the username in JIRA. Like this i am able to reassign issues in JIRA (I will publish the script hopefully within the next days). Of course this is quite specific, but it would be cool if the importer supports that as well :)

So far…
Alain

AlainApril 11th, 2009 at 11:27 pm

Here you find my script on how i did the updates of JIRA from within Omnifocus

Joe RamseyMay 15th, 2009 at 6:37 pm

Thanks so much or the great work. Alain I’m going to try your script out next. It would be nice to get these integrated. I’ll work on it a bit as well

I did have to download the getopt gem as well to get it to work

Dan BrickleyJanuary 26th, 2010 at 9:26 am

Ruby 1.9 seems unhappy…

/usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:47:in `|’: can’t convert String into Integer (TypeError)
from /usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:47:in `block (2 levels) in setup_blowfish’
from /usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:46:in `times’
from /usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:46:in `block in setup_blowfish’
from /usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:44:in `upto’
from /usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:44:in `setup_blowfish’
from /usr/local/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:27:in `initialize’

David MartinezMarch 22nd, 2010 at 1:55 pm

I depend on some libraries, so 1.9 compatibility depends on the libraries’ compatibility.

Crypt is not compatible with Ruby 1.9, but gem install crypt19 and it will get past that.

It looks like there’s also an appscript problem calling name.get on ruby1.9. May just be my install though. Using ruby 1.8.X seems to work correctly.

GerdOctober 24th, 2010 at 11:02 pm

Thanks David! Just working. I got the tip from Omni support because I asked for the integration.
Feature request (unfortunately I have no clue about Ruby): We have several projects in Jira. I set up a filter with my open tasks for all projects. So it would be perfect if there would be a chance to create the Omni-tasks in any kind of a project structure and not flat in the inbox. With this it would minimize manual work.
A tip for using: it took me a while to figure out the ID for the filter since it is not displayed anywhere on the Jira pages (at least i couldn’t find it). But just use the filter and look on the Jira URL in your browser. The “requestID” is what you want.

ZachJune 1st, 2011 at 11:56 pm

I had to “sudo gem install activesupport –version < 2" in order to get this to work on my 10.6.7 machine, if anyone else is struggling.

BenJuly 4th, 2011 at 1:26 pm

Ruby refuses to install Appscript for me. Could you tell me which Ruby implementation you’re using that was happy to run Appscript (Oneclick, MacRuby, default Ruby instance, etc…)?

Thanks

BenJuly 4th, 2011 at 4:59 pm

I will answer my own question: Use the OSX baked in Ruby support to get this working

ElliotAugust 25th, 2011 at 7:23 am

In case anyone else is trying to install this on Lion (with a fairly virgin install of Ruby…I’m not a Ruby developer)

sudo gem update –system
sudo env ARCHFLAGS=”-arch x86_64″ gem install appscript
sudo env ARCHFLAGS=”-arch x86_64″ gem install rb-appscript
sudo env ARCHFLAGS=”-arch x86_64″ gem install crypt
sudo env ARCHFLAGS=”-arch x86_64″ gem install password
sudo gem install getopt
sudo gem install activesupport -v ’2.0.2′

(that last line is required by the current version of the password gem, the latest version of active support (3) doesn’t seem to work with it.

This got the script working for me in 10.7.1
if you uncomment the line that reads “require ‘ruby-debug’” in an attempt to get more debug information, you will also need to run:

sudo gem install ruby-debug

ElliotAugust 25th, 2011 at 7:26 am

A note on the comment I added above, the gem update at the beginning has two dashes in front of the word system (all others in the instructions are just one dash)

I guess the comment system automatically changes a double dash into an em-dash (that dash looks a bit longer than the others)

BennSeptember 15th, 2011 at 2:23 pm

On snowleopard I had to downgrade to rubygems 1.5.3 to get this script to work, though I still can’t store my username and password without an error.

Also when I move a jira item out of my inbox and import again, duplicates of the items show up again in my inbox..

MikeNovember 30th, 2011 at 1:40 pm

Yeah this is working for me except for the fact that it adds tasks back to the inbox that were filed according to my organization system. that’s going to become a problem…

Alexander SorokinFebruary 1st, 2012 at 4:13 am

Hey guys, can you add a license to your code/changes? Something like Apache 2.0 or BSD would be ideal. I’d like to use the code, stick it on github and polish it a bit, but I can’t do that w/o a license. Thanks!

David MartinezMarch 27th, 2012 at 2:31 pm

Hi Alex,

Sorry about the delay on this. You can find the code on Github . I went ahead and gave it an Apache license. Thanks!

Leave a comment

Your comment