feat(server): update job queue when adding, removing or updating targets
ci/woodpecker/pr/lint Pipeline failed
Details
ci/woodpecker/pr/docs Pipeline was successful
Details
ci/woodpecker/pr/build Pipeline was successful
Details
ci/woodpecker/pr/man Pipeline was successful
Details
ci/woodpecker/pr/docker Pipeline was successful
Details
ci/woodpecker/pr/test Pipeline failed
Details
ci/woodpecker/pr/lint Pipeline failed
Details
ci/woodpecker/pr/docs Pipeline was successful
Details
ci/woodpecker/pr/build Pipeline was successful
Details
ci/woodpecker/pr/man Pipeline was successful
Details
ci/woodpecker/pr/docker Pipeline was successful
Details
ci/woodpecker/pr/test Pipeline failed
Details
parent
e742d3de6d
commit
6342789921
|
@ -49,6 +49,13 @@ pub fn new_job_queue(default_schedule CronExpression, default_base_image string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// insert_all executes insert for each architecture of the given Target.
|
||||||
|
pub fn (mut q BuildJobQueue) insert_all(target Target) ! {
|
||||||
|
for arch in target.arch {
|
||||||
|
q.insert(target, arch.value)!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// insert a new target's job into the queue for the given architecture. This
|
// insert a new target's job into the queue for the given architecture. This
|
||||||
// job will then be endlessly rescheduled after being pop'ed, unless removed
|
// job will then be endlessly rescheduled after being pop'ed, unless removed
|
||||||
// explicitely.
|
// explicitely.
|
||||||
|
|
|
@ -12,17 +12,17 @@ fn (mut app App) v1_get_targets() web.Result {
|
||||||
filter := models.from_params<TargetFilter>(app.query) or {
|
filter := models.from_params<TargetFilter>(app.query) or {
|
||||||
return app.json(http.Status.bad_request, new_response('Invalid query parameters.'))
|
return app.json(http.Status.bad_request, new_response('Invalid query parameters.'))
|
||||||
}
|
}
|
||||||
repos := app.db.get_targets(filter)
|
targets := app.db.get_targets(filter)
|
||||||
|
|
||||||
return app.json(.ok, new_data_response(repos))
|
return app.json(.ok, new_data_response(targets))
|
||||||
}
|
}
|
||||||
|
|
||||||
// v1_get_single_target returns the information for a single target.
|
// v1_get_single_target returns the information for a single target.
|
||||||
['/api/v1/targets/:id'; auth; get]
|
['/api/v1/targets/:id'; auth; get]
|
||||||
fn (mut app App) v1_get_single_target(id int) web.Result {
|
fn (mut app App) v1_get_single_target(id int) web.Result {
|
||||||
repo := app.db.get_target(id) or { return app.not_found() }
|
target := app.db.get_target(id) or { return app.not_found() }
|
||||||
|
|
||||||
return app.json(.ok, new_data_response(repo))
|
return app.json(.ok, new_data_response(target))
|
||||||
}
|
}
|
||||||
|
|
||||||
// v1_post_target creates a new target from the provided query string.
|
// v1_post_target creates a new target from the provided query string.
|
||||||
|
@ -30,22 +30,27 @@ fn (mut app App) v1_get_single_target(id int) web.Result {
|
||||||
fn (mut app App) v1_post_target() web.Result {
|
fn (mut app App) v1_post_target() web.Result {
|
||||||
mut params := app.query.clone()
|
mut params := app.query.clone()
|
||||||
|
|
||||||
// If a repo is created without specifying the arch, we assume it's meant
|
// If a target is created without specifying the arch, we assume it's meant
|
||||||
// for the default architecture.
|
// for the default architecture.
|
||||||
if 'arch' !in params || params['arch'] == '' {
|
if 'arch' !in params || params['arch'] == '' {
|
||||||
params['arch'] = app.conf.default_arch
|
params['arch'] = app.conf.default_arch
|
||||||
}
|
}
|
||||||
|
|
||||||
new_repo := models.from_params<Target>(params) or {
|
mut new_target := models.from_params<Target>(params) or {
|
||||||
return app.json(http.Status.bad_request, new_response(err.msg()))
|
return app.json(http.Status.bad_request, new_response(err.msg()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure someone doesn't submit an invalid kind
|
// Ensure someone doesn't submit an invalid kind
|
||||||
if new_repo.kind !in models.valid_kinds {
|
if new_target.kind !in models.valid_kinds {
|
||||||
return app.json(http.Status.bad_request, new_response('Invalid kind.'))
|
return app.json(http.Status.bad_request, new_response('Invalid kind.'))
|
||||||
}
|
}
|
||||||
|
|
||||||
id := app.db.add_target(new_repo)
|
id := app.db.add_target(new_target)
|
||||||
|
new_target.id = id
|
||||||
|
|
||||||
|
// Add the target to the job queue
|
||||||
|
// TODO return better error here if it's the cron schedule that's incorrect
|
||||||
|
app.job_queue.insert_all(new_target) or { return app.status(.internal_server_error) }
|
||||||
|
|
||||||
return app.json(.ok, new_data_response(id))
|
return app.json(.ok, new_data_response(id))
|
||||||
}
|
}
|
||||||
|
@ -54,6 +59,7 @@ fn (mut app App) v1_post_target() web.Result {
|
||||||
['/api/v1/targets/:id'; auth; delete]
|
['/api/v1/targets/:id'; auth; delete]
|
||||||
fn (mut app App) v1_delete_target(id int) web.Result {
|
fn (mut app App) v1_delete_target(id int) web.Result {
|
||||||
app.db.delete_target(id)
|
app.db.delete_target(id)
|
||||||
|
app.job_queue.invalidate(id)
|
||||||
|
|
||||||
return app.json(.ok, new_response(''))
|
return app.json(.ok, new_response(''))
|
||||||
}
|
}
|
||||||
|
@ -69,7 +75,10 @@ fn (mut app App) v1_patch_target(id int) web.Result {
|
||||||
app.db.update_target_archs(id, arch_objs)
|
app.db.update_target_archs(id, arch_objs)
|
||||||
}
|
}
|
||||||
|
|
||||||
repo := app.db.get_target(id) or { return app.status(.internal_server_error) }
|
target := app.db.get_target(id) or { return app.status(.internal_server_error) }
|
||||||
|
|
||||||
return app.json(.ok, new_data_response(repo))
|
app.job_queue.invalidate(id)
|
||||||
|
app.job_queue.insert_all(target) or { return app.status(.internal_server_error) }
|
||||||
|
|
||||||
|
return app.json(.ok, new_data_response(target))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue