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 | ||||
| } | ||||
| 
 | ||||
| pub struct NewTarget { | ||||
| 	kind string | ||||
| 	url string | ||||
| 	branch string | ||||
| 	repo string | ||||
| 	arch []string | ||||
| } | ||||
| 
 | ||||
| // 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> { | ||||
| 	mut params := { | ||||
| 		'url':    url | ||||
| 		'branch': branch | ||||
| 		'repo':   repo | ||||
| 	} | ||||
| 
 | ||||
| 	if arch.len > 0 { | ||||
| 		params['arch'] = arch.join(',') | ||||
| 	} | ||||
| 
 | ||||
| pub fn (c &Client) add_target(t NewTarget) ?Response<string> { | ||||
| 	params := models.params_from<NewTarget>(t) | ||||
| 	data := c.send_request<string>(Method.post, '/api/v1/targets', params)? | ||||
| 
 | ||||
| 	return data | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ module targets | |||
| import cli | ||||
| import vieter.vconf | ||||
| import cron.expression { parse_expression } | ||||
| import client | ||||
| import client { NewTarget } | ||||
| import console | ||||
| import models { TargetFilter } | ||||
| 
 | ||||
|  | @ -65,14 +65,36 @@ pub fn cmd() cli.Command { | |||
| 			}, | ||||
| 			cli.Command{ | ||||
| 				name: 'add' | ||||
| 				required_args: 3 | ||||
| 				usage: 'url branch repo' | ||||
| 				description: 'Add a new Git repository target.' | ||||
| 				required_args: 2 | ||||
| 				usage: 'url repo' | ||||
| 				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) ? { | ||||
| 					config_file := cmd.flags.get_string('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{ | ||||
|  | @ -171,15 +193,15 @@ pub fn cmd() cli.Command { | |||
| fn list(conf Config, filter TargetFilter) ? { | ||||
| 	c := client.new(conf.address, conf.api_key) | ||||
| 	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. | ||||
| fn add(conf Config, url string, branch string, repo string) ? { | ||||
| fn add(conf Config, t &NewTarget) ? { | ||||
| 	c := client.new(conf.address, conf.api_key) | ||||
| 	res := c.add_target(url, branch, repo, [])? | ||||
| 	res := c.add_target(t)? | ||||
| 
 | ||||
| 	println(res.message) | ||||
| } | ||||
|  |  | |||
|  | @ -16,9 +16,13 @@ const ( | |||
| 	migrations_up   = [ | ||||
| 		$embed_file('migrations/001-initial/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. | ||||
|  |  | |||
|  | @ -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 mut: | ||||
| 	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] | ||||
| 	// Branch of the Git repository to use | ||||
| 	branch string [nonull] | ||||
| 	// Branch of the Git repository to use; only applicable when kind is git. | ||||
| 	// If not provided, the repository is cloned with the default branch. | ||||
| 	branch string | ||||
| 	// Which repo the builder should publish packages to | ||||
| 	repo string [nonull] | ||||
| 	// Cron schedule describing how frequently to build the repo. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue