parent
8279bc1c26
commit
edcbf73386
5 changed files with 34 additions and 0 deletions
|
@ -188,6 +188,13 @@ module Build_artifact = struct
|
|||
Caqti_type.unit
|
||||
"DROP TABLE IF EXISTS build_artifact"
|
||||
|
||||
let get =
|
||||
Caqti_request.find
|
||||
(id `build_artifact)
|
||||
file
|
||||
{| SELECT filepath, localpath, sha256, size
|
||||
FROM build_artifact WHERE id = ? |}
|
||||
|
||||
let get_by_build =
|
||||
Caqti_request.find
|
||||
(Caqti_type.tup2 (id `build) fpath)
|
||||
|
|
|
@ -99,6 +99,7 @@ module Build_artifact : sig
|
|||
val rollback :
|
||||
(unit, unit, [< `Many | `One | `Zero > `Zero ]) Caqti_request.t
|
||||
|
||||
val get : ([`build_artifact] id, file, [< `Many | `One | `Zero > `One]) Caqti_request.t
|
||||
val get_by_build :
|
||||
([`build] id * Fpath.t, [`build_artifact] id * file,
|
||||
[< `Many | `One | `Zero > `One ]) Caqti_request.t
|
||||
|
|
|
@ -130,6 +130,25 @@ let add_routes datadir =
|
|||
|> Lwt_result.ok
|
||||
in
|
||||
|
||||
let redirect_main_binary req =
|
||||
let job_name = Dream.param "job" req
|
||||
and build = Dream.param "build" req in
|
||||
get_uuid build >>= fun uuid ->
|
||||
Dream.sql req (Model.build uuid)
|
||||
|> if_error "Error getting job build"
|
||||
~log:(fun e -> Log.warn (fun m -> m "Error getting job build: %a" pp_error e))
|
||||
>>= fun (_id, build) ->
|
||||
match build.Builder_db.Build.main_binary with
|
||||
| None -> Lwt_result.fail ("Resource not found", `Not_Found)
|
||||
| Some main_binary ->
|
||||
Dream.sql req (Model.build_artifact_by_id main_binary)
|
||||
|> if_error "Error getting main binary" >>= fun main_binary ->
|
||||
Dream.redirect req
|
||||
(Fmt.strf "/job/%s/build/%a/f/%a" job_name Uuidm.pp uuid
|
||||
Fpath.pp main_binary.Builder_db.filepath)
|
||||
|> Lwt_result.ok
|
||||
in
|
||||
|
||||
let job_build req =
|
||||
let job_name = Dream.param "job" req
|
||||
and build = Dream.param "build" req in
|
||||
|
@ -302,6 +321,7 @@ let add_routes datadir =
|
|||
Dream.get "/job/:job/build/latest/**" (w redirect_latest);
|
||||
Dream.get "/job/:job/build/:build/" (w job_build);
|
||||
Dream.get "/job/:job/build/:build/f/**" (w job_build_file);
|
||||
Dream.get "/job/:job/build/:build/main-binary" (w redirect_main_binary);
|
||||
Dream.get "/hash" (w hash);
|
||||
Dream.get "/compare/:build_left/:build_right/opam-switch" (w compare_opam);
|
||||
Dream.post "/upload" (Authorization.authenticate (w upload));
|
||||
|
|
|
@ -36,6 +36,9 @@ let build_artifact build filepath (module Db : CONN) =
|
|||
Db.find_opt Builder_db.Build_artifact.get_by_build_uuid (build, filepath)
|
||||
>>= not_found >|= snd
|
||||
|
||||
let build_artifact_by_id id (module Db : CONN) =
|
||||
Db.find Builder_db.Build_artifact.get id
|
||||
|
||||
let build_artifact_data datadir file =
|
||||
read_file datadir file.Builder_db.localpath
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ val cleanup_staging : Fpath.t -> Caqti_lwt.connection ->
|
|||
val build_artifact : Uuidm.t -> Fpath.t -> Caqti_lwt.connection ->
|
||||
(Builder_db.file, [> error ]) result Lwt.t
|
||||
|
||||
val build_artifact_by_id : [`build_artifact] Builder_db.id -> Caqti_lwt.connection ->
|
||||
(Builder_db.file, [> Caqti_error.call_or_retrieve ]) result Lwt.t
|
||||
|
||||
val build_artifact_data : Fpath.t -> Builder_db.file ->
|
||||
(string, [> error ]) result Lwt.t
|
||||
|
||||
|
|
Loading…
Reference in a new issue