Skip to content

Instantly share code, notes, and snippets.

@sordina
Last active August 29, 2015 14:04
Show Gist options
  • Save sordina/3c1f90980eeaedcc89ef to your computer and use it in GitHub Desktop.
Save sordina/3c1f90980eeaedcc89ef to your computer and use it in GitHub Desktop.
#!/bin/bash
PREFIX="/tmp/rally_scripts"
ITEM_JSON="$PREFIX/rally_$$.json"
CHILDREN_JSON="$PREFIX/rally_$$_children.json"
TASKS_JSON="$PREFIX/rally_$$_tasks.json"
AUTH="-u $USERNAME:$PASSWORD"
mkdir -p "$PREFIX"
INDENT="$1"
REF="$2"
if [ ! $2 ]
then
INDENT="0"
REF="$1"
fi
I="$HOME/bin/indent $INDENT"
if [[ ! $(echo "$REF" | egrep '/') ]]
then
REF="https://rally1.rallydev.com/slm/webservice/v2.0/portfolioitem/initiative/$REF"
echo "Expanding URL to $REF" 1>&2
fi
curl -s $AUTH "$REF" > $ITEM_JSON
NAME=` jq '.[] | .Name' < $ITEM_JSON`
ID=` jq '.[] | .FormattedID' < $ITEM_JSON`
TYPE=` jq '.[] | .PortfolioItemType._refObjectName' < $ITEM_JSON`
OWNER=` jq '.[] | .Owner._refObjectName' < $ITEM_JSON | grep -v null`
CHILDREN_COUNT=`jq '.[] | .DirectChildrenCount' < $ITEM_JSON`
TASK_COUNT=` jq '.[] | .Tasks.Count' < $ITEM_JSON | grep -v null`
REMAINING=` jq -c '.[] | "\\(.TaskRemainingTotal)/\\(.TaskEstimateTotal)"' < $ITEM_JSON | grep -v null | grep -v '0/0'`
SCHEDULE=` jq '.[] | .ScheduleState' < $ITEM_JSON | grep -v null`
STATE=` jq '.[] | .State' < $ITEM_JSON | grep -v null`
ESTIMATE=` jq '.[] | .PlanEstimate' < $ITEM_JSON | grep -v null`
RELEASE=` jq '.[] | .Release._refObjectName' < $ITEM_JSON | grep -v null`
ITERATION=` jq '.[] | .Iteration._refObjectName' < $ITEM_JSON | grep -v null`
c_StoryLifecycleICTArch=`jq '.[] | .c_StoryTypeLifecycleICTArch' < $ITEM_JSON | grep -v 'null'`
c_StoryLifecycleIPDS=` jq '.[] | .c_StoryLifecycleIPDS ' < $ITEM_JSON | grep -v 'null'`
c_StoryLifecycleModel1=` jq '.[] | .c_StoryLifecycleModel1 ' < $ITEM_JSON | grep -v 'null'`
c_StoryLifecycleModel2=` jq '.[] | .c_StoryLifecycleModel2 ' < $ITEM_JSON | grep -v 'null'`
c_StoryLifecycleModel3=` jq '.[] | .c_StoryLifecycleModel3 ' < $ITEM_JSON | grep -v 'null'`
c_StoryLifecycleModel4=` jq '.[] | .c_StoryLifecycleModel4 ' < $ITEM_JSON | grep -v 'null'`
c_StoryLifecycleSupport=`jq '.[] | .c_StoryLifecycleSupport ' < $ITEM_JSON | grep -v 'null'`
STATUS=`echo $SCHEDULE $STATE | grep -v ':'`
LIFECYCLE=`echo $c_StoryLifecycleICTArch $c_StoryLifecycleIPDS $c_StoryLifecycleModel1 $c_StoryLifecycleModel2 $c_StoryLifecycleModel3 $c_StoryLifecycleModel4 $c_StoryLifecycleSupport`
LINK="https://rally1.rallydev.com/#/search?keywords=$ID"
if [ "$TYPE" == "null" ]; then TYPE=`jq '.[] | .c_StoryType' < $ITEM_JSON`; fi
if [ "$TYPE" == "null" ]; then TYPE=`echo $REF | sed 's#.*/\([^/]*\)/[^/]*$#\1#'`; fi
echo "$ID | $TYPE | $ESTIMATE | $OWNER | $STATUS | $LIFECYCLE | $RELEASE | $ITERATION | $NAME | $LINK" | $I
# Tasks
if [[ "$TASK_COUNT" -gt "0" ]]
then
TASKS_REF=`jq '.[] | .Tasks._ref' < $ITEM_JSON | xargs echo`
curl -s $AUTH "$TASKS_REF?&pagesize=100" > $TASKS_JSON
jq '.QueryResult.Results[] | ._ref' < $TASKS_JSON | xargs -n 1 echo | parallel --no-notice rally-initiative `echo $INDENT + 1 | bc` {}
fi
# Children
if [[ "$CHILDREN_COUNT" -gt "0" ]]
then
CHILDREN_REF=`jq '.[] | .Children._ref' < $ITEM_JSON | xargs echo`
if [ "$CHILDREN_REF" == "null" ]; then CHILDREN_REF=`jq '.[] | .UserStories._ref' < $ITEM_JSON | xargs echo`; fi
curl -s $AUTH "$CHILDREN_REF?&pagesize=100" > $CHILDREN_JSON
jq '.QueryResult.Results[] | ._ref' < $CHILDREN_JSON | xargs -n 1 echo | parallel --no-notice rally-initiative `echo $INDENT + 1 | bc` {}
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment