157 lines
4.5 KiB
JavaScript
157 lines
4.5 KiB
JavaScript
|
/**
|
||
|
* An element which displays a dialog for setting up a build trigger.
|
||
|
*/
|
||
|
angular.module('quay').directive('setupTriggerDialog', function () {
|
||
|
var directiveDefinitionObject = {
|
||
|
templateUrl: '/static/directives/setup-trigger-dialog.html',
|
||
|
replace: false,
|
||
|
transclude: false,
|
||
|
restrict: 'C',
|
||
|
scope: {
|
||
|
'repository': '=repository',
|
||
|
'trigger': '=trigger',
|
||
|
'counter': '=counter',
|
||
|
'canceled': '&canceled',
|
||
|
'activated': '&activated',
|
||
|
'triggerRunner': '&triggerRunner'
|
||
|
},
|
||
|
controller: function($scope, $element, ApiService, UserService, TriggerService) {
|
||
|
var modalSetup = false;
|
||
|
|
||
|
$scope.state = {};
|
||
|
$scope.nextStepCounter = -1;
|
||
|
$scope.currentView = 'config';
|
||
|
$scope.TriggerService = TriggerService
|
||
|
|
||
|
$scope.show = function() {
|
||
|
if (!$scope.trigger || !$scope.repository) { return; }
|
||
|
|
||
|
$scope.currentView = 'config';
|
||
|
$('#setupTriggerModal').modal({});
|
||
|
|
||
|
if (!modalSetup) {
|
||
|
$('#setupTriggerModal').on('hidden.bs.modal', function () {
|
||
|
if (!$scope.trigger || $scope.trigger['is_active']) { return; }
|
||
|
|
||
|
$scope.nextStepCounter = -1;
|
||
|
$scope.$apply(function() {
|
||
|
$scope.cancelSetupTrigger();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
modalSetup = true;
|
||
|
$scope.nextStepCounter = 0;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
$scope.isNamespaceAdmin = function(namespace) {
|
||
|
return UserService.isNamespaceAdmin(namespace);
|
||
|
};
|
||
|
|
||
|
$scope.cancelSetupTrigger = function() {
|
||
|
$scope.canceled({'trigger': $scope.trigger});
|
||
|
};
|
||
|
|
||
|
$scope.hide = function() {
|
||
|
$('#setupTriggerModal').modal('hide');
|
||
|
};
|
||
|
|
||
|
$scope.runTriggerNow = function() {
|
||
|
$('#setupTriggerModal').modal('hide');
|
||
|
$scope.triggerRunner({'trigger': $scope.trigger});
|
||
|
};
|
||
|
|
||
|
$scope.checkAnalyze = function(isValid) {
|
||
|
$scope.currentView = 'analyzing';
|
||
|
$scope.pullInfo = {
|
||
|
'is_public': true
|
||
|
};
|
||
|
|
||
|
if (!isValid) {
|
||
|
$scope.currentView = 'analyzed';
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var params = {
|
||
|
'repository': $scope.repository.namespace + '/' + $scope.repository.name,
|
||
|
'trigger_uuid': $scope.trigger.id
|
||
|
};
|
||
|
|
||
|
var data = {
|
||
|
'config': $scope.trigger.config
|
||
|
};
|
||
|
|
||
|
ApiService.analyzeBuildTrigger(data, params).then(function(resp) {
|
||
|
$scope.currentView = 'analyzed';
|
||
|
|
||
|
if (resp['status'] == 'analyzed') {
|
||
|
if (resp['robots'] && resp['robots'].length > 0) {
|
||
|
$scope.pullInfo['pull_entity'] = resp['robots'][0];
|
||
|
} else {
|
||
|
$scope.pullInfo['pull_entity'] = null;
|
||
|
}
|
||
|
|
||
|
$scope.pullInfo['is_public'] = false;
|
||
|
}
|
||
|
|
||
|
$scope.pullInfo['analysis'] = resp;
|
||
|
}, ApiService.errorDisplay('Cannot load Dockerfile information'));
|
||
|
};
|
||
|
|
||
|
$scope.activate = function() {
|
||
|
if (!$scope.trigger) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var params = {
|
||
|
'repository': $scope.repository.namespace + '/' + $scope.repository.name,
|
||
|
'trigger_uuid': $scope.trigger.id
|
||
|
};
|
||
|
|
||
|
var data = {
|
||
|
'config': $scope.trigger['config']
|
||
|
};
|
||
|
|
||
|
if ($scope.pullInfo['pull_entity']) {
|
||
|
data['pull_robot'] = $scope.pullInfo['pull_entity']['name'];
|
||
|
}
|
||
|
|
||
|
$scope.currentView = 'activating';
|
||
|
|
||
|
var errorHandler = ApiService.errorDisplay('Cannot activate build trigger', function(resp) {
|
||
|
$scope.hide();
|
||
|
$scope.canceled({'trigger': $scope.trigger});
|
||
|
|
||
|
return ApiService.getErrorMessage(resp) +
|
||
|
'\n\nNote: Errors can occur if you do not have admin access on the repository.';
|
||
|
});
|
||
|
|
||
|
ApiService.activateBuildTrigger(data, params).then(function(resp) {
|
||
|
if (!$scope.trigger) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$scope.trigger['is_active'] = true;
|
||
|
$scope.trigger['config'] = resp['config'];
|
||
|
$scope.trigger['pull_robot'] = resp['pull_robot'];
|
||
|
$scope.trigger['repository_url'] = resp['repository_url'];
|
||
|
$scope.activated({'trigger': $scope.trigger});
|
||
|
$scope.currentView = 'postActivation';
|
||
|
}, errorHandler);
|
||
|
};
|
||
|
|
||
|
var check = function() {
|
||
|
if ($scope.counter && $scope.trigger && $scope.repository) {
|
||
|
$scope.show();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
$scope.$watch('trigger', check);
|
||
|
$scope.$watch('counter', check);
|
||
|
$scope.$watch('repository', check);
|
||
|
}
|
||
|
};
|
||
|
return directiveDefinitionObject;
|
||
|
});
|
||
|
|