diff --git a/igor-web/src/main/groovy/com/netflix/spinnaker/igor/build/BuildController.groovy b/igor-web/src/main/groovy/com/netflix/spinnaker/igor/build/BuildController.groovy index 4b336a4ce..3adf52d74 100644 --- a/igor-web/src/main/groovy/com/netflix/spinnaker/igor/build/BuildController.groovy +++ b/igor-web/src/main/groovy/com/netflix/spinnaker/igor/build/BuildController.groovy @@ -132,6 +132,20 @@ class BuildController { return Collections.emptyList() } + + @RequestMapping(value = '/builds/artifacts/{buildNumber}/{master}') + @PreAuthorize("hasPermission(#master, 'BUILD_SERVICE', 'READ')") + List getBuildResults(@PathVariable String master, @PathVariable + Integer buildNumber, @RequestParam("job") String job ,@Query("propertyFile") String propertyFile) { + def buildService = getBuildService(master) + GenericBuild build = jobStatus(buildService, master, job, buildNumber) + if (build && buildService instanceof BuildProperties && artifactExtractor != null) { + build.properties = buildService.getBuildProperties(job, build, propertyFile) + return artifactExtractor.extractArtifacts(build) + } + return Collections.emptyList() + } + @RequestMapping(value = '/builds/queue/{master}/{item}') @PreAuthorize("hasPermission(#master, 'BUILD_SERVICE', 'READ')") Object getQueueLocation(@PathVariable String master, @PathVariable int item) { @@ -335,6 +349,22 @@ class BuildController { return Collections.emptyMap() } + + @RequestMapping(value = '/builds/properties/{buildNumber}/{fileName}/{master}') + @PreAuthorize("hasPermission(#master, 'BUILD_SERVICE', 'READ')") + Map getProperties( + @PathVariable String master, + @PathVariable Integer buildNumber, @PathVariable + String fileName, @RequestParam("job") String job) { + def buildService = getBuildService(master) + if (buildService instanceof BuildProperties) { + BuildProperties buildProperties = (BuildProperties) buildService + def genericBuild = buildService.getGenericBuild(job, buildNumber) + return buildProperties.getBuildProperties(job, genericBuild, fileName) + } + return Collections.emptyMap() + } + private BuildOperations getBuildService(String master) { def buildService = buildServices.getService(master) if (buildService == null) { diff --git a/igor-web/src/test/groovy/com/netflix/spinnaker/igor/build/BuildControllerSpec.groovy b/igor-web/src/test/groovy/com/netflix/spinnaker/igor/build/BuildControllerSpec.groovy index 8553c4943..80baf7b4a 100644 --- a/igor-web/src/test/groovy/com/netflix/spinnaker/igor/build/BuildControllerSpec.groovy +++ b/igor-web/src/test/groovy/com/netflix/spinnaker/igor/build/BuildControllerSpec.groovy @@ -238,6 +238,21 @@ class BuildControllerSpec extends Specification { .andReturn().response } + void 'get properties of a build with job Name in query parameters' () { + given: + 1 * jenkinsService.getGenericBuild(JOB_NAME, BUILD_NUMBER) >> genericBuild + 1 * jenkinsService.getBuildProperties(JOB_NAME, genericBuild, FILE_NAME) >> ['foo': 'bar'] + + when: + MockHttpServletResponse response = mockMvc.perform( + get("/builds/properties/${BUILD_NUMBER}/${FILE_NAME}/${JENKINS_SERVICE}") + .param("job", JOB_NAME) + .accept(MediaType.APPLICATION_JSON)).andReturn().response + + then: + response.contentAsString == "{\"foo\":\"bar\"}" + } + void 'get properties of a travis build'() { given: 1 * travisService.getGenericBuild(JOB_NAME, BUILD_NUMBER) >> genericBuild