Skip to content

Instantly share code, notes, and snippets.

@wabson
Last active August 29, 2015 14:03
Show Gist options
  • Save wabson/cbf1e5fa42a48a848220 to your computer and use it in GitHub Desktop.
Save wabson/cbf1e5fa42a48a848220 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import getpass
import json
import sys
import urllib
import urllib2
#AUTOMATION_PLAN = "ALF-SHAREPO12" # Share-PO Tests > HEAD-BUG-FIX (Maven)
AUTOMATION_PLAN = "ALF-SHAREPO0" # Share-PO Tests > HEAD-BUG-FIX
BAMBOO_URL = "https://bamboo.alfresco.com/bamboo"
# create a password manager
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
def prepare_opener(username, password):
# Add the username and password.
# If we knew the realm, we could use it instead of None.
if username is not None and password is not None:
password_mgr.add_password(None, BAMBOO_URL, username, password)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
return urllib2.build_opener(handler)
def prompt_username():
input_value = raw_input("Enter Bamboo username: ")
return input_value
def prompt_password():
input_value = getpass.getpass("Enter Bamboo password: ")
return input_value
def load_json(opener, path, params=""):
url = "%s/rest/api/latest/%s.json?os_authType=basic&%s" % (BAMBOO_URL, path, params)
#print url
# TODO put an upper limit e.g. 3 on the number of retries allowed
while True:
try:
return json.loads(opener.open(url).read())
except urllib2.HTTPError, e:
if e.code == 401:
password_mgr.add_password(None, BAMBOO_URL, prompt_username(), prompt_password())
except Exception, e:
raise e
def main():
opener = prepare_opener(None, None)
plan_data = load_json(opener, "plan/%s" % (AUTOMATION_PLAN))
print plan_data['name']
page_size = 25
result_index = 0
is_green = False
parent_job = None # Name of the parent build when we have a green build
while True:
jobs_data = load_json(opener, "result/%s" % (AUTOMATION_PLAN), "start-index=%s" % (result_index))
result_index += page_size
if jobs_data['results']['size'] != page_size or len(jobs_data['results']['result']) == 0: # Seems we reached the last build in the list
print "No green builds were found"
break
for result in jobs_data['results']['result']:
if not is_green:
if result['state'] == 'Successful':
print 'Found successful build %s' % (result['key'])
is_green = True
if is_green:
job_data = load_json(opener, "result/%s" % (result['key']), "expand=metadata")
for item in job_data['metadata']['item']:
if item['key'] == 'dependency.parent.0':
parent_job = item['value']
break
if parent_job is not None:
break
if parent_job is not None:
print "Found successful parent job %s" % (parent_job)
job_data = load_json(opener, "result/%s" % (parent_job))
print 'Revision r%s' % (job_data['vcsRevisionKey'])
break
try:
main()
except (KeyboardInterrupt, SystemExit):
print 'Interruped'
sys.exit(1)
except:
raise
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment