2015-03-13 22:34:28 +00:00
< div class = "repo-panel-builds-element" >
2015-07-14 09:39:49 +00:00
< div class = "feedback-bar" feedback = "feedback" > < / div >
2015-03-13 22:34:28 +00:00
< div class = "tab-header-controls" >
2017-11-27 10:02:07 +00:00
< button class = "btn btn-primary" ng-click = "showNewBuildDialog()" ng-if = "!repository.tag_operations_disabled"
quay-show="repository.can_write & & Features.BUILD_SUPPORT">
2016-09-29 13:19:21 +00:00
< i class = "fa fa-play" > < / i > Start New Build
2015-03-13 22:34:28 +00:00
< / button >
< / div >
< h3 class = "tab-header" > Repository Builds< / h3 >
2017-06-13 13:56:47 +00:00
< div class = "co-alert co-alert-info" ng-if = "repository.tag_operations_disabled" >
2017-05-16 11:40:20 +00:00
Builds cannot be performed on this repository because Quay Trust is
2017-04-17 18:34:43 +00:00
enabled, which requires that all operations be signed by a user.
< / div >
2015-03-13 22:34:28 +00:00
<!-- Builds -->
2015-05-13 18:55:39 +00:00
< div class = "co-panel" id = "repoBuilds" >
2015-03-13 22:34:28 +00:00
<!-- Builds header controls -->
< div class = "co-panel-heading" >
< div class = "heading-controls hidden-sm hidden-xs" >
< span class = "filter-control" filter = "options.filter" value = "recent" > Recent Builds< / span >
< span class = "filter-control" filter = "options.filter" value = "48hour" > Last 48 Hours< / span >
< span class = "filter-control" filter = "options.filter" value = "30day" > Last 30 days< / span >
< / div >
< div class = "heading-title" >
< i class = "fa fa-tasks" > < / i >
Build History
< / div >
< / div >
<!-- Builds list content -->
< div class = "panel-body" >
< div class = "resource-view" resource = "buildsResource" error-message = "'Could not load build information'" >
<!-- No builds found -->
< div class = "empty" ng-if = "!fullBuilds.length" >
< div class = "empty-primary-msg" > No matching builds found< / div >
< div class = "empty-secondary-msg" >
Please change the filter above to search for more builds.
< / div >
< / div >
<!-- Builds list table -->
< table class = "co-table" ng-if = "fullBuilds.length" >
< thead >
< td class = "status-col" > < / td >
2015-04-08 18:39:52 +00:00
< td ng-class = "tablePredicateClass('id', options.predicate, options.reverse)"
style="min-width: 85px;">
2016-03-22 18:15:54 +00:00
< a ng-click = "orderBy('id')" > Build ID< / a >
2015-03-13 22:34:28 +00:00
< / td >
2015-04-20 21:42:33 +00:00
< td class = "hidden-xs"
ng-class="tablePredicateClass('commit_sha', options.predicate, options.reverse)"
2015-04-08 18:39:52 +00:00
style="min-width: 115px">
2016-03-22 18:15:54 +00:00
< a ng-click = "orderBy('commit_sha')" > Triggered By< / a >
2015-03-13 22:34:28 +00:00
< / td >
2015-04-08 18:39:52 +00:00
< td ng-class = "tablePredicateClass('started_datetime', options.predicate, options.reverse)" style = "min-width: 120px;" >
2016-03-22 18:15:54 +00:00
< a ng-click = "orderBy('started_datetime')" > Date Started< / a >
2015-03-13 22:34:28 +00:00
< / td >
2015-04-20 21:42:33 +00:00
< td class = "hidden-xs"
ng-class="tablePredicateClass('tags', options.predicate, options.reverse)"
2015-04-08 18:39:52 +00:00
style="min-width: 66px;">
2016-03-22 18:15:54 +00:00
< a ng-click = "orderBy('tags')" > Tags< / a >
2015-03-18 16:13:07 +00:00
< / td >
2015-03-13 22:34:28 +00:00
< / thead >
< tr ng-repeat = "build in fullBuilds" >
< td > < span class = "build-state-icon" build = "build" > < / span > < / td >
< td >
< a href = "/repository/{{ repository.namespace }}/{{ repository.name }}/build/{{ build.id }}" > {{ build.id.substr(0, 8) }}< / a >
< / td >
2015-04-20 21:42:33 +00:00
< td class = "hidden-xs" >
2015-03-18 16:13:07 +00:00
< div class = "triggered-build-description" build = "build" > < / div >
< / td >
< td > {{ build.started | amCalendar }}< / td >
2015-04-20 21:42:33 +00:00
< td class = "hidden-xs" >
2015-03-13 22:34:28 +00:00
< span class = "building-tag" ng-repeat = "tag in build.building_tags" >
2015-04-08 18:39:52 +00:00
< span class = "tag-span" > < i class = "fa fa-tag" > < / i > {{ tag }}< / span >
2015-03-13 22:34:28 +00:00
< / span >
< / td >
< / tr >
< / table >
< / div >
< / div >
< / div > <!-- /Builds -->
<!-- Build Triggers -->
2017-06-13 13:56:47 +00:00
< div class = "co-panel" ng-if = "repository.can_admin && TriggerService.getTypes().length && !repository.tag_operations_disabled" id = "repoBuildTriggers" >
2015-03-13 22:34:28 +00:00
<!-- Builds header controls -->
< div class = "co-panel-heading" >
< i class = "fa fa-flash" > < / i >
Build Triggers
2015-08-26 16:08:59 +00:00
< div class = "heading-controls hidden-xs" >
2015-03-13 22:34:28 +00:00
<!-- Add Build Trigger -->
2015-05-13 18:55:39 +00:00
< div class = "dropdown" id = "addBuildTrigger" >
2015-03-13 22:34:28 +00:00
< button class = "btn btn-primary dropdown-toggle" data-toggle = "dropdown" >
Create Build Trigger
< b class = "caret" > < / b >
< / button >
< ul class = "dropdown-menu dropdown-menu-right pull-right" >
2015-04-24 19:13:08 +00:00
< li ng-repeat = "type in TriggerService.getTypes()" ng-if = "TriggerService.isEnabled(type)" >
2015-04-21 22:04:25 +00:00
< a href = "{{ TriggerService.getRedirectUrl(type, repository.namespace, repository.name) }}" target = "{{ TriggerService.getMetadata(type).is_external ? '' : '_self' }}" >
2015-03-13 22:34:28 +00:00
< i class = "fa fa-lg" ng-class = "TriggerService.getMetadata(type).icon" > < / i >
{{ TriggerService.getTitle(type) }}
< / a >
< / li >
< / ul >
< / div >
< / div >
< / div >
<!-- Builds list content -->
< div class = "panel-body" >
< div class = "resource-view" resource = "triggersResource" error-message = "'Could not load build triggers'" >
<!-- No Triggers defined -->
< div class = "empty" ng-if = "!triggers.length" >
< div class = "empty-primary-msg" > No build triggers defined< / div >
< div class = "empty-secondary-msg" >
Build triggers invoke builds whenever the triggered condition is met (source control push, webhook, etc)
< / div >
< / div >
<!-- Triggers list -->
2015-04-20 21:42:33 +00:00
< table class = "cor-table" ng-if = "triggers.length" >
2015-03-13 22:34:28 +00:00
< thead >
< td > Trigger Name< / td >
< td > Dockerfile Location< / td >
2017-03-21 21:24:11 +00:00
< td > Context Location< / td >
2015-03-13 22:34:28 +00:00
< td > Branches/Tags< / td >
< td > Pull Robot< / td >
< td class = "options-col" > < / td >
< / thead >
< tr ng-repeat = "trigger in triggers | filter:{'is_active':false}" >
< td colspan = "5" style = "text-align: center" >
2016-09-27 14:52:34 +00:00
This build trigger has not had its setup completed:
< a ng-click = "deleteTrigger(trigger)" > Delete Trigger< / a >
2015-03-13 22:34:28 +00:00
< / td >
< / tr >
2017-10-17 21:01:59 +00:00
< tbody ng-repeat = "trigger in triggers | filter:{'is_active':true}" >
< tr ng-class = "{'trigger-disabled': !trigger.enabled}" >
< td > < trigger-description trigger = "trigger" > < / trigger-description > < / td >
< td > {{ trigger.config.dockerfile_path || '/Dockerfile' }}< / td >
< td > {{ trigger.config.context || '/' }}< / td >
< td > {{ trigger.config.branchtag_regex || 'All' }}< / td >
< td >
< span class = "entity-reference" entity = "trigger.pull_robot" ng-if = "trigger.pull_robot" > < / span >
< span class = "empty" ng-if = "!trigger.pull_robot" > (None)< / span >
< / td >
< td >
< span class = "cor-options-menu" >
< span ng-if = "trigger.config.credentials" class = "cor-option" option-click = "showTriggerCredentialsModal(trigger)" >
< i class = "fa fa-unlock-alt" > < / i > View Credentials
< / span >
< span class = "cor-option" option-click = "askRunTrigger(trigger)"
ng-class="trigger.can_invoke & & trigger.enabled ? '' : 'disabled'">
< i class = "fa fa-chevron-right" > < / i > Run Trigger Now
< / span >
< span class = "cor-option" option-click = "askToggleTrigger(trigger)" >
< i class = "fa fa-adjust" > < / i >
< span ng-if = "trigger.enabled" > Disable Trigger< / span >
< span ng-if = "!trigger.enabled" > Enable Trigger< / span >
< / span >
< span class = "cor-option" option-click = "askDeleteTrigger(trigger)" >
< i class = "fa fa-times" > < / i > Delete Trigger
< / span >
2015-03-13 22:34:28 +00:00
< / span >
2017-10-17 21:01:59 +00:00
< / td >
< / tr >
< tr class = "trigger-disabled-message" ng-if = "!trigger.enabled" >
2017-10-18 20:03:38 +00:00
< td colspan = "5" style = "text-align: center"
ng-if="trigger.disabled_reason == 'user_toggled'">
2017-10-17 21:01:59 +00:00
< i class = "fa fa-exclamation-triangle" > < / i >
2017-10-18 20:03:38 +00:00
This build trigger is user disabled and will not build:
< a ng-click = "askToggleTrigger(trigger)" > Re-enable this trigger< / a >
< / td >
< td colspan = "5" style = "text-align: center"
ng-if="trigger.disabled_reason == 'successive_build_failures'">
< i class = "fa fa-exclamation-triangle" > < / i >
This build trigger was automatically disabled due to successive failures:
< a ng-click = "askToggleTrigger(trigger)" > Re-enable this trigger< / a >
< / td >
< td colspan = "5" style = "text-align: center"
ng-if="trigger.disabled_reason == 'successive_build_internal_errors'">
< i class = "fa fa-exclamation-triangle" > < / i >
This build trigger was automatically disabled due to successive internal errors:
2017-10-17 21:01:59 +00:00
< a ng-click = "askToggleTrigger(trigger)" > Re-enable this trigger< / a >
< / td >
< / tr >
2017-10-18 20:03:38 +00:00
< / tbody >
2015-03-13 22:34:28 +00:00
< / table >
< / div >
< / div >
< / div > <!-- /Build Triggers -->
2015-04-14 18:11:02 +00:00
<!-- Dialogs -->
2015-04-16 18:58:25 +00:00
<!-- Trigger Credentials dialog -->
< div class = "trigger-credentials-dialog" trigger = "triggerCredentialsModalTrigger" counter = "triggerCredentialsModalCounter" > < / div >
2015-04-14 18:11:02 +00:00
2017-10-17 21:01:59 +00:00
<!-- Toggle Trigger Confirm -->
< div class = "cor-confirm-dialog"
dialog-context="toggleTriggerInfo"
dialog-action="toggleTrigger(info.trigger, callback)"
dialog-title="Toggle Trigger"
dialog-action-title="Toggle Trigger">
Are you sure you want to < span ng-if = "toggleTriggerInfo.trigger.enabled" > disable< / span > < span ng-if = "!toggleTriggerInfo.trigger.enabled" > enable< / span > this trigger?
< / div >
<!-- Delete Trigger Confirm -->
2015-03-13 22:34:28 +00:00
< div class = "cor-confirm-dialog"
dialog-context="deleteTriggerInfo"
dialog-action="deleteTrigger(info.trigger, callback)"
dialog-title="Delete Build Trigger"
dialog-action-title="Delete Trigger">
Are you sure you want to delete this build trigger? No further builds will be automatically
started.
< / div >
<!-- Dockerfile build dialog -->
< div class = "dockerfile-build-dialog"
show-now="showBuildDialogCounter"
repository="repository"
build-started="handleBuildStarted(build)">
< / div >
<!-- Manual trigger dialog -->
< div class = "manual-trigger-build-dialog"
repository="repository"
trigger="currentStartTrigger"
counter="showTriggerStartDialogCounter"
2015-08-20 23:24:51 +00:00
build-started="handleBuildStarted(build)">< / div >
2015-03-13 22:34:28 +00:00
2015-04-14 18:11:02 +00:00
<!-- /Dialogs -->
2015-03-27 21:07:06 +00:00
< / div >