manage (download, pull) pkgbuilds.git, move it inside .cache. add git() convenience wrapper
This commit is contained in:
parent
b191e307aa
commit
52458bd314
4 changed files with 51 additions and 7 deletions
|
@ -32,13 +32,17 @@ CONFIG_DEFAULTS = {
|
||||||
'crossdirect': True,
|
'crossdirect': True,
|
||||||
'threads': 0,
|
'threads': 0,
|
||||||
},
|
},
|
||||||
|
'pkgbuilds': {
|
||||||
|
'git_repo': 'https://gitlab.com/kupfer/packages/pkgbuilds.git',
|
||||||
|
'git_branch': 'dev',
|
||||||
|
},
|
||||||
'paths': {
|
'paths': {
|
||||||
'cache_dir': CACHE_DIR,
|
'cache_dir': CACHE_DIR,
|
||||||
'chroots': os.path.join('%cache_dir%', 'chroots'),
|
'chroots': os.path.join('%cache_dir%', 'chroots'),
|
||||||
'pacman': os.path.join('%cache_dir%', 'pacman'),
|
'pacman': os.path.join('%cache_dir%', 'pacman'),
|
||||||
'jumpdrive': os.path.join('%cache_dir%', 'jumpdrive'),
|
|
||||||
'packages': os.path.join('%cache_dir%', 'packages'),
|
'packages': os.path.join('%cache_dir%', 'packages'),
|
||||||
'pkgbuilds': os.path.abspath(os.getcwd()),
|
'pkgbuilds': os.path.join('%cache_dir%', 'pkgbuilds'),
|
||||||
|
'jumpdrive': os.path.join('%cache_dir%', 'jumpdrive'),
|
||||||
},
|
},
|
||||||
'profiles': {
|
'profiles': {
|
||||||
'current': 'default',
|
'current': 'default',
|
||||||
|
|
44
packages.py
44
packages.py
|
@ -12,7 +12,7 @@ from config import config
|
||||||
from chroot import create_chroot, run_chroot_cmd, try_install_packages, mount_crossdirect, write_cross_makepkg_conf, mount_packages, mount_pacman_cache
|
from chroot import create_chroot, run_chroot_cmd, try_install_packages, mount_crossdirect, write_cross_makepkg_conf, mount_packages, mount_pacman_cache
|
||||||
from distro import get_kupfer_local
|
from distro import get_kupfer_local
|
||||||
from wrapper import enforce_wrap
|
from wrapper import enforce_wrap
|
||||||
from utils import mount, umount
|
from utils import mount, umount, git
|
||||||
from binfmt import register as binfmt_register
|
from binfmt import register as binfmt_register
|
||||||
|
|
||||||
makepkg_env = os.environ.copy() | {
|
makepkg_env = os.environ.copy() | {
|
||||||
|
@ -99,6 +99,36 @@ class Package:
|
||||||
return f'package({self.name},{repr(self.names)})'
|
return f'package({self.name},{repr(self.names)})'
|
||||||
|
|
||||||
|
|
||||||
|
def clone_pkbuilds(pkgbuilds_dir: str, repo_url: str, branch: str, interactive=False):
|
||||||
|
git_dir = os.path.join(pkgbuilds_dir, '.git')
|
||||||
|
if not os.path.exists(git_dir):
|
||||||
|
logging.info('Cloning branch {branch} from {repo}')
|
||||||
|
result = git(['clone', '-b', branch, repo_url, pkgbuilds_dir])
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise Exception('Error cloning pkgbuilds')
|
||||||
|
else:
|
||||||
|
result = git(['--git-dir', git_dir, 'branch', '--show-current'], capture_output=True)
|
||||||
|
current_branch = result.stdout.decode().strip()
|
||||||
|
if current_branch != branch:
|
||||||
|
logging.warning(f'pkgbuilds repository is on the wrong branch: {current_branch}, requested: {branch}')
|
||||||
|
if interactive and click.confirm('Would you like to switch branches?', default=False):
|
||||||
|
result = git(['switch', branch], dir=pkgbuilds_dir)
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise Exception('failed switching branches')
|
||||||
|
if interactive:
|
||||||
|
if click.confirm('Would you like to try updating the PKGBUILDs repo?'):
|
||||||
|
result = git(['pull'], pkgbuilds_dir)
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise Exception('failed to update pkgbuilds')
|
||||||
|
|
||||||
|
|
||||||
|
def init_pkgbuilds(interactive=False):
|
||||||
|
pkgbuilds_dir = config.get_path('pkgbuilds')
|
||||||
|
repo_url = config.file['pkgbuilds']['git_repo']
|
||||||
|
branch = config.file['pkgbuilds']['git_branch']
|
||||||
|
clone_pkbuilds(pkgbuilds_dir, repo_url, branch, interactive=interactive)
|
||||||
|
|
||||||
|
|
||||||
def init_prebuilts(arch: str, dir: str = None):
|
def init_prebuilts(arch: str, dir: str = None):
|
||||||
"""Ensure that all `constants.REPOSITORIES` inside `dir` exist"""
|
"""Ensure that all `constants.REPOSITORIES` inside `dir` exist"""
|
||||||
prebuilts_dir = dir if dir else config.get_package_dir(arch)
|
prebuilts_dir = dir if dir else config.get_package_dir(arch)
|
||||||
|
@ -127,7 +157,7 @@ def discover_packages(dir: str = None) -> dict[str, Package]:
|
||||||
dir = dir if dir else config.get_path('pkgbuilds')
|
dir = dir if dir else config.get_path('pkgbuilds')
|
||||||
packages = {}
|
packages = {}
|
||||||
paths = []
|
paths = []
|
||||||
|
init_pkgbuilds(interactive=False)
|
||||||
for repo in REPOSITORIES:
|
for repo in REPOSITORIES:
|
||||||
for _dir in os.listdir(os.path.join(dir, repo)):
|
for _dir in os.listdir(os.path.join(dir, repo)):
|
||||||
paths.append(os.path.join(repo, _dir))
|
paths.append(os.path.join(repo, _dir))
|
||||||
|
@ -569,6 +599,13 @@ def cmd_packages():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@cmd_packages.command(name='update')
|
||||||
|
@click.option('--non-interactive', is_flag=True)
|
||||||
|
def cmd_update(non_interactive: bool = False):
|
||||||
|
enforce_wrap()
|
||||||
|
init_pkgbuilds(interactive=not non_interactive)
|
||||||
|
|
||||||
|
|
||||||
@cmd_packages.command(name='build')
|
@cmd_packages.command(name='build')
|
||||||
@click.option('--force', is_flag=True, default=False)
|
@click.option('--force', is_flag=True, default=False)
|
||||||
@click.option('--arch', default=None)
|
@click.option('--arch', default=None)
|
||||||
|
@ -608,8 +645,7 @@ def cmd_build(paths: list[str], force=False, arch=None):
|
||||||
@cmd_packages.command(name='clean')
|
@cmd_packages.command(name='clean')
|
||||||
def cmd_clean():
|
def cmd_clean():
|
||||||
enforce_wrap()
|
enforce_wrap()
|
||||||
result = subprocess.run([
|
result = git([
|
||||||
'git',
|
|
||||||
'clean',
|
'clean',
|
||||||
'-dffX',
|
'-dffX',
|
||||||
] + REPOSITORIES)
|
] + REPOSITORIES)
|
||||||
|
|
4
utils.py
4
utils.py
|
@ -41,3 +41,7 @@ def mount(src: str, dest: str, options=['bind'], fs_type=None) -> subprocess.Com
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
atexit.register(umount, dest)
|
atexit.register(umount, dest)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def git(cmd: list[str], dir='.', capture_output=False) -> subprocess.CompletedProcess:
|
||||||
|
return subprocess.run(['git'] + cmd, cwd=dir, capture_output=capture_output)
|
||||||
|
|
|
@ -13,6 +13,7 @@ DOCKER_PATHS = {
|
||||||
'jumpdrive': '/var/cache/jumpdrive',
|
'jumpdrive': '/var/cache/jumpdrive',
|
||||||
'pacman': '/var/cache/pacman',
|
'pacman': '/var/cache/pacman',
|
||||||
'packages': '/prebuilts',
|
'packages': '/prebuilts',
|
||||||
|
'pkgbuilds': '/src',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,7 +104,6 @@ def wrap_docker():
|
||||||
dump_config_file(file_path=wrapped_config, config=(config.file | {'paths': DOCKER_PATHS}))
|
dump_config_file(file_path=wrapped_config, config=(config.file | {'paths': DOCKER_PATHS}))
|
||||||
volumes = {
|
volumes = {
|
||||||
'/dev': '/dev',
|
'/dev': '/dev',
|
||||||
os.getcwd(): '/src',
|
|
||||||
wrapped_config: '/root/.config/kupfer/kupferbootstrap.toml',
|
wrapped_config: '/root/.config/kupfer/kupferbootstrap.toml',
|
||||||
}
|
}
|
||||||
volumes |= dict({config.get_path(vol_name): vol_dest for vol_name, vol_dest in DOCKER_PATHS.items()})
|
volumes |= dict({config.get_path(vol_name): vol_dest for vol_name, vol_dest in DOCKER_PATHS.items()})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue