From db5e690d835e560bd67ec981c226f74ffcae8e2b Mon Sep 17 00:00:00 2001 From: alichinese Date: Tue, 19 Dec 2023 18:51:48 +0800 Subject: [PATCH] fix: compatible with additional docker image * we only can use openeuler build docker image pointed before, also we can change it, but painful. now we add a feature that you can set docker image you want to build in at yocto-meta-openeuler .env.yaml Signed-off-by: alichinese --- src/oebuild/app/plugins/generate/generate.py | 56 ++++++++++---------- src/oebuild/app/plugins/update/update.py | 19 ++++--- src/oebuild/configure.py | 20 +++++++ 3 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/oebuild/app/plugins/generate/generate.py b/src/oebuild/app/plugins/generate/generate.py index 63db529..ac56b0c 100644 --- a/src/oebuild/app/plugins/generate/generate.py +++ b/src/oebuild/app/plugins/generate/generate.py @@ -22,7 +22,7 @@ from prettytable import PrettyTable from oebuild.command import OebuildCommand import oebuild.util as oebuild_util from oebuild.parse_compile import ParseCompile,CheckCompileError -from oebuild.configure import Configure +from oebuild.configure import Configure, YoctoEnv from oebuild.parse_template import BaseParseTemplate, ParseTemplate, BUILD_IN_DOCKER, BUILD_IN_HOST from oebuild.m_log import logger, INFO_COLOR from oebuild.check_docker_tag import CheckDockerTag @@ -238,32 +238,34 @@ class Generate(OebuildCommand): if os.path.exists(os.path.join(build_dir,'compile.yaml')): os.remove(os.path.join(build_dir,'compile.yaml')) - check_docker_tag = CheckDockerTag(args.docker_tag, self.configure) - oebuild_config = self.configure.parse_oebuild_config() - if check_docker_tag.get_tag() is not None: - docker_tag = str(check_docker_tag.get_tag()) - else: - # select docker image - while True: - print(''' -If the system does not recognize which container image to use, select the -following container, enter it numerically, and enter q to exit:''') - image_list = check_docker_tag.get_tags() - - for key,value in enumerate(image_list): - print(f"{key}, {oebuild_config.docker.repo_url}:{value}") - k = input("please entry number:") - if k == "q": - return - try: - index = int(k) - docker_tag = image_list[index] - break - except IndexError: - print("please entry true number") - docker_tag = docker_tag.strip() - docker_tag = docker_tag.strip('\n') - docker_image = f"{oebuild_config.docker.repo_url}:{docker_tag}" + docker_image = YoctoEnv().get_docker_image(yocto_dir=yocto_dir) + if docker_image is None: + check_docker_tag = CheckDockerTag(args.docker_tag, self.configure) + oebuild_config = self.configure.parse_oebuild_config() + if check_docker_tag.get_tag() is not None: + docker_tag = str(check_docker_tag.get_tag()) + else: + # select docker image + while True: + print(''' + If the system does not recognize which container image to use, select the + following container, enter it numerically, and enter q to exit:''') + image_list = check_docker_tag.get_tags() + + for key,value in enumerate(image_list): + print(f"{key}, {oebuild_config.docker.repo_url}:{value}") + k = input("please entry number:") + if k == "q": + return + try: + index = int(k) + docker_tag = image_list[index] + break + except IndexError: + print("please entry true number") + docker_tag = docker_tag.strip() + docker_tag = docker_tag.strip('\n') + docker_image = f"{oebuild_config.docker.repo_url}:{docker_tag}" out_dir = pathlib.Path(os.path.join(build_dir,'compile.yaml')) oebuild_util.write_yaml(out_dir, parser_template.generate_template( diff --git a/src/oebuild/app/plugins/update/update.py b/src/oebuild/app/plugins/update/update.py index 5a3c8bd..ae69a14 100644 --- a/src/oebuild/app/plugins/update/update.py +++ b/src/oebuild/app/plugins/update/update.py @@ -22,7 +22,7 @@ import oebuild.util as oebuild_util from oebuild.command import OebuildCommand from oebuild.parse_template import OebuildRepo from oebuild.parse_compile import ParseCompile -from oebuild.configure import Configure, ConfigBasicRepo, YOCTO_META_OPENEULER +from oebuild.configure import Configure, ConfigBasicRepo, YOCTO_META_OPENEULER, YoctoEnv from oebuild.docker_proxy import DockerProxy from oebuild.ogit import OGit from oebuild.check_docker_tag import CheckDockerTag @@ -187,15 +187,18 @@ class Update(OebuildCommand): and if the version branch does not correspond to it, it will enter interactive mode, which is selected by the user ''' - oebuild_config = self.configure.parse_oebuild_config() - docker_config = oebuild_config.docker + if docker_tag is not None: + oebuild_config = self.configure.parse_oebuild_config() + docker_config = oebuild_config.docker - check_docker_tag = CheckDockerTag(docker_tag=docker_tag,configure=self.configure) - if check_docker_tag.get_tag() is None or check_docker_tag.get_tag() == "": - check_docker_tag.list_image_tag() - return + check_docker_tag = CheckDockerTag(docker_tag=docker_tag,configure=self.configure) + if check_docker_tag.get_tag() is None or check_docker_tag.get_tag() == "": + check_docker_tag.list_image_tag() + return + docker_image = docker_config.repo_url + ":" + check_docker_tag.get_tag() + else: + docker_image = YoctoEnv().get_docker_image(self.configure.source_yocto_dir()) - docker_image = docker_config.repo_url + ":" + check_docker_tag.get_tag() client = DockerProxy() logger.info("pull %s ...", docker_image) client.pull_image_with_progress(docker_image) diff --git a/src/oebuild/configure.py b/src/oebuild/configure.py index 921826a..ba81884 100644 --- a/src/oebuild/configure.py +++ b/src/oebuild/configure.py @@ -214,3 +214,23 @@ class Configure: return True except TypeError: return False + +class YoctoEnv: + + @staticmethod + def get_docker_image(yocto_dir): + ''' + determine yocto-meta-openeuler's supported docker image in env.yaml + ''' + if not os.path.exists(yocto_dir): + raise ValueError("the yocto direction is not exists") + + env_path = os.path.join(yocto_dir,".oebuild/env.yaml") + if not os.path.exists(env_path): + return None + + env_parse = oebuild_util.read_yaml(pathlib.Path(env_path)) + if "docker_image" in env_parse: + return str(env_parse['docker_image']) + + return None -- Gitee