Pass trigger information on build status. Set up a trigger for the sample building repository. Allow to list the builds started from a trigger. Protect the callback with the proper auth for creating a trigger on a repo.
This commit is contained in:
		
							parent
							
								
									f60f9eb62a
								
							
						
					
					
						commit
						9e426816a5
					
				
					 7 changed files with 94 additions and 43 deletions
				
			
		|  | @ -230,6 +230,7 @@ class RepositoryBuild(BaseModel): | |||
|   phase = CharField(default='waiting') | ||||
|   started = DateTimeField(default=datetime.now) | ||||
|   display_name = CharField() | ||||
|   trigger = ForeignKeyField(RepositoryBuildTrigger, null=True, index=True) | ||||
| 
 | ||||
| 
 | ||||
| class QueueItem(BaseModel): | ||||
|  |  | |||
|  | @ -1299,35 +1299,38 @@ def load_token_data(code): | |||
| 
 | ||||
| 
 | ||||
| def get_repository_build(namespace_name, repository_name, build_uuid): | ||||
|   joined = RepositoryBuild.select().join(Repository) | ||||
|   fetched = list(joined.where(Repository.name == repository_name, | ||||
|                               Repository.namespace == namespace_name, | ||||
|                               RepositoryBuild.uuid == build_uuid)) | ||||
|   try: | ||||
|     query = list_repository_builds(namespace_name, repository_name) | ||||
|     return query.where(RepositoryBuild.uuid == build_uuid).get() | ||||
| 
 | ||||
|   if not fetched: | ||||
|   except RepositoryBuild.DoesNotExist: | ||||
|     msg = 'Unable to locate a build by id: %s' % build_uuid | ||||
|     raise InvalidRepositoryBuildException(msg) | ||||
| 
 | ||||
|   return fetched[0] | ||||
| 
 | ||||
| 
 | ||||
| def list_repository_builds(namespace_name, repository_name, | ||||
|                            include_inactive=True): | ||||
|   joined = RepositoryBuild.select().join(Repository) | ||||
|   filtered = joined | ||||
|   query = (RepositoryBuild | ||||
|     .select(RepositoryBuild, RepositoryBuildTrigger, BuildTriggerService) | ||||
|     .join(Repository) | ||||
|     .switch(RepositoryBuild) | ||||
|     .join(RepositoryBuildTrigger, JOIN_LEFT_OUTER) | ||||
|     .join(BuildTriggerService, JOIN_LEFT_OUTER) | ||||
|     .where(Repository.name == repository_name, | ||||
|            Repository.namespace == namespace_name)) | ||||
| 
 | ||||
|   if not include_inactive: | ||||
|     filtered = filtered.where(RepositoryBuild.phase != 'error', | ||||
|                               RepositoryBuild.phase != 'complete') | ||||
|   fetched = list(filtered.where(Repository.name == repository_name, | ||||
|                                 Repository.namespace == namespace_name)) | ||||
|   return fetched | ||||
|     query = query.where(RepositoryBuild.phase != 'error', | ||||
|                         RepositoryBuild.phase != 'complete') | ||||
| 
 | ||||
|   return query | ||||
| 
 | ||||
| 
 | ||||
| def create_repository_build(repo, access_token, resource_key, tag, | ||||
|                             display_name): | ||||
|                             display_name, trigger=None): | ||||
|   return RepositoryBuild.create(repository=repo, access_token=access_token, | ||||
|                                 resource_key=resource_key, tag=tag, | ||||
|                                 display_name=display_name) | ||||
|                                 display_name=display_name, trigger=trigger) | ||||
| 
 | ||||
| 
 | ||||
| def create_webhook(repo, params_obj): | ||||
|  | @ -1386,11 +1389,8 @@ def log_action(kind_name, user_or_organization_name, performer=None, | |||
|                   metadata_json=json.dumps(metadata), datetime=timestamp) | ||||
| 
 | ||||
| 
 | ||||
| def create_build_trigger(namespace_name, repository_name, service_name, | ||||
|                          auth_token, user): | ||||
| def create_build_trigger(repo, service_name, auth_token, user): | ||||
|   service = BuildTriggerService.get(name=service_name) | ||||
|   repo = Repository.get(namespace=namespace_name, name=repository_name) | ||||
| 
 | ||||
|   trigger = RepositoryBuildTrigger.create(repository=repo, service=service, | ||||
|                                           auth_token=auth_token, | ||||
|                                           connected_user=user) | ||||
|  | @ -1428,3 +1428,14 @@ def list_build_triggers(namespace_name, repository_name): | |||
| def delete_build_trigger(namespace_name, repository_name, trigger_uuid): | ||||
|   trigger = get_build_trigger(namespace_name, repository_name, trigger_uuid) | ||||
|   trigger.delete_instance() | ||||
| 
 | ||||
| 
 | ||||
| def list_trigger_builds(namespace_name, repository_name, trigger_uuid, | ||||
|                         limit=None): | ||||
|   query = (list_repository_builds(namespace_name, repository_name) | ||||
|     .where(RepositoryBuildTrigger.uuid == trigger_uuid)) | ||||
| 
 | ||||
|   if limit: | ||||
|     return query.limit(limit) | ||||
|   else: | ||||
|     return query | ||||
|  |  | |||
		Reference in a new issue