forked from vieter-v/vieter
feat: added ability to specify kind of target
parent
10ad8297fb
commit
bb5643bb03
|
@ -40,18 +40,17 @@ pub fn (c &Client) get_target(id int) ?Target {
|
||||||
return data.data
|
return data.data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct NewTarget {
|
||||||
|
kind string
|
||||||
|
url string
|
||||||
|
branch string
|
||||||
|
repo string
|
||||||
|
arch []string
|
||||||
|
}
|
||||||
|
|
||||||
// add_target adds a new target to the server.
|
// add_target adds a new target to the server.
|
||||||
pub fn (c &Client) add_target(url string, branch string, repo string, arch []string) ?Response<string> {
|
pub fn (c &Client) add_target(t NewTarget) ?Response<string> {
|
||||||
mut params := {
|
params := models.params_from<NewTarget>(t)
|
||||||
'url': url
|
|
||||||
'branch': branch
|
|
||||||
'repo': repo
|
|
||||||
}
|
|
||||||
|
|
||||||
if arch.len > 0 {
|
|
||||||
params['arch'] = arch.join(',')
|
|
||||||
}
|
|
||||||
|
|
||||||
data := c.send_request<string>(Method.post, '/api/v1/targets', params)?
|
data := c.send_request<string>(Method.post, '/api/v1/targets', params)?
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
|
@ -3,7 +3,7 @@ module targets
|
||||||
import cli
|
import cli
|
||||||
import vieter.vconf
|
import vieter.vconf
|
||||||
import cron.expression { parse_expression }
|
import cron.expression { parse_expression }
|
||||||
import client
|
import client { NewTarget }
|
||||||
import console
|
import console
|
||||||
import models { TargetFilter }
|
import models { TargetFilter }
|
||||||
|
|
||||||
|
@ -65,14 +65,36 @@ pub fn cmd() cli.Command {
|
||||||
},
|
},
|
||||||
cli.Command{
|
cli.Command{
|
||||||
name: 'add'
|
name: 'add'
|
||||||
required_args: 3
|
required_args: 2
|
||||||
usage: 'url branch repo'
|
usage: 'url repo'
|
||||||
description: 'Add a new Git repository target.'
|
description: "Add a new target with the given URL & target repo."
|
||||||
|
flags: [
|
||||||
|
cli.Flag{
|
||||||
|
name: 'kind'
|
||||||
|
description: "Kind of target to add. Defaults to 'git' if not specified. One of 'git', 'url'."
|
||||||
|
flag: cli.FlagType.string
|
||||||
|
default_value: ['git']
|
||||||
|
},
|
||||||
|
cli.Flag{
|
||||||
|
name: 'branch'
|
||||||
|
description: "Which branch to clone; only applies to kind 'git'."
|
||||||
|
flag: cli.FlagType.string
|
||||||
|
}
|
||||||
|
]
|
||||||
execute: fn (cmd cli.Command) ? {
|
execute: fn (cmd cli.Command) ? {
|
||||||
config_file := cmd.flags.get_string('config-file')?
|
config_file := cmd.flags.get_string('config-file')?
|
||||||
conf := vconf.load<Config>(prefix: 'VIETER_', default_path: config_file)?
|
conf := vconf.load<Config>(prefix: 'VIETER_', default_path: config_file)?
|
||||||
|
|
||||||
add(conf, cmd.args[0], cmd.args[1], cmd.args[2])?
|
kind := cmd.flags.get_string('kind')?
|
||||||
|
|
||||||
|
t := NewTarget{
|
||||||
|
kind: cmd.flags.get_string('kind')?
|
||||||
|
url: cmd.args[0]
|
||||||
|
repo: cmd.args[1]
|
||||||
|
branch: cmd.flags.get_string('branch') or { '' }
|
||||||
|
}
|
||||||
|
|
||||||
|
add(conf, t)?
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
cli.Command{
|
cli.Command{
|
||||||
|
@ -171,15 +193,15 @@ pub fn cmd() cli.Command {
|
||||||
fn list(conf Config, filter TargetFilter) ? {
|
fn list(conf Config, filter TargetFilter) ? {
|
||||||
c := client.new(conf.address, conf.api_key)
|
c := client.new(conf.address, conf.api_key)
|
||||||
repos := c.get_targets(filter)?
|
repos := c.get_targets(filter)?
|
||||||
data := repos.map([it.id.str(), it.url, it.branch, it.repo])
|
data := repos.map([it.id.str(), it.kind, it.url, it.repo])
|
||||||
|
|
||||||
println(console.pretty_table(['id', 'url', 'branch', 'repo'], data)?)
|
println(console.pretty_table(['id', 'kind', 'url', 'repo'], data)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
// add adds a new repository to the server's list.
|
// add adds a new repository to the server's list.
|
||||||
fn add(conf Config, url string, branch string, repo string) ? {
|
fn add(conf Config, t &NewTarget) ? {
|
||||||
c := client.new(conf.address, conf.api_key)
|
c := client.new(conf.address, conf.api_key)
|
||||||
res := c.add_target(url, branch, repo, [])?
|
res := c.add_target(t)?
|
||||||
|
|
||||||
println(res.message)
|
println(res.message)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,13 @@ const (
|
||||||
migrations_up = [
|
migrations_up = [
|
||||||
$embed_file('migrations/001-initial/up.sql'),
|
$embed_file('migrations/001-initial/up.sql'),
|
||||||
$embed_file('migrations/002-rename-to-targets/up.sql'),
|
$embed_file('migrations/002-rename-to-targets/up.sql'),
|
||||||
|
$embed_file('migrations/003-target-url-type/up.sql'),
|
||||||
|
]
|
||||||
|
migrations_down = [
|
||||||
|
$embed_file('migrations/001-initial/down.sql'),
|
||||||
|
$embed_file('migrations/002-rename-to-targets/down.sql'),
|
||||||
|
$embed_file('migrations/003-target-url-type/down.sql'),
|
||||||
]
|
]
|
||||||
migrations_down = [$embed_file('migrations/001-initial/down.sql'),
|
|
||||||
$embed_file('migrations/002-rename-to-targets/down.sql')]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// init initializes a database & adds the correct tables.
|
// init initializes a database & adds the correct tables.
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- I'm not sure whether I should remove any non-git targets here. Keeping them
|
||||||
|
-- will result in invalid targets, but removing them means losing data.
|
||||||
|
ALTER TABLE Target DROP COLUMN kind;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE Target ADD COLUMN kind TEXT NOT NULL DEFAULT 'git';
|
|
@ -15,10 +15,13 @@ pub fn (gra &TargetArch) str() string {
|
||||||
pub struct Target {
|
pub struct Target {
|
||||||
pub mut:
|
pub mut:
|
||||||
id int [primary; sql: serial]
|
id int [primary; sql: serial]
|
||||||
// URL of the Git repository
|
kind string [nonull]
|
||||||
|
// If kind is git: URL of the Git repository
|
||||||
|
// If kind is url: URL to PKGBUILD file
|
||||||
url string [nonull]
|
url string [nonull]
|
||||||
// Branch of the Git repository to use
|
// Branch of the Git repository to use; only applicable when kind is git.
|
||||||
branch string [nonull]
|
// If not provided, the repository is cloned with the default branch.
|
||||||
|
branch string
|
||||||
// Which repo the builder should publish packages to
|
// Which repo the builder should publish packages to
|
||||||
repo string [nonull]
|
repo string [nonull]
|
||||||
// Cron schedule describing how frequently to build the repo.
|
// Cron schedule describing how frequently to build the repo.
|
||||||
|
|
Loading…
Reference in New Issue