feat(build): added support for 'url' kind
							parent
							
								
									bd07964509
								
							
						
					
					
						commit
						8f91c1fde5
					
				|  | @ -4,8 +4,8 @@ echo -e '+ pacman -Syu --needed --noconfirm' | |||
| pacman -Syu --needed --noconfirm | ||||
| echo -e '+ su builder' | ||||
| su builder | ||||
| echo -e '+ git clone --single-branch --depth 1 --branch main https://examplerepo.com repo' | ||||
| git clone --single-branch --depth 1 --branch main https://examplerepo.com repo | ||||
| echo -e '+ git clone --single-branch --depth 1 '\''https://examplerepo.com'\'' repo' | ||||
| git clone --single-branch --depth 1 'https://examplerepo.com' repo | ||||
| echo -e '+ cd repo' | ||||
| cd repo | ||||
| echo -e '+ makepkg --nobuild --syncdeps --needed --noconfirm' | ||||
|  | @ -0,0 +1,20 @@ | |||
| echo -e '+ echo -e '\''[vieter]\\nServer = https://example.com/$repo/$arch\\nSigLevel = Optional'\'' >> /etc/pacman.conf' | ||||
| echo -e '[vieter]\nServer = https://example.com/$repo/$arch\nSigLevel = Optional' >> /etc/pacman.conf | ||||
| echo -e '+ pacman -Syu --needed --noconfirm' | ||||
| pacman -Syu --needed --noconfirm | ||||
| echo -e '+ su builder' | ||||
| su builder | ||||
| echo -e '+ git clone --single-branch --depth 1 --branch main '\''https://examplerepo.com'\'' repo' | ||||
| git clone --single-branch --depth 1 --branch main 'https://examplerepo.com' repo | ||||
| echo -e '+ cd repo' | ||||
| cd repo | ||||
| echo -e '+ makepkg --nobuild --syncdeps --needed --noconfirm' | ||||
| makepkg --nobuild --syncdeps --needed --noconfirm | ||||
| echo -e '+ source PKGBUILD' | ||||
| source PKGBUILD | ||||
| echo -e '+ curl -s --head --fail https://example.com/vieter/x86_64/$pkgname-$pkgver-$pkgrel && exit 0' | ||||
| curl -s --head --fail https://example.com/vieter/x86_64/$pkgname-$pkgver-$pkgrel && exit 0 | ||||
| echo -e '+ [ "$(id -u)" == 0 ] && exit 0' | ||||
| [ "$(id -u)" == 0 ] && exit 0 | ||||
| echo -e '+ MAKEFLAGS="-j$(nproc)" makepkg -s --noconfirm --needed && for pkg in $(ls -1 *.pkg*); do curl -XPOST -T "$pkg" -H "X-API-KEY: $API_KEY" https://example.com/vieter/publish; done' | ||||
| MAKEFLAGS="-j$(nproc)" makepkg -s --noconfirm --needed && for pkg in $(ls -1 *.pkg*); do curl -XPOST -T "$pkg" -H "X-API-KEY: $API_KEY" https://example.com/vieter/publish; done | ||||
|  | @ -0,0 +1,22 @@ | |||
| echo -e '+ echo -e '\''[vieter]\\nServer = https://example.com/$repo/$arch\\nSigLevel = Optional'\'' >> /etc/pacman.conf' | ||||
| echo -e '[vieter]\nServer = https://example.com/$repo/$arch\nSigLevel = Optional' >> /etc/pacman.conf | ||||
| echo -e '+ pacman -Syu --needed --noconfirm' | ||||
| pacman -Syu --needed --noconfirm | ||||
| echo -e '+ su builder' | ||||
| su builder | ||||
| echo -e '+ mkdir repo' | ||||
| mkdir repo | ||||
| echo -e '+ curl -o repo/PKGBUILD -L '\''https://examplerepo.com'\''' | ||||
| curl -o repo/PKGBUILD -L 'https://examplerepo.com' | ||||
| echo -e '+ cd repo' | ||||
| cd repo | ||||
| echo -e '+ makepkg --nobuild --syncdeps --needed --noconfirm' | ||||
| makepkg --nobuild --syncdeps --needed --noconfirm | ||||
| echo -e '+ source PKGBUILD' | ||||
| source PKGBUILD | ||||
| echo -e '+ curl -s --head --fail https://example.com/vieter/x86_64/$pkgname-$pkgver-$pkgrel && exit 0' | ||||
| curl -s --head --fail https://example.com/vieter/x86_64/$pkgname-$pkgver-$pkgrel && exit 0 | ||||
| echo -e '+ [ "$(id -u)" == 0 ] && exit 0' | ||||
| [ "$(id -u)" == 0 ] && exit 0 | ||||
| echo -e '+ MAKEFLAGS="-j$(nproc)" makepkg -s --noconfirm --needed && for pkg in $(ls -1 *.pkg*); do curl -XPOST -T "$pkg" -H "X-API-KEY: $API_KEY" https://example.com/vieter/publish; done' | ||||
| MAKEFLAGS="-j$(nproc)" makepkg -s --noconfirm --needed && for pkg in $(ls -1 *.pkg*); do curl -XPOST -T "$pkg" -H "X-API-KEY: $API_KEY" https://example.com/vieter/publish; done | ||||
|  | @ -23,20 +23,45 @@ pub fn echo_commands(cmds []string) []string { | |||
| } | ||||
| 
 | ||||
| // create_build_script generates a shell script that builds a given Target. | ||||
| fn create_build_script(address string, repo &Target, build_arch string) string { | ||||
| 	repo_url := '$address/$repo.repo' | ||||
| fn create_build_script(address string, target &Target, build_arch string) string { | ||||
| 	repo_url := '$address/$target.repo' | ||||
| 
 | ||||
| 	commands := echo_commands([ | ||||
| 	mut commands := [ | ||||
| 		// This will later be replaced by a proper setting for changing the | ||||
| 		// mirrorlist | ||||
| 		"echo -e '[$repo.repo]\\nServer = $address/\$repo/\$arch\\nSigLevel = Optional' >> /etc/pacman.conf" | ||||
| 		"echo -e '[$target.repo]\\nServer = $address/\$repo/\$arch\\nSigLevel = Optional' >> /etc/pacman.conf" | ||||
| 		// We need to update the package list of the repo we just added above. | ||||
| 		// This should however not pull in a lot of packages as long as the | ||||
| 		// builder image is rebuilt frequently. | ||||
| 		'pacman -Syu --needed --noconfirm', | ||||
| 		// makepkg can't run as root | ||||
| 		'su builder', | ||||
| 		'git clone --single-branch --depth 1 --branch $repo.branch $repo.url repo', | ||||
| 	] | ||||
| 
 | ||||
| 	commands << match target.kind { | ||||
| 		'git' { | ||||
| 			if target.branch == '' { | ||||
| 				[ | ||||
| 					"git clone --single-branch --depth 1 '$target.url' repo", | ||||
| 				] | ||||
| 			} else { | ||||
| 				[ | ||||
| 					"git clone --single-branch --depth 1 --branch $target.branch '$target.url' repo", | ||||
| 				] | ||||
| 			} | ||||
| 		} | ||||
| 		'url' { | ||||
| 			[ | ||||
| 				'mkdir repo', | ||||
| 				"curl -o repo/PKGBUILD -L '$target.url'", | ||||
| 			] | ||||
| 		} | ||||
| 		else { | ||||
| 			panic("Invalid kind. This shouldn't be possible.") | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	commands << [ | ||||
| 		'cd repo', | ||||
| 		'makepkg --nobuild --syncdeps --needed --noconfirm', | ||||
| 		'source PKGBUILD', | ||||
|  | @ -49,7 +74,7 @@ fn create_build_script(address string, repo &Target, build_arch string) string { | |||
| 		// we're in root so we don't proceed. | ||||
| 		'[ "\$(id -u)" == 0 ] && exit 0', | ||||
| 		'MAKEFLAGS="-j\$(nproc)" makepkg -s --noconfirm --needed && for pkg in \$(ls -1 *.pkg*); do curl -XPOST -T "\$pkg" -H "X-API-KEY: \$API_KEY" $repo_url/publish; done', | ||||
| 	]) | ||||
| 	] | ||||
| 
 | ||||
| 	return commands.join('\n') | ||||
| 	return echo_commands(commands).join('\n') | ||||
| } | ||||
|  |  | |||
|  | @ -2,15 +2,42 @@ module build | |||
| 
 | ||||
| import models { Target } | ||||
| 
 | ||||
| fn test_create_build_script() { | ||||
| fn test_create_build_script_git_branch() { | ||||
| 	target := Target{ | ||||
| 		id: 1 | ||||
| 		kind: 'git' | ||||
| 		url: 'https://examplerepo.com' | ||||
| 		branch: 'main' | ||||
| 		repo: 'vieter' | ||||
| 	} | ||||
| 	build_script := create_build_script('https://example.com', target, 'x86_64') | ||||
| 	expected := $embed_file('build_script.sh') | ||||
| 	expected := $embed_file('build_script_git_branch.sh') | ||||
| 
 | ||||
| 	assert build_script == expected.to_string().trim_space() | ||||
| } | ||||
| 
 | ||||
| fn test_create_build_script_git() { | ||||
| 	target := Target{ | ||||
| 		id: 1 | ||||
| 		kind: 'git' | ||||
| 		url: 'https://examplerepo.com' | ||||
| 		repo: 'vieter' | ||||
| 	} | ||||
| 	build_script := create_build_script('https://example.com', target, 'x86_64') | ||||
| 	expected := $embed_file('build_script_git.sh') | ||||
| 
 | ||||
| 	assert build_script == expected.to_string().trim_space() | ||||
| } | ||||
| 
 | ||||
| fn test_create_build_script_url() { | ||||
| 	target := Target{ | ||||
| 		id: 1 | ||||
| 		kind: 'url' | ||||
| 		url: 'https://examplerepo.com' | ||||
| 		repo: 'vieter' | ||||
| 	} | ||||
| 	build_script := create_build_script('https://example.com', target, 'x86_64') | ||||
| 	expected := $embed_file('build_script_url.sh') | ||||
| 
 | ||||
| 	assert build_script == expected.to_string().trim_space() | ||||
| } | ||||
|  |  | |||
|  | @ -123,11 +123,11 @@ pub fn cmd() cli.Command { | |||
| 				name: 'edit' | ||||
| 				required_args: 1 | ||||
| 				usage: 'id' | ||||
| 				description: 'Edit the Git repository target that matches the given id.' | ||||
| 				description: 'Edit the target that matches the given id.' | ||||
| 				flags: [ | ||||
| 					cli.Flag{ | ||||
| 						name: 'url' | ||||
| 						description: 'URL of the Git repository.' | ||||
| 						description: 'URL value. Meaning depends on kind of target.' | ||||
| 						flag: cli.FlagType.string | ||||
| 					}, | ||||
| 					cli.Flag{ | ||||
|  | @ -211,7 +211,6 @@ fn add(conf Config, t &NewTarget) ? { | |||
| 
 | ||||
| // remove removes a repository from the server's list. | ||||
| fn remove(conf Config, id string) ? { | ||||
| 	// id, _ := get_repo_by_prefix(conf, id_prefix) ? | ||||
| 	id_int := id.int() | ||||
| 
 | ||||
| 	if id_int != 0 { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue