commit
2a13eade80
35 changed files with 797 additions and 136 deletions
|
@ -43,14 +43,13 @@ def user_view(user):
|
|||
'is_robot': user.robot,
|
||||
}
|
||||
|
||||
def trigger_view(trigger):
|
||||
|
||||
def trigger_view(trigger, can_admin=False):
|
||||
if trigger and trigger.uuid:
|
||||
config_dict = get_trigger_config(trigger)
|
||||
build_trigger = BuildTrigger.get_trigger_for_service(trigger.service.name)
|
||||
return {
|
||||
'service': trigger.service.name,
|
||||
'config': config_dict,
|
||||
'config': config_dict if can_admin else {},
|
||||
'id': trigger.uuid,
|
||||
'connected_user': trigger.connected_user.username,
|
||||
'is_active': build_trigger.is_active(config_dict),
|
||||
|
@ -60,7 +59,7 @@ def trigger_view(trigger):
|
|||
return None
|
||||
|
||||
|
||||
def build_status_view(build_obj, can_write=False):
|
||||
def build_status_view(build_obj, can_write=False, can_admin=False):
|
||||
phase = build_obj.phase
|
||||
try:
|
||||
status = build_logs.get_status(build_obj.uuid)
|
||||
|
@ -92,7 +91,7 @@ def build_status_view(build_obj, can_write=False):
|
|||
'status': status or {},
|
||||
'job_config': get_job_config(build_obj) if can_write else None,
|
||||
'is_writer': can_write,
|
||||
'trigger': trigger_view(build_obj.trigger),
|
||||
'trigger': trigger_view(build_obj.trigger, can_admin),
|
||||
'resource_key': build_obj.resource_key,
|
||||
'pull_robot': user_view(build_obj.pull_robot) if build_obj.pull_robot else None,
|
||||
'repository': {
|
||||
|
@ -101,7 +100,7 @@ def build_status_view(build_obj, can_write=False):
|
|||
}
|
||||
}
|
||||
|
||||
if can_write:
|
||||
if can_write and build_obj.resource_key is not None:
|
||||
resp['archive_url'] = user_files.get_file_url(build_obj.resource_key, requires_cors=True)
|
||||
|
||||
return resp
|
||||
|
@ -208,7 +207,7 @@ class RepositoryBuildList(RepositoryParamResource):
|
|||
build_request = start_build(repo, dockerfile_id, tags, display_name, subdir, True,
|
||||
pull_robot_name=pull_robot_name)
|
||||
|
||||
resp = build_status_view(build_request, True)
|
||||
resp = build_status_view(build_request, can_write=True)
|
||||
repo_string = '%s/%s' % (namespace, repository)
|
||||
headers = {
|
||||
'Location': api.url_for(RepositoryBuildStatus, repository=repo_string,
|
||||
|
|
|
@ -41,7 +41,7 @@ class BuildTriggerList(RepositoryParamResource):
|
|||
""" List the triggers for the specified repository. """
|
||||
triggers = model.list_build_triggers(namespace, repository)
|
||||
return {
|
||||
'triggers': [trigger_view(trigger) for trigger in triggers]
|
||||
'triggers': [trigger_view(trigger, can_admin=True) for trigger in triggers]
|
||||
}
|
||||
|
||||
|
||||
|
@ -60,7 +60,7 @@ class BuildTrigger(RepositoryParamResource):
|
|||
except model.InvalidBuildTriggerException:
|
||||
raise NotFound()
|
||||
|
||||
return trigger_view(trigger)
|
||||
return trigger_view(trigger, can_admin=True)
|
||||
|
||||
@require_repo_admin
|
||||
@nickname('deleteBuildTrigger')
|
||||
|
@ -207,24 +207,25 @@ class BuildTriggerActivate(RepositoryParamResource):
|
|||
# Update the config.
|
||||
new_config_dict = request.get_json()['config']
|
||||
|
||||
token_name = 'Build Trigger: %s' % trigger.service.name
|
||||
token = model.create_delegate_token(namespace, repository, token_name,
|
||||
'write')
|
||||
write_token_name = 'Build Trigger: %s' % trigger.service.name
|
||||
write_token = model.create_delegate_token(namespace, repository, write_token_name,
|
||||
'write')
|
||||
|
||||
try:
|
||||
path = url_for('webhooks.build_trigger_webhook', trigger_uuid=trigger.uuid)
|
||||
authed_url = _prepare_webhook_url(app.config['PREFERRED_URL_SCHEME'], '$token', token.code,
|
||||
authed_url = _prepare_webhook_url(app.config['PREFERRED_URL_SCHEME'],
|
||||
'$token', write_token.code,
|
||||
app.config['SERVER_HOSTNAME'], path)
|
||||
|
||||
final_config = handler.activate(trigger.uuid, authed_url,
|
||||
final_config, trigger.private_key = handler.activate(trigger.uuid, authed_url,
|
||||
trigger.auth_token, new_config_dict)
|
||||
except TriggerActivationException as exc:
|
||||
token.delete_instance()
|
||||
write_token.delete_instance()
|
||||
raise request_error(message=exc.message)
|
||||
|
||||
# Save the updated config.
|
||||
trigger.config = json.dumps(final_config)
|
||||
trigger.write_token = token
|
||||
trigger.write_token = write_token
|
||||
trigger.save()
|
||||
|
||||
# Log the trigger setup.
|
||||
|
@ -235,7 +236,7 @@ class BuildTriggerActivate(RepositoryParamResource):
|
|||
'pull_robot': trigger.pull_robot.username if trigger.pull_robot else None,
|
||||
'config': final_config}, repo=repo)
|
||||
|
||||
return trigger_view(trigger)
|
||||
return trigger_view(trigger, can_admin=True)
|
||||
else:
|
||||
raise Unauthorized()
|
||||
|
||||
|
@ -373,6 +374,10 @@ class BuildTriggerAnalyze(RepositoryParamResource):
|
|||
'status': 'error',
|
||||
'message': rre.message
|
||||
}
|
||||
except NotImplementedError:
|
||||
return {
|
||||
'status': 'notimplemented',
|
||||
}
|
||||
|
||||
raise NotFound()
|
||||
|
||||
|
@ -392,6 +397,10 @@ class ActivateBuildTrigger(RepositoryParamResource):
|
|||
'branch_name': {
|
||||
'type': 'string',
|
||||
'description': '(GitHub Only) If specified, the name of the GitHub branch to build.'
|
||||
},
|
||||
'commit_sha': {
|
||||
'type': 'string',
|
||||
'description': '(Custom Only) If specified, the ref/SHA1 used to checkout a git repository.'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -414,7 +423,7 @@ class ActivateBuildTrigger(RepositoryParamResource):
|
|||
|
||||
try:
|
||||
run_parameters = request.get_json()
|
||||
specs = handler.manual_start(trigger.auth_token, config_dict, run_parameters=run_parameters)
|
||||
specs = handler.manual_start(trigger, run_parameters=run_parameters)
|
||||
dockerfile_id, tags, name, subdir, metadata = specs
|
||||
|
||||
repo = model.get_repository(namespace, repository)
|
||||
|
@ -426,7 +435,7 @@ class ActivateBuildTrigger(RepositoryParamResource):
|
|||
except TriggerStartException as tse:
|
||||
raise InvalidRequest(tse.message)
|
||||
|
||||
resp = build_status_view(build_request, True)
|
||||
resp = build_status_view(build_request, can_write=True)
|
||||
repo_string = '%s/%s' % (namespace, repository)
|
||||
headers = {
|
||||
'Location': api.url_for(RepositoryBuildStatus, repository=repo_string,
|
||||
|
@ -450,7 +459,7 @@ class TriggerBuildList(RepositoryParamResource):
|
|||
builds = list(model.list_trigger_builds(namespace, repository,
|
||||
trigger_uuid, limit))
|
||||
return {
|
||||
'builds': [build_status_view(build, True) for build in builds]
|
||||
'builds': [build_status_view(build, can_write=True) for build in builds]
|
||||
}
|
||||
|
||||
|
||||
|
|
Reference in a new issue