Skip to content

Commit

Permalink
Buildbot UI: fixes related to config.url not existing anymore
Browse files Browse the repository at this point in the history
- Replace config.url logic by use of $location
- modernize the buildrequest page to use breadcrumb, and buildsummary

Signed-off-by: Pierre Tardy <pierre.tardy@intel.com>
  • Loading branch information
Pierre Tardy committed Jan 14, 2015
1 parent d78d4fc commit 185c404
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 57 deletions.
4 changes: 2 additions & 2 deletions master/buildbot/status/master.py
Expand Up @@ -144,15 +144,15 @@ def getMetrics(self):

def getURLForBuild(self, builderid, build_number):
prefix = self.getBuildbotURL()
return prefix + "#builders/%d/builds/%d" % (
return prefix + "#builders/%d/build/%d" % (
builderid,
build_number)

def _getURLForBuildWithBuildername(self, builder_name, build_number):
# dont use this API. this URL is not supported
# its here waiting for getURLForThing removal or switch to deferred
prefix = self.getBuildbotURL()
return prefix + "#builders/%s/builds/%d" % (
return prefix + "#builders/%s/build/%d" % (
urllib.quote(builder_name, safe=''),
build_number)

Expand Down
@@ -1,5 +1,5 @@
class Buildrequest extends Controller
constructor: ($scope, buildbotService, $stateParams, findBuilds) ->
constructor: ($scope, buildbotService, $stateParams, findBuilds, glBreadcrumbService) ->
$scope.$watch "buildrequest.claimed", (n, o) ->
if n # if it is unclaimed, then claimed, we need to try again
findBuilds $scope,
Expand All @@ -8,5 +8,17 @@ class Buildrequest extends Controller

buildbotService.bindHierarchy($scope, $stateParams, ['buildrequests'])
.then ([buildrequest]) ->
buildbotService.one("buildsets", buildrequest.buildsetid)
.bind($scope)
buildbotService.one("builders", buildrequest.builderid).bind($scope).then (builder) ->
breadcrumb = [
caption: "buildrequests"
sref: "buildrequests"
,
caption: builder.name
sref: "builder({builder:#{buildrequest.builderid}})"
,
caption: buildrequest.id
sref: "buildrequest({buildrequest:#{buildrequest.id}})"
]

glBreadcrumbService.setBreadcrumb(breadcrumb)
buildbotService.one("buildsets", buildrequest.buildsetid).bind($scope)
Expand Up @@ -31,14 +31,15 @@ describe 'buildrequest controller', ->
createController = ->
return $controller 'buildrequestController',
$scope: $scope
$httpBackend.expectDataGET('buildrequests/1')
$httpBackend.expectDataGET('builders/1')
$httpBackend.expectDataGET('buildsets/1')
beforeEach(inject(injected))

afterEach ->
$httpBackend.verifyNoOutstandingExpectation()
$httpBackend.verifyNoOutstandingRequest()
it 'should query for buildrequest', ->
$httpBackend.expectDataGET('buildrequests/1')
$httpBackend.expectDataGET('buildsets/1')
controller = createController()
$httpBackend.flush()
$scope.buildrequest.claimed = true
Expand All @@ -49,8 +50,6 @@ describe 'buildrequest controller', ->
$httpBackend.verifyNoOutstandingRequest()

it 'should query for builds again if first query returns 0', ->
$httpBackend.expectDataGET('buildrequests/1')
$httpBackend.expectDataGET('buildsets/1')
controller = createController()
$httpBackend.flush()
$scope.buildrequest.claimed = true
Expand All @@ -73,8 +72,6 @@ describe 'buildrequest controller', ->

it 'should go to build page if build started', ->
$stateParams.redirect_to_build = 1
$httpBackend.expectDataGET('buildrequests/1')
$httpBackend.expectDataGET('buildsets/1')
controller = createController()
$httpBackend.flush()
$scope.buildrequest.claimed = true
Expand All @@ -89,4 +86,4 @@ describe 'buildrequest controller', ->
expect($scope.builds[0].buildid).toBeDefined()
$timeout.flush()
$httpBackend.verifyNoOutstandingRequest()
expect(goneto).toEqual([ 'build', { builder : 2, build : 1 } ])
expect(goneto).toEqual([ 'build', { builder : 3, build : 1 } ])
36 changes: 14 additions & 22 deletions www/base/src/app/builders/buildrequest/buildrequest.tpl.jade
@@ -1,24 +1,16 @@
.container
.row(ng-repeat="build in builds")
.col-sm-4
ul.breadcrumb
li
a(href="#/builders")
| Builders
li
a(href="#/builders/{{build.builderid}}")
| {{buildrequest.buildername}}
li
a(href="#/builders/{{build.builderid}}/build/{{build.number}}")
| {{build.number}}
.row
.col-sm-8
tabset(justified="true")
tab(heading="build {{build.number}}", ng-repeat="build in builds")
rawdata(data="build")
tab(heading="buildrequest")
rawdata(data="buildrequest")
tab(heading="properties")
rawdata(data="buildset.properties")
tab(heading="buildset")
rawdata(data="buildset")
.col-sm-5
h3 Associated builds:
.row(ng-repeat="build in builds")
buildsummary(buildid="build.buildid", condensed='1')
.col-sm-7
tabset(justified="true")
tab(heading="build {{build.number}}", ng-repeat="build in builds")
rawdata(data="build")
tab(heading="buildrequest")
rawdata(data="buildrequest")
tab(heading="properties")
rawdata(data="buildset.properties")
tab(heading="buildset")
rawdata(data="buildset")
Expand Up @@ -10,12 +10,12 @@ class Buildsummary extends Directive('common')
}

class _buildsummary extends Controller('common')
constructor: ($scope, buildbotService, config, resultsService, $urlMatcherFactory) ->

constructor: ($scope, buildbotService, resultsService, $urlMatcherFactory, $location) ->
baseurl = $location.absUrl().split("#")[0]
buildrequestURLMatcher = $urlMatcherFactory.compile(
"#{config.url}#buildrequests/{buildrequestid:[0-9]+}")
"#{baseurl}#buildrequests/{buildrequestid:[0-9]+}")
buildURLMatcher = $urlMatcherFactory.compile(
"#{config.url}#builders/{builderid:[0-9]+}/builds/{buildid:[0-9]+}")
"#{baseurl}#builders/{builderid:[0-9]+}/builds/{buildid:[0-9]+}")

NONE = 0
ONLY_NOT_SUCCESS = 1
Expand Down
Expand Up @@ -2,12 +2,12 @@ beforeEach module 'app'

describe 'buildsummary controller', ->
buildbotService = mqService = $scope = $httpBackend = $rootScope = null
$timeout = createController = $stateParams = results = config = null
$timeout = createController = $stateParams = results = baseurl = null
goneto = null

injected = ($injector) ->
$httpBackend = $injector.get('$httpBackend')
config = $injector.get('config')
$location = $injector.get('$location')
decorateHttpBackend($httpBackend)
results = $injector.get('RESULTS')
$rootScope = $injector.get('$rootScope')
Expand All @@ -25,6 +25,8 @@ describe 'buildsummary controller', ->
$stateParams = $injector.get('$stateParams')
$controller = $injector.get('$controller')
$q = $injector.get('$q')
baseurl = $location.absUrl().split("#")[0]

# stub out the actual backend of mqservice
spyOn(mqService,"setBaseUrl").and.returnValue(null)
spyOn(mqService,"startConsuming").and.returnValue($q.when( -> ))
Expand Down Expand Up @@ -78,30 +80,27 @@ describe 'buildsummary controller', ->
$scope.toggleDetails()

it 'should provide correct getBuildRequestIDFromURL', ->
config.url = 'http://localhost:5000/'
controller = createController()
$httpBackend.flush()
expect($scope.getBuildRequestIDFromURL("http://localhost:5000/#buildrequests/123"))
expect($scope.getBuildRequestIDFromURL("#{baseurl}#buildrequests/123"))
.toBe(123)

it 'should provide correct isBuildRequestURL', ->
config.url = 'http://localhost:5000/'
controller = createController()
$httpBackend.flush()
expect($scope.isBuildRequestURL("http://localhost:5000/#buildrequests/123"))
expect($scope.isBuildRequestURL("#{baseurl}#buildrequests/123"))
.toBe(true)
expect($scope.isBuildRequestURL("http://otherdomain:5000/#buildrequests/123"))
.toBe(false)
expect($scope.isBuildRequestURL("http://localhost:5000/#build/123"))
expect($scope.isBuildRequestURL("#{baseurl}#build/123"))
.toBe(false)
expect($scope.isBuildRequestURL("http://localhost:5000/#buildrequests/bla"))
expect($scope.isBuildRequestURL("#{baseurl}#buildrequests/bla"))
.toBe(false)

it 'should provide correct isBuildURL', ->
config.url = 'http://localhost:5000/'
controller = createController()
$httpBackend.flush()
expect($scope.isBuildURL("http://localhost:5000/#builders/123/builds/123"))
expect($scope.isBuildURL("#{baseurl}#builders/123/builds/123"))
.toBe(true)
expect($scope.isBuildURL("http://localhost:5000/#builders/sdf/builds/123"))
expect($scope.isBuildURL("#{baseurl}#builders/sdf/builds/123"))
.toBe(false)
Expand Up @@ -9,7 +9,8 @@ class Loginbar extends Directive('common')
}

class _loginbar extends Controller('common')
constructor: ($scope, config, $http) ->
constructor: ($scope, config, $http, $location) ->
baseurl = $location.absUrl().split("#")[0]
$scope.username = ""
$scope.password = ""
$scope.loginCollapsed = 1
Expand All @@ -22,22 +23,22 @@ class _loginbar extends Controller('common')
$http.defaults.headers.common['Authorization'] = auth
$http
method: "GET"
url: "#{config.url}auth/login"
url: "#{baseurl}auth/login"
.success (data, status) ->
window.location.reload()

$scope.logout = ->
$http.defaults.headers.common = {}
$http
method: "GET"
url: "#{config.url}auth/logout"
url: "#{baseurl}auth/logout"
.success (data, status) ->
window.location.reload()
$scope.loginoauth2 = ->
$http
method: "GET"
url: "#{config.url}auth/login"
url: "#{baseurl}auth/login"
.success (data, status) ->
document.location = data
if config.auth.autologin and config.user.anonymous and config.auth.oauth2
$scope.loginoauth2()
$scope.loginoauth2()
7 changes: 4 additions & 3 deletions www/codeparameter/src/module/codefield.directive.coffee
Expand Up @@ -7,8 +7,9 @@ class Codeparameter extends App

# setup ace to fetch its module from the plugin baseURL
class AceConfig extends Run
constructor: (config) ->
window.ace.config.set("basePath", config.url + "codeparameter")
constructor: ($location) ->
baseurl = $location.absUrl().split("#")[0]
window.ace.config.set("basePath", "#{baseurl}codeparameter")

# defines custom field directives which only have templates
class Codefield extends Directive
Expand All @@ -18,4 +19,4 @@ class Codefield extends Directive
restrict: 'E'
scope: false
templateUrl: "codeparameter/views/codefield.html"
}
}

0 comments on commit 185c404

Please sign in to comment.