def main(): requests.packages.urllib3.disable_warnings() in_file = open("./kiln_base_url.txt", "r") base_url = in_file.read().replace('\n', '') in_file.close() anvil = Anvil(base_url, False) anvil.create_session_by_prompting() repo_indices = set() out_file = open("./kiln_repoList.txt", "w") for project in anvil.get_projects(): for repo_group in project.repo_groups: for repo in repo_group.repos: if not repo.index in repo_indices: repo_indices.add(repo.index) prj_indx = str(project.index) grp_indx = str(repo_group.index) rep_indx = str(repo.index) prj_name = project.name grp_name = repo_group.name rep_name = repo.name prj_slug = repo.project_slug grp_slug = repo.group_slug or 'Group' rep_slug = repo.slug url = base_url + '/Code/' + prj_slug + '/' + grp_slug + '/' + rep_slug indexes = prj_indx + ',' + grp_indx + ',' + rep_indx names = prj_name + ',' + grp_name + ',' + rep_name out_file.write(url + "," + indexes + "," + names + ',' + rep_name + "\n") out_file.close()
def main(): requests.packages.urllib3.disable_warnings() in_file = open("./kiln_base_url.txt", "r") base_url = in_file.read().replace('\n', '') in_file.close() anvil = Anvil(base_url, False) anvil.create_session_by_prompting() out_file = open("./credentials_kiln_api_token.txt", "w") out_file.write(str(anvil.token)) out_file.close()
def main(): anvil = Anvil("spectrum") anvil.create_session_by_prompting() print "collecting related changesets" changesets = find_changesets_for_authors( anvil, ['Paul Osborne', ], datetime.datetime(2009, 1, 1)).values()[0] commit_hour = [times.to_local(c.date_time, 'US/Central').hour for c in changesets] pp.hist(commit_hour, 24) a = pp.gca() a.set_xlim([0, 23]) pp.show()
def main(): anvil = Anvil("spectrum") anvil.create_session_by_prompting() print "collecting related changesets" changesets = find_changesets_for_authors( anvil, ['Paul Osborne', ], datetime.datetime(2009, 1, 1)).values()[0] commit_dts = [c.date_time for c in changesets] commit_month = [_normalize_to_month(dt) for dt in commit_dts] months = list(set(commit_month)) values = [commit_month.count(m) for m in months] pp.bar(months, values, width=20) pp.show() import code code.interact(local=locals())
def main(): anvil = Anvil("spectrum") anvil.create_session_by_prompting() print "collecting related changesets" changesets_by_author = find_changesets_for_authors(anvil, AUTHORS, START_DT) for author, changesets in changesets_by_author.items(): changesets = [c for c in changesets if c.date_time > datetime.datetime(2011, 11, 1, 1, 1, 1)] eligible = [c for c in changesets if (not c.is_merge() and not c.is_tag_changeset())] linked = [c for c in eligible if c.is_linked()] print "=== %s ===" % author print " Total Changesets: %s" % len(changesets) print " Total Elibigle: %s" % len(eligible) print " Total Linked: %s" % len(linked) percentage_linked = (float(len(linked)) / len(eligible)) * 100 print " Percentage Linked: %0.2f" % percentage_linked print "\n"
def __init__(self, project_name, repo_url,stage,job_type=None, version=None): self.name = project_name if version != None: self.PROJECT = project_name + '_' + version self.VERSION = version else: self.PROJECT = project_name self.VERSION = None self.REPO_URL = repo_url self.STAGE = stage self.job_type=job_type c = EmploymentConfig('employment.conf') self.TEST_SCRIPT = c.getJenkinsScript('test') self.PACKAGE_SCRIPT = c.getJenkinsScript('package') self.UPLOAD_SCRIPT = c.getJenkinsScript('upload') self.JENKINS_URL = c.getJenkinsURL() self.PKG_prefix = c.getPacakgePrefix() self.KILN_PREFIX = c.getKilnPrefix() self.KILN_USERNAME = c.getKilnUsername() self.KILN_PASSWORD = c.getKilnPassword() self.k = Anvil(self.KILN_PREFIX) self.k.create_session(self.KILN_USERNAME, self.KILN_PASSWORD) self.EMAIL_TO = c.getJenkinsEmail() if self.job_type == 'package': if self.STAGE == 'dev': self.JENKINS_STRING = self.PKG_prefix + "_" + project_name + "_" + self.VERSION else: self.JENKINS_STRING = self.PKG_prefix + "_" + project_name else: if self.STAGE == 'dev': self.JENKINS_STRING = project_name + "_" + self.VERSION else: self.JENKINS_STRING = project_name if self.STAGE == 'dev': self.KILN_STRING = project_name + "_" + self.VERSION else: self.KILN_STRING = project_name
def __init__(self, stage, job_type=None, version=None): c = EmploymentConfig('employment.conf') self.JENKINS_URL=c.getJenkinsURL() self.KILN_PREFIX = c.getKilnPrefix() self.JOB_TYPE = job_type self.STAGE = stage self.VERSION = version c = EmploymentConfig('employment.conf') self.KILN_PREFIX = c.getKilnPrefix() self.KILN_USERNAME = c.getKilnUsername() self.KILN_PASSWORD = c.getKilnPassword() self.k = Anvil(self.KILN_PREFIX) self.k.create_session(self.KILN_USERNAME, self.KILN_PASSWORD) #self.k.create_session_by_prompting() group1 = c.getGroupProjects('group1') self.group1name = c.getGroupName('group1') group2 = c.getGroupProjects('group2') self.group2name = c.getGroupName('group2') self.app_groups = [group1, group2]
def main(): anvil = Anvil("spectrum") anvil.create_session_by_prompting() res = anvil.get_json("/Repo/68219") repo = KilnRepo.from_json(anvil, res) subrepos = repo.where_used()
class JobChunks(object): ''' Represents a group of projects that exist in our repo and are being created in Jenkins. These groups vary by environment and depending on if they are for packaging. For instance, if the repo has a _version at the end it's a dev environment. Similarly, if the job is for packaging it will be created accordingly. ''' def __init__(self, stage, job_type=None, version=None): c = EmploymentConfig('employment.conf') self.JENKINS_URL=c.getJenkinsURL() self.KILN_PREFIX = c.getKilnPrefix() self.JOB_TYPE = job_type self.STAGE = stage self.VERSION = version c = EmploymentConfig('employment.conf') self.KILN_PREFIX = c.getKilnPrefix() self.KILN_USERNAME = c.getKilnUsername() self.KILN_PASSWORD = c.getKilnPassword() self.k = Anvil(self.KILN_PREFIX) self.k.create_session(self.KILN_USERNAME, self.KILN_PASSWORD) #self.k.create_session_by_prompting() group1 = c.getGroupProjects('group1') self.group1name = c.getGroupName('group1') group2 = c.getGroupProjects('group2') self.group2name = c.getGroupName('group2') self.app_groups = [group1, group2] def _jenkins_connect(self): ''' Create a object holding a connection to jenkins. Assign this function to a variable. Ex. j = _jenkins_connect() ''' return Jenkins(self.JENKINS_URL) def _build_project_string(self, app_name): ''' Build the project string. Should this just be a variable? ''' if self.JOB_TYPE == 'package': if self.STAGE == 'dev': string_return = "PKG_" + app_name + "_" + self.VERSION else: string_return = "PKG_" + app_name else: if self.STAGE == 'dev': string_return = app_name + "_" + self.VERSION else: string_return = app_name return string_return def _build_trig_string(self): ''' Create the name of the job that will trigger all the others. ''' if self.JOB_TYPE == 'package': if self.STAGE == 'dev': string_return = "PKG_dev_" + self.VERSION else: string_return = "PKG_master" else: if self.STAGE == 'dev': string_return = "TEST_dev_" + self.VERSION else: string_return = "TEST_master" return string_return def _build_kiln_string(self, app_name): ''' Build the string for the name of the app as it would appear in kiln. ''' if self.STAGE == 'dev': string_return = app_name + "_" + self.VERSION else: string_return = app_name return string_return def _get_repo_base(self, group): ''' Create the base repo url based on the group. ''' if group == 0: base_url = "https://%s.kilnhg.com/Code/src/%s/" % (self.KILN_PREFIX, self.group1name) elif group == 1: base_url = "https://%s.kilnhg.com/Code/src/%s/" % (self.KILN_PREFIX, self.group2name) else: base_url=None return base_url def _jobs_in_jenkins(self): ''' Returns an array of all jobs from config that are in Jenkins. ''' j = self._jenkins_connect() jobs = [] for group in self.app_groups: base_url = self._get_repo_base(self.app_groups.index(group)) for project in group: project_name = self._build_project_string(project) repo_url = base_url + project if j.job_exists(project_name): jobs.append(Project(project, repo_url, self.STAGE, self.JOB_TYPE, self.VERSION)) return jobs def _job_in_kiln(self): ''' Returns array of projects in kiln ''' jobs = [] for group in self.app_groups: base_url = self._get_repo_base(self.app_groups.index(group)) for project in group: project_name = self._build_kiln_string(project) repo_url = base_url + project_name if self.k.check_repo(project_name): print "Found %s in kiln" % project_name jobs.append(Project(project, repo_url, self.STAGE, self.JOB_TYPE, self.VERSION)) return jobs def _build_app_list(self): ''' Return a comma of projects that we will pass to a trigger job. ''' apps = self._jobs_in_jenkins() app_string = '' for app in apps: if apps.index(app) < (len(apps)-1): app_string = app_string + self._build_project_string(app.name) + ', ' else: app_string = app_string + self._build_project_string(app.name) return app_string def delete(self): print "*" * 60 print "Doing delete" print "*" * 60 jobs = self._jobs_in_jenkins() for job in jobs: print "Removing Jenkins job for " + self._build_project_string(job.name) jobs[jobs.index(job)].jenkins_remove_job() def create(self): print "*" * 60 print "Creating jobs" print "*" * 60 jobs = self._job_in_kiln() for job in jobs: print "Creating Jenkins job for " + self._build_project_string(job.name) jobs[jobs.index(job)].jenkins_create_job() def create_trig(self): build_apps = self._build_app_list() print "Using app list: " + build_apps j = self._jenkins_connect() trigger_job = self._build_trig_string() if j.job_exists(trigger_job): print "Job " + trigger_job + " already exists!" else: print "Creating trigger job " + trigger_job response = j.create(trigger_job, 'templates/trigger.xml', job_list=build_apps) print response def delete_trig(self): j = self._jenkins_connect() trigger_job = self._build_trig_string() if j.job_exists(trigger_job): print "Deleting trigger job " + trigger_job return j.delete(trigger_job) else: print trigger_job + " doesn't seem to exist." def init_build(self): '''
def kiln_connect(): anvil = Anvil(self.KILN_PREFIX) anvil.create_session(self.KILN_USERNAME, self.KILN_PASSWORD) return anvil
class Project(object): ''' Represents a project ''' def __init__(self, project_name, repo_url,stage,job_type=None, version=None): self.name = project_name if version != None: self.PROJECT = project_name + '_' + version self.VERSION = version else: self.PROJECT = project_name self.VERSION = None self.REPO_URL = repo_url self.STAGE = stage self.job_type=job_type c = EmploymentConfig('employment.conf') self.TEST_SCRIPT = c.getJenkinsScript('test') self.PACKAGE_SCRIPT = c.getJenkinsScript('package') self.UPLOAD_SCRIPT = c.getJenkinsScript('upload') self.JENKINS_URL = c.getJenkinsURL() self.PKG_prefix = c.getPacakgePrefix() self.KILN_PREFIX = c.getKilnPrefix() self.KILN_USERNAME = c.getKilnUsername() self.KILN_PASSWORD = c.getKilnPassword() self.k = Anvil(self.KILN_PREFIX) self.k.create_session(self.KILN_USERNAME, self.KILN_PASSWORD) self.EMAIL_TO = c.getJenkinsEmail() if self.job_type == 'package': if self.STAGE == 'dev': self.JENKINS_STRING = self.PKG_prefix + "_" + project_name + "_" + self.VERSION else: self.JENKINS_STRING = self.PKG_prefix + "_" + project_name else: if self.STAGE == 'dev': self.JENKINS_STRING = project_name + "_" + self.VERSION else: self.JENKINS_STRING = project_name if self.STAGE == 'dev': self.KILN_STRING = project_name + "_" + self.VERSION else: self.KILN_STRING = project_name def kiln_connect(): anvil = Anvil(self.KILN_PREFIX) anvil.create_session(self.KILN_USERNAME, self.KILN_PASSWORD) return anvil def kiln_repos(): anvil = kiln_connect() repos = anvil.get_repos() return repos def _jenkins_connect(self): return Jenkins(self.JENKINS_URL) def _kiln_check(self,check_project): anvil = self.kiln_connect() repos = anvil.get_repos() for repo in repos: if repo.name == check_project: return True def jenkins_create_job(self): ''' Create Jenkins job based on object. If it is a package job the corresponding template xml file will be used. ''' j = self._jenkins_connect() if self.k.check_repo(self.KILN_STRING): if self.job_type == 'package': if j.job_exists(self.JENKINS_STRING): print "Job " + self.JENKINS_STRING + " already exists in Jenkins." else: response = j.create(self.JENKINS_STRING, 'templates/PKG_template.xml', repo_url=self.REPO_URL, project_name=self.name, email_notify=self.EMAIL_TO, test_script=self.TEST_SCRIPT, package_script=self.PACKAGE_SCRIPT, stage=self.STAGE, version=self.VERSION, upload_script=self.UPLOAD_SCRIPT) print response else: if j.job_exists(self.JENKINS_STRING): print "Job " + self.JENKINS_STRING + " already exists in Jenkins." else: response = j.create(self.JENKINS_STRING, 'templates/template.xml', repo_url=self.REPO_URL, project_name=self.name, email_notify=self.EMAIL_TO, test_script=self.TEST_SCRIPT) print response else: print "Project " + self.PROJECT + " not found in kiln." def jenkins_remove_job(self): j = self._jenkins_connect() if j.job_exists(self.JENKINS_STRING): j.delete(self.JENKINS_STRING) else: print "Skipping, doesn't exist in Jenkins" def jenkins_build(self): j = self._jenkins_connect() j.build(self.JENKINS_STRING) def write_jenkins_xml(self): ''' Output xml file of job. ''' j = self._jenkins_connect() xml_output = self.JENKINS_STRING + ".xml" f = open(xml_output, 'w') f.write(j.get_config_xml(self.JENKINS_STRING)) f.close()