Add ability for triggers to be disabled
Will be used in the followup commit to automatically disable broken triggers
This commit is contained in:
parent
1e54a4d9e9
commit
c35eec0615
18 changed files with 358 additions and 37 deletions
|
@ -22,7 +22,8 @@ from endpoints.api import (RepositoryParamResource, nickname, resource, require_
|
|||
disallow_for_app_repositories)
|
||||
from endpoints.api.build import build_status_view, trigger_view, RepositoryBuildStatus
|
||||
from endpoints.api.trigger_analyzer import TriggerAnalyzer
|
||||
from endpoints.building import start_build, MaximumBuildsQueuedException
|
||||
from endpoints.building import (start_build, MaximumBuildsQueuedException,
|
||||
BuildTriggerDisabledException)
|
||||
from endpoints.exception import NotFound, Unauthorized, InvalidRequest
|
||||
from util.names import parse_robot_username
|
||||
|
||||
|
@ -62,6 +63,21 @@ class BuildTriggerList(RepositoryParamResource):
|
|||
@path_param('trigger_uuid', 'The UUID of the build trigger')
|
||||
class BuildTrigger(RepositoryParamResource):
|
||||
""" Resource for managing specific build triggers. """
|
||||
schemas = {
|
||||
'UpdateTrigger': {
|
||||
'type': 'object',
|
||||
'description': 'Options for updating a build trigger',
|
||||
'required': [
|
||||
'enabled',
|
||||
],
|
||||
'properties': {
|
||||
'enabled': {
|
||||
'type': 'boolean',
|
||||
'description': 'Whether the build trigger is enabled',
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
@require_repo_admin
|
||||
@disallow_for_app_repositories
|
||||
|
@ -70,6 +86,27 @@ class BuildTrigger(RepositoryParamResource):
|
|||
""" Get information for the specified build trigger. """
|
||||
return trigger_view(get_trigger(trigger_uuid), can_admin=True)
|
||||
|
||||
@require_repo_admin
|
||||
@disallow_for_app_repositories
|
||||
@nickname('updateBuildTrigger')
|
||||
@validate_json_request('UpdateTrigger')
|
||||
def put(self, namespace_name, repo_name, trigger_uuid):
|
||||
""" Updates the specified build trigger. """
|
||||
trigger = get_trigger(trigger_uuid)
|
||||
|
||||
handler = BuildTriggerHandler.get_handler(trigger)
|
||||
if not handler.is_active():
|
||||
raise InvalidRequest('Cannot update an unactivated trigger')
|
||||
|
||||
enable = request.get_json()['enabled']
|
||||
model.build.toggle_build_trigger(trigger, enable)
|
||||
log_action('toggle_repo_trigger', namespace_name,
|
||||
{'repo': repo_name, 'trigger_id': trigger_uuid,
|
||||
'service': trigger.service.name, 'enabled': enable},
|
||||
repo=model.repository.get_repository(namespace_name, repo_name))
|
||||
|
||||
return trigger_view(trigger)
|
||||
|
||||
@require_repo_admin
|
||||
@disallow_for_app_repositories
|
||||
@nickname('deleteBuildTrigger')
|
||||
|
@ -340,6 +377,8 @@ class ActivateBuildTrigger(RepositoryParamResource):
|
|||
def post(self, namespace_name, repo_name, trigger_uuid):
|
||||
""" Manually start a build from the specified trigger. """
|
||||
trigger = get_trigger(trigger_uuid)
|
||||
if not trigger.enabled:
|
||||
raise InvalidRequest('Trigger is not enabled.')
|
||||
|
||||
handler = BuildTriggerHandler.get_handler(trigger)
|
||||
if not handler.is_active():
|
||||
|
@ -356,6 +395,8 @@ class ActivateBuildTrigger(RepositoryParamResource):
|
|||
raise InvalidRequest(tse.message)
|
||||
except MaximumBuildsQueuedException:
|
||||
abort(429, message='Maximum queued build rate exceeded.')
|
||||
except BuildTriggerDisabledException:
|
||||
abort(400, message='Build trigger is disabled')
|
||||
|
||||
resp = build_status_view(build_request)
|
||||
repo_string = '%s/%s' % (namespace_name, repo_name)
|
||||
|
@ -485,3 +526,4 @@ class BuildTriggerSourceNamespaces(RepositoryParamResource):
|
|||
raise InvalidRequest(rre.message)
|
||||
else:
|
||||
raise Unauthorized()
|
||||
|
||||
|
|
Reference in a new issue