Skip to content

Instantly share code, notes, and snippets.

@gimmi
Created January 19, 2023 15:01
Show Gist options
  • Save gimmi/9ca961524c3509bd56ae4f5014269f7f to your computer and use it in GitHub Desktop.
Save gimmi/9ca961524c3509bd56ae4f5014269f7f to your computer and use it in GitHub Desktop.
AzureDevOps
import urllib.request, json, base64
class DevOps:
def __init__(self, personal_access_token, organization, project):
self.personal_access_token = personal_access_token
self.organization = organization
self.project = project
def build_auth_header(self):
username = ''
password = self.personal_access_token
authorization = f'{username}:{password}'.encode('ascii')
authorization = base64.b64encode(authorization).decode('ascii')
return f'Basic {authorization}'
def get_json(self, path, query):
query = '&'.join([f'{key}={val}' for key, val in query.items()])
url = f'https://dev.azure.com/{self.organization}/{self.project}/_apis{path}?{query}'
req = urllib.request.Request(url, headers={
'Accept': 'application/json',
'Authorization': self.build_auth_header(),
})
with urllib.request.urlopen(req) as res:
return json.load(res)
def get_last_succesful_build(self, definition_id, branch_name):
data = self.get_json('/build/builds', {
'api-version': '6.1-preview.7',
'definitions': definition_id,
'resultFilter': 'succeeded',
'queryOrder': 'finishTimeDescending',
'branchName': branch_name,
'$top': '1',
})
return next(iter(data['value']), None)
dev_ops = DevOps(
'rii26omm2mphgoxnety3ou4ocyd537i63o46q6ofg6mstjsm6bfa',
'tetrapak-tpps',
'NGPLConfigurations',
)
data = dev_ops.get_last_succesful_build(2446, 'refs/heads/master')
print(json.dumps(data, indent=2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment