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
|
pacman -Syu --needed --noconfirm
|
||||||
echo -e '+ su builder'
|
echo -e '+ su builder'
|
||||||
su builder
|
su builder
|
||||||
echo -e '+ 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 --branch main https://examplerepo.com repo
|
git clone --single-branch --depth 1 'https://examplerepo.com' repo
|
||||||
echo -e '+ cd repo'
|
echo -e '+ cd repo'
|
||||||
cd repo
|
cd repo
|
||||||
echo -e '+ makepkg --nobuild --syncdeps --needed --noconfirm'
|
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.
|
// create_build_script generates a shell script that builds a given Target.
|
||||||
fn create_build_script(address string, repo &Target, build_arch string) string {
|
fn create_build_script(address string, target &Target, build_arch string) string {
|
||||||
repo_url := '$address/$repo.repo'
|
repo_url := '$address/$target.repo'
|
||||||
|
|
||||||
commands := echo_commands([
|
mut commands := [
|
||||||
// This will later be replaced by a proper setting for changing the
|
// This will later be replaced by a proper setting for changing the
|
||||||
// mirrorlist
|
// 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.
|
// 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
|
// This should however not pull in a lot of packages as long as the
|
||||||
// builder image is rebuilt frequently.
|
// builder image is rebuilt frequently.
|
||||||
'pacman -Syu --needed --noconfirm',
|
'pacman -Syu --needed --noconfirm',
|
||||||
// makepkg can't run as root
|
// makepkg can't run as root
|
||||||
'su builder',
|
'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',
|
'cd repo',
|
||||||
'makepkg --nobuild --syncdeps --needed --noconfirm',
|
'makepkg --nobuild --syncdeps --needed --noconfirm',
|
||||||
'source PKGBUILD',
|
'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.
|
// we're in root so we don't proceed.
|
||||||
'[ "\$(id -u)" == 0 ] && exit 0',
|
'[ "\$(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',
|
'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 }
|
import models { Target }
|
||||||
|
|
||||||
fn test_create_build_script() {
|
fn test_create_build_script_git_branch() {
|
||||||
target := Target{
|
target := Target{
|
||||||
id: 1
|
id: 1
|
||||||
|
kind: 'git'
|
||||||
url: 'https://examplerepo.com'
|
url: 'https://examplerepo.com'
|
||||||
branch: 'main'
|
branch: 'main'
|
||||||
repo: 'vieter'
|
repo: 'vieter'
|
||||||
}
|
}
|
||||||
build_script := create_build_script('https://example.com', target, 'x86_64')
|
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()
|
assert build_script == expected.to_string().trim_space()
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,11 +123,11 @@ pub fn cmd() cli.Command {
|
||||||
name: 'edit'
|
name: 'edit'
|
||||||
required_args: 1
|
required_args: 1
|
||||||
usage: 'id'
|
usage: 'id'
|
||||||
description: 'Edit the Git repository target that matches the given id.'
|
description: 'Edit the target that matches the given id.'
|
||||||
flags: [
|
flags: [
|
||||||
cli.Flag{
|
cli.Flag{
|
||||||
name: 'url'
|
name: 'url'
|
||||||
description: 'URL of the Git repository.'
|
description: 'URL value. Meaning depends on kind of target.'
|
||||||
flag: cli.FlagType.string
|
flag: cli.FlagType.string
|
||||||
},
|
},
|
||||||
cli.Flag{
|
cli.Flag{
|
||||||
|
@ -211,7 +211,6 @@ fn add(conf Config, t &NewTarget) ? {
|
||||||
|
|
||||||
// remove removes a repository from the server's list.
|
// remove removes a repository from the server's list.
|
||||||
fn remove(conf Config, id string) ? {
|
fn remove(conf Config, id string) ? {
|
||||||
// id, _ := get_repo_by_prefix(conf, id_prefix) ?
|
|
||||||
id_int := id.int()
|
id_int := id.int()
|
||||||
|
|
||||||
if id_int != 0 {
|
if id_int != 0 {
|
||||||
|
|
Loading…
Reference in New Issue