custom trigger: initial setup wizard

This commit is contained in:
Jimmy Zelinskie 2015-03-27 17:07:06 -04:00
parent c5272f3545
commit 7d1d53ebcb
8 changed files with 86 additions and 31 deletions

View file

@ -277,27 +277,3 @@ def attach_github_build_trigger(namespace, repository):
return redirect(full_url)
abort(403)
@callback.route('/custom/callback/trigger/<path:repository>', methods=['GET'])
@callback.route('/custom/callback/trigger/<path:repository>/__new', methods=['GET'])
@require_session_login
@parse_repository_name
def activate_custom_build_trigger(namespace, repository):
permission = AdministerRepositoryPermission(namespace, repository)
if permission.can():
repo = model.get_repository(namespace, repository)
if not repo:
msg = 'Invalid repository: %s/%s' % (namespace, repository)
abort(404, message=msg)
trigger = model.create_build_trigger(repo, 'custom', None, current_user.db_user())
# TODO(jschorr): Remove once the new layout is in place.
admin_path = '%s/%s/%s' % (namespace, repository, 'admin')
full_url = '%s%s%s' % (url_for('web.repository', path=admin_path), '?tab=trigger&new_trigger=',
trigger.uuid)
logger.debug('Redirecting to full url: %s', full_url)
return redirect(full_url)
abort(403)

View file

@ -13,7 +13,7 @@ from data.model.oauth import DatabaseAuthorizationProvider
from app import app, billing as stripe, build_logs, avatar, signer
from auth.auth import require_session_login, process_oauth
from auth.permissions import (AdministerOrganizationPermission, ReadRepositoryPermission,
SuperUserPermission)
SuperUserPermission, AdministerRepositoryPermission)
from util.invoice import renderInvoiceToPdf
from util.seo import render_snapshot
@ -511,3 +511,25 @@ def download_logs_archive():
headers={"Content-Disposition": "attachment;filename=erlogs.tar.gz"})
abort(403)
@web.route('/customtrigger/setup/<path:repository>', methods=['GET'])
@require_session_login
@parse_repository_name
def attach_custom_build_trigger(namespace, repository_name):
permission = AdministerRepositoryPermission(namespace, repository_name)
if permission.can():
repo = model.get_repository(namespace, repository_name)
if not repo:
msg = 'Invalid repository: %s/%s' % (namespace, repository_name)
abort(404, message=msg)
trigger = model.create_build_trigger(repo, 'custom', None, current_user.db_user())
repo_path = '%s/%s' % (namespace, repository_name)
full_url = '%s%s%s' % (url_for('web.repository', path=repo_path), '?tab=builds&newtrigger=',
trigger.uuid)
logger.debug('Redirecting to full url: %s', full_url)
return redirect(full_url)
abort(403)

View file

@ -88,7 +88,7 @@
</button>
<ul class="dropdown-menu dropdown-menu-right pull-right">
<li ng-repeat="type in TriggerService.getTypes()">
<a href="{{ TriggerService.getRedirectUrl(type, repository.namespace, repository.name) }}">
<a href="{{ TriggerService.getRedirectUrl(type, repository.namespace, repository.name) }}" target="{{ TriggerService.getMetadata(type).target }}">
<i class="fa fa-lg" ng-class="TriggerService.getMetadata(type).icon"></i>
{{ TriggerService.getTitle(type) }}
</a>
@ -184,4 +184,4 @@
counter="showTriggerStartDialogCounter"
start-build="startTrigger(trigger, parameters)"></div>
</div>
</div>

View file

@ -19,6 +19,11 @@
next-step-counter="nextStepCounter" current-step-valid="state.stepValid"
analyze="checkAnalyze(isValid)"></div>
</div>
<div ng-switch-when="custom">
<div class="trigger-setup-custom" repository="repository" trigger="trigger"
next-set-counter="nextStepCounter" current-setp-valid="state.stepValid"
analyze="checkAnalyze(isValid)"></div>
</div>
</div>
<!-- Loading pull information -->

View file

@ -0,0 +1,16 @@
<div class="trigger-setup-custom-element">
<!-- Current selected info, is this even necessary? -->
<div class="selected-info" ng-show="nextStepCounter > 0">
</div>
<!-- Step view -->
<div class="step-view" next-step-counter="nextStepCounter" current-step-valid="currentStepValid"
steps-completed="stepsCompleted()">
<!-- Git URL Input -->
<div class="step-view-step" complete-condition="state.gitURL">
<div style="margin-bottom: 12px;">Please enter the URL used to clone the your git repository:</div>
<input type="text" ng-pattern="">
</div>
</div>
</div>

View file

@ -0,0 +1,35 @@
/**
* An element which displays custom git-specific setup information for its build triggers.
*/
angular.module('quay').directive('triggerSetupCustom', function() {
var directiveDefinitionObject = {
priority: 0,
templateUrl: '/static/directives/trigger-setup-custom.html',
replace: false,
transclude: false,
restrict: 'C',
scope: {
'repository': '=repository',
'trigger': '=trigger',
'nextStepCounter': '=nextStepCounter',
'currentStepValid': '=currentStepValid',
'analyze': '&analyze'
},
controller: function($scope, $element, ApiService) {
$scope.analyzeCounter = 0;
$scope.setupReady = false,
$scope.state = {
'gitURL': null,
};
$scope.stepsCompleted = function() {
$scope.analyze({'isValid': $scope.state.gitURL != null});
};
}
};
return directiveDefinitionObject;
});

View file

@ -14,7 +14,6 @@ angular.module('quay').factory('KeyService', ['$location', 'Config', function($l
keyService['githubRedirectUri'] = Config.getUrl('/oauth2/github/callback');
keyService['googleRedirectUri'] = Config.getUrl('/oauth2/google/callback');
keyService['customRedirectUri'] = Config.getUrl('/oauth2/custom/callback');
keyService['githubLoginUrl'] = oauth['GITHUB_LOGIN_CONFIG']['AUTHORIZE_ENDPOINT'];
keyService['googleLoginUrl'] = oauth['GOOGLE_LOGIN_CONFIG']['AUTHORIZE_ENDPOINT'];

View file

@ -2,8 +2,8 @@
* Helper service for defining the various kinds of build triggers and retrieving information
* about them.
*/
angular.module('quay').factory('TriggerService', ['UtilService', '$sanitize', 'KeyService', 'Features', 'CookieService',
function(UtilService, $sanitize, KeyService, Features, CookieService) {
angular.module('quay').factory('TriggerService', ['UtilService', '$sanitize', 'KeyService', 'Features', 'CookieService', 'Config',
function(UtilService, $sanitize, KeyService, Features, CookieService, Config) {
var triggerService = {};
var triggerTypes = {
@ -37,6 +37,7 @@ angular.module('quay').factory('TriggerService', ['UtilService', '$sanitize', 'K
return authorize_url + 'client_id=' + client_id +
'&scope=repo,user:email&redirect_uri=' + redirect_uri;
},
'target': '',
'is_enabled': function() {
return Features.GITHUB_BUILD;
},
@ -71,8 +72,9 @@ angular.module('quay').factory('TriggerService', ['UtilService', '$sanitize', 'K
}
],
'get_redirect_url': function(namespace, repository) {
return KeyService['customRedirectUri'] + '/trigger/' + namespace + '/' + repository;
return Config.getUrl('/customtrigger/setup/' + namespace + '/' + repository);
},
'target': '_self',
'is_enabled': function() { return true; },
'icon': 'fa-git',
'title': function() { return 'Custom Git Repository Push'; }