Add ability to see a build's build pack, including browsing and downloading of the contents if it is a zip
This commit is contained in:
parent
7bf6936154
commit
bc0d51656a
12 changed files with 936 additions and 637 deletions
|
@ -1149,7 +1149,7 @@ def get_repo(namespace, repository):
|
|||
abort(403) # Permission denied
|
||||
|
||||
|
||||
def build_status_view(build_obj):
|
||||
def build_status_view(build_obj, can_write=False):
|
||||
status = build_logs.get_status(build_obj.uuid)
|
||||
return {
|
||||
'id': build_obj.uuid,
|
||||
|
@ -1157,7 +1157,8 @@ def build_status_view(build_obj):
|
|||
'started': build_obj.started,
|
||||
'display_name': build_obj.display_name,
|
||||
'status': status,
|
||||
'resource_key': build_obj.resource_key
|
||||
'resource_key': build_obj.resource_key if can_write else None,
|
||||
'is_writer': can_write
|
||||
}
|
||||
|
||||
|
||||
|
@ -1167,9 +1168,10 @@ def get_repo_builds(namespace, repository):
|
|||
permission = ReadRepositoryPermission(namespace, repository)
|
||||
is_public = model.repository_is_public(namespace, repository)
|
||||
if permission.can() or is_public:
|
||||
can_write = ModifyRepositoryPermission(namespace, repository).can()
|
||||
builds = model.list_repository_builds(namespace, repository)
|
||||
return jsonify({
|
||||
'builds': [build_status_view(build) for build in builds]
|
||||
'builds': [build_status_view(build, can_write) for build in builds]
|
||||
})
|
||||
|
||||
abort(403) # Permission denied
|
||||
|
@ -1183,7 +1185,29 @@ def get_repo_build_status(namespace, repository, build_uuid):
|
|||
is_public = model.repository_is_public(namespace, repository)
|
||||
if permission.can() or is_public:
|
||||
build = model.get_repository_build(namespace, repository, build_uuid)
|
||||
return jsonify(build_status_view(build))
|
||||
if not build:
|
||||
abort(404)
|
||||
|
||||
can_write = ModifyRepositoryPermission(namespace, repository).can()
|
||||
return jsonify(build_status_view(build, can_write))
|
||||
|
||||
abort(403) # Permission denied
|
||||
|
||||
|
||||
@api.route('/repository/<path:repository>/build/<build_uuid>/archiveurl',
|
||||
methods=['GET'])
|
||||
@parse_repository_name
|
||||
def get_repo_build_archive_url(namespace, repository, build_uuid):
|
||||
permission = ModifyRepositoryPermission(namespace, repository)
|
||||
if permission.can():
|
||||
build = model.get_repository_build(namespace, repository, build_uuid)
|
||||
if not build:
|
||||
abort(404)
|
||||
|
||||
url = user_files.get_file_url(build.resource_key)
|
||||
return jsonify({
|
||||
'url': url
|
||||
})
|
||||
|
||||
abort(403) # Permission denied
|
||||
|
||||
|
@ -1249,7 +1273,7 @@ def request_repo_build(namespace, repository):
|
|||
{'repo': repository, 'namespace': namespace,
|
||||
'fileid': dockerfile_id}, repo=repo)
|
||||
|
||||
resp = jsonify(build_status_view(build_request))
|
||||
resp = jsonify(build_status_view(build_request, True))
|
||||
repo_string = '%s/%s' % (namespace, repository)
|
||||
resp.headers['Location'] = url_for('api.get_repo_build_status',
|
||||
repository=repo_string,
|
||||
|
|
Reference in a new issue