builder: main.py: add --clean for cleanup workspace

Signed-off-by: BigfootACA <bigfoot@classfun.cn>
This commit is contained in:
BigfootACA 2024-05-21 17:21:56 +08:00
parent 245a0ab00f
commit 8baedd5358
4 changed files with 24 additions and 0 deletions

View File

@ -30,6 +30,7 @@ python build.py -c target/ayn-odin2-sdcard,locale/zh-cn,desktop/gnome
| Option | Description | | Option | Description |
|-------------------------------------|----------------------------------| |-------------------------------------|----------------------------------|
| -C, --clean | Clean workspace before build |
| -p PRESET, --preset PRESET | Select preset to create package | | -p PRESET, --preset PRESET | Select preset to create package |
| -c CONFIG, --config CONFIG | Select configs to build | | -c CONFIG, --config CONFIG | Select configs to build |
| -o WORKSPACE, --workspace WORKSPACE | Set workspace for builder | | -o WORKSPACE, --workspace WORKSPACE | Set workspace for builder |

View File

@ -7,6 +7,7 @@ from builder.build import locale, systemd, mkinitcpio, names
from builder.build import pacman as pacman_build from builder.build import pacman as pacman_build
from builder.component import pacman as pacman_comp from builder.component import pacman as pacman_comp
from builder.lib.context import ArchBuilderContext from builder.lib.context import ArchBuilderContext
from builder.lib.mount import MountTab
log = getLogger(__name__) log = getLogger(__name__)
@ -51,12 +52,27 @@ def do_copy(ctx: ArchBuilderContext, src: str, dst: str):
if ret != 0: raise OSError("rsync failed") if ret != 0: raise OSError("rsync failed")
def remove_workspace(ctx: ArchBuilderContext):
# ensure mount point is clean
mnts = MountTab.parse_mounts()
if any(mnts.find_folder(ctx.work)):
raise RuntimeError("mount points not cleanup")
# DANGEROUS: fully remove workspace
log.info(f"cleaning workspace {ctx.work}")
shutil.rmtree(ctx.work)
def build_rootfs(ctx: ArchBuilderContext): def build_rootfs(ctx: ArchBuilderContext):
""" """
Build whole rootfs and generate image Build whole rootfs and generate image
""" """
log.info("building rootfs") log.info("building rootfs")
# clean workspace
if ctx.clean and os.path.exists(ctx.work):
remove_workspace(ctx)
# create folders # create folders
os.makedirs(ctx.work, mode=0o755, exist_ok=True) os.makedirs(ctx.work, mode=0o755, exist_ok=True)
os.makedirs(ctx.get_rootfs(), mode=0o0755, exist_ok=True) os.makedirs(ctx.get_rootfs(), mode=0o0755, exist_ok=True)

View File

@ -43,6 +43,11 @@ class ArchBuilderContext:
""" """
repack: bool = False repack: bool = False
"""
Clean workspace before rebuild
"""
clean: bool = False
""" """
Top tree folder Top tree folder
""" """

View File

@ -15,6 +15,7 @@ def parse_arguments(ctx: ArchBuilderContext):
prog="arch-image-builder", prog="arch-image-builder",
description="Build flashable image for Arch Linux", description="Build flashable image for Arch Linux",
) )
parser.add_argument("-C", "--clean", help="Clean workspace before build", default=False, action='store_true')
parser.add_argument("-p", "--preset", help="Select preset to create package") parser.add_argument("-p", "--preset", help="Select preset to create package")
parser.add_argument("-c", "--config", help="Select config to build", action='append') parser.add_argument("-c", "--config", help="Select config to build", action='append')
parser.add_argument("-o", "--workspace", help="Set workspace for builder", default=ctx.work) parser.add_argument("-o", "--workspace", help="Set workspace for builder", default=ctx.work)
@ -30,6 +31,7 @@ def parse_arguments(ctx: ArchBuilderContext):
if args.no_gpgcheck: ctx.gpgcheck = False if args.no_gpgcheck: ctx.gpgcheck = False
if args.repack: ctx.repack = True if args.repack: ctx.repack = True
if args.clean: ctx.clean = True
# collect configs path # collect configs path
configs = [] configs = []