forked from vieter-v/vieter
				
			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