diff --git a/release-assistant/javcra/application/checkpart/check_requires/__init__.py b/release-assistant/javcra/application/checkpart/check_requires/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e82e06ac13296779ad587341849e0bd7378158b2 --- /dev/null +++ b/release-assistant/javcra/application/checkpart/check_requires/__init__.py @@ -0,0 +1,14 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: DisNight +# Create: 2021-06-29 +# ******************************************************************************/ \ No newline at end of file diff --git a/release-assistant/javcra/application/checkpart/check_requires/get_effected_rpms.py b/release-assistant/javcra/application/checkpart/check_requires/get_effected_rpms.py new file mode 100644 index 0000000000000000000000000000000000000000..d0b71e4eadbf8bab61970c54228e3b5d1b7fd105 --- /dev/null +++ b/release-assistant/javcra/application/checkpart/check_requires/get_effected_rpms.py @@ -0,0 +1,62 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: DisNight +# Create: 2021-06-24 +# ******************************************************************************/ + + +def get_whatrequires( + pkg_list: list, + published_repos: list, + dev_repos: list, + branch: str = "openEuler:20.03:LTS:SP1", +) -> dict: + """ + get effected src rpm list which requires rpm in pkg_list + + Attributes: + pkg_list: source rpm list + published_repos: published repo name list in /etc/yum.repo.d/xxx.repo (repo.openuler.org/xxx etc.) + dev_repos: develop repo name list in /etc/yum.repo.d/xxx.repo (obs.repo/xxxx etc.) + branch: branch in obs proj such as (openEuler:20.03:LTS:SP1, openEuler:20.03:LTS:SP1:EPOL, etc.) + + return: + pkg_dict = { + src_rpm: [bin_rpm], + ... + } + """ + pass + + +def get_update_install( + pkg_list: list, + published_repos: list, + dev_repos: list, + branch: str = "openEuler:20.03:LTS:SP1", +) -> dict: + """ + get effected src rpm list which requires rpm in pkg_list + + Attributes: + pkg_list: source rpm list + published_repos: published repo name list in /etc/yum.repo.d/xxx.repo (repo.openuler.org/xxx etc.) + dev_repos: develop repo name list in /etc/yum.repo.d/xxx.repo (obs.repo/xxxx etc.) + branch: branch in obs proj such as (openEuler:20.03:LTS:SP1, openEuler:20.03:LTS:SP1:EPOL, etc.) + + return: + pkg_dict = { + src_rpm: [bin_rpm], + ... + } + """ + pass diff --git a/release-assistant/javcra/application/checkpart/check_requires/init_env.py b/release-assistant/javcra/application/checkpart/check_requires/init_env.py new file mode 100644 index 0000000000000000000000000000000000000000..cbba2d854225f7622d9b1758628d7dc2d7c5c7a5 --- /dev/null +++ b/release-assistant/javcra/application/checkpart/check_requires/init_env.py @@ -0,0 +1,174 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: DisNight +# Create: 2021-06-24 +# ******************************************************************************/ + +import os +import yaml +import logging + +from yaml.error import YAMLError +from javcra.libs.config.global_config import ( + SUCCEED, + FAILED, + DEFAULT_OSCRC_APIURL, + DEFAULT_OSCRC_POSITION, + OSCRC_TEMPLETE, + OSCRC_USER_FLAG, + OSCRC_PASS_FLAG, + OSCRC_APIURL_FLAG, + OPENEULER_BRANCH_MAP, + SUPPORTED_BRANCHES_LIST, + YUM_REPO_TEMPLETE_FOLDER, +) + + +def init_oscrc( + user: str, + pswd: str, + apiurl: str = DEFAULT_OSCRC_APIURL, + oscrc: str = DEFAULT_OSCRC_POSITION, + osc_templete: str = OSCRC_TEMPLETE, +) -> int: + """ + init osc config file oscrc + + Attributes: + user: username of obs account + pass: password of obs account + apiurl: remote of obs server + oscrc: the position of oscrc file + osc_templete: the position of oscrc templete + + return: + finish_code: + succeed : 0 + failed : 1 + """ + if os.path.exists(oscrc): + logging.info("%s exist, skip init step", oscrc) + return SUCCEED + if not os.path.exists(osc_templete): + logging.error("init oscrc failed: %s templete not exist", osc_templete) + return SUCCEED + oscrc_data = "" + + # scanf format templete from file + try: + with open(osc_templete, "r") as f: + oscrc_data = f.read() + except UnicodeDecodeError as ude: + logging.error("init oscrc failed: %s", str(ude)) + oscrc_data = "" + if not oscrc_data: + logging.error("cannot scan data from oscrc.template") + return FAILED + + oscrc_data = oscrc_data.replace(OSCRC_USER_FLAG, user) + oscrc_data = oscrc_data.replace(OSCRC_PASS_FLAG, pswd) + oscrc_data = oscrc_data.replace(OSCRC_APIURL_FLAG, apiurl) + + try: + with open(oscrc, "a") as f: + f.write(oscrc_data) + except UnicodeEncodeError as uee: + logging.error("init oscrc failed: %s", str(uee)) + _ = os.path.exists(oscrc) and os.remove(oscrc) + + if not os.path.exists(oscrc): + logging.warning("please init oscrc by yourself") + return FAILED + return SUCCEED + + +def load_support_branch(bmap_file: str = OPENEULER_BRANCH_MAP) -> dict: + """ + load supported branch from configure file(yaml) + + Attributes: + bmap_file: supported_branch.yaml + + return: + dict bmap: { + : , + ...... + } + """ + # load support branch map from config file + temp_map = {} + try: + with open(bmap_file, "r") as f: + temp_map = yaml.safe_load(f) + except YAMLError as ye: + logging.error("load branch map error: %s", str(ye)) + temp_map = {} + if not temp_map: + return temp_map + + # parse yaml format to gitee_branch_name:obs_project_name + bmap = {} + for support_branch in SUPPORTED_BRANCHES_LIST: + for bname in temp_map.get(support_branch, []): + if not temp_map[support_branch][bname].get("obs_alias", ""): + continue + bmap[bname] = temp_map[support_branch][bname]["obs_alias"] + return bmap + + +def get_yum_repo_file(branch: str, bmap_file: str = OPENEULER_BRANCH_MAP) -> str: + """ + get specified branch's yum repo file + + Attributes: + branch: branch in gitee or project name in obs + bmap_file: supported_branch.yaml + + return: + yum_repo_file: + the specified branch's yum repo file + """ + if not branch: + logging.warning("branch is empty, skip this step") + return "" + bmap = load_support_branch(bmap_file) + yum_repo_file = "" + if not bmap: + logging.warning("can not find specify branch, use local yum repo file") + return "" + key_list = list(bmap.keys()) + val_list = list(bmap.values()) + if branch in key_list: + yum_repo_file = os.path.join(YUM_REPO_TEMPLETE_FOLDER, "{}.repo".format(branch)) + if not os.path.exists(yum_repo_file): + logging.error( + "template yum repo file [%s.repo] is missing", + branch + ) + return "" + return yum_repo_file + if branch in val_list: + # find key from dict by value + tmp_bname = key_list[val_list.index(branch)] + yum_repo_file = os.path.join( + YUM_REPO_TEMPLETE_FOLDER, "{}.repo".format(tmp_bname) + ) + if not os.path.exists(yum_repo_file): + logging.error( + "template yum repo file [%s.repo] is missing", + branch + ) + return "" + return yum_repo_file + + logging.warning("branch [%s] is not supporter", branch) + return "" diff --git a/release-assistant/javcra/libs/config/checkpart/check_requires/oscrc.templete b/release-assistant/javcra/libs/config/checkpart/check_requires/oscrc.templete new file mode 100644 index 0000000000000000000000000000000000000000..526ca76630ea8a206cbe4dd3d0fc82df499f009b --- /dev/null +++ b/release-assistant/javcra/libs/config/checkpart/check_requires/oscrc.templete @@ -0,0 +1,7 @@ +[general] +apiurl=@APIURL@ +no_verify=1 + +[@APIURL@] +user=@USERNAME@ +pass=@PASSWORD@ \ No newline at end of file diff --git a/release-assistant/javcra/libs/config/checkpart/check_requires/support_branch.yaml b/release-assistant/javcra/libs/config/checkpart/check_requires/support_branch.yaml new file mode 100644 index 0000000000000000000000000000000000000000..84cb5b71e40eb5b7e1643f7204d22482b0df6ac3 --- /dev/null +++ b/release-assistant/javcra/libs/config/checkpart/check_requires/support_branch.yaml @@ -0,0 +1,5 @@ +openEuler : + openEuler-20.03-LTS: + obs_alias: "openEuler:20.03:LTS" + openEuler-20.03-LTS-SP1: + obs_alias: "openEuler:20.03:LTS:SP1" \ No newline at end of file diff --git a/release-assistant/javcra/libs/config/checkpart/check_requires/yum.repo/openEuler-20.03-LTS-SP1.repo b/release-assistant/javcra/libs/config/checkpart/check_requires/yum.repo/openEuler-20.03-LTS-SP1.repo new file mode 100644 index 0000000000000000000000000000000000000000..a5436b3c5e441a2060f776e04f654d15fd123e71 --- /dev/null +++ b/release-assistant/javcra/libs/config/checkpart/check_requires/yum.repo/openEuler-20.03-LTS-SP1.repo @@ -0,0 +1,86 @@ +#generic-repos is licensed under the Mulan PSL v2. +#You can use this software according to the terms and conditions of the Mulan PSL v2. +#You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +#THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +#PURPOSE. +#See the Mulan PSL v2 for more details. + +#binary repo + +[published-everything] +name=published-everything +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/ +enabled=1 +gpgcheck=0 +priority=2 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler + +[published-update] +name=published-update +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/update/$basearch/ +enabled=1 +gpgcheck=0 +priority=1 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/update/$basearch/RPM-GPG-KEY-openEuler + +[published-debuginfo] +name=published-debuginfo +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/debuginfo/$basearch/ +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/debuginfo/$basearch/RPM-GPG-KEY-openEuler + +[devel-obs] +name=devel-obs +baseurl=http://119.3.219.20:82/openEuler:/20.03:/LTS:/SP1/standard_$basearch/ +enabled=1 +gpgcheck=0 +priority=3 + +#source repo + +[published-everything-src] +name=published-everything-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/source/$basearch/RPM-GPG-KEY-openEuler + +[published-update-src] +name=published-update-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/update/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/update/source/RPM-GPG-KEY-openEuler + +#EPOL binary repo + +[published-EPOL] +name=published-EPOL +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/EPOL/$basearch/ +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler + +[published-Epol-src] +name=published-Epol-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/Epol/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/Epol/source/RPM-GPG-KEY-openEuler + +[published-Epol-update-src] +name=published-Epol-update-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/Epol/update/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP1/Epol/update/source/RPM-GPG-KEY-openEuler + +[devel-obs] +name=devel-obs +baseurl=http://119.3.219.20:82/openEuler:/20.03:/LTS:/SP1/standard_$basearch/ +enabled=1 +gpgcheck=0 +priority=3 diff --git a/release-assistant/javcra/libs/config/checkpart/check_requires/yum.repo/openEuler-20.03-LTS.repo b/release-assistant/javcra/libs/config/checkpart/check_requires/yum.repo/openEuler-20.03-LTS.repo new file mode 100644 index 0000000000000000000000000000000000000000..dc2b4457d31960f2fdac13ac6fa309a7ea6e1d84 --- /dev/null +++ b/release-assistant/javcra/libs/config/checkpart/check_requires/yum.repo/openEuler-20.03-LTS.repo @@ -0,0 +1,85 @@ +#generic-repos is licensed under the Mulan PSL v2. +#You can use this software according to the terms and conditions of the Mulan PSL v2. +#You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +#THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +#PURPOSE. +#See the Mulan PSL v2 for more details. + +#binary repo + +[published-OS] +name=published-OS +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/ +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler + +[published-everything] +name=published-everything +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/everything/$basearch/ +enabled=1 +gpgcheck=0 +priority=2 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler + +[published-update] +name=published-update +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/update/$basearch/ +enabled=1 +gpgcheck=0 +priority=1 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/update/$basearch/RPM-GPG-KEY-openEuler + +[published-debuginfo] +name=published-debuginfo +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/debuginfo/$basearch/ +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/debuginfo/$basearch/RPM-GPG-KEY-openEuler + +[devel-obs] +name=devel-obs +baseurl=http://119.3.219.20:82/openEuler:/20.03:/LTS/standard_$basearch/ +enabled=1 +gpgcheck=0 +priority=3 + +#source repo + +[published-everything-src] +name=published-everything-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/source/$basearch/RPM-GPG-KEY-openEuler + +[published-update-src] +name=published-update-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/update/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/update/source/RPM-GPG-KEY-openEuler + +#EPOL binary repo + +[published-EPOL] +name=published-EPOL +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/EPOL/$basearch/ +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler + +[published-Epol-update-src] +name=published-Epol-update-src +baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/Epol/update/source +enabled=0 +gpgcheck=0 +gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/Epol/update/source/RPM-GPG-KEY-openEuler + +[devel-epol-obs] +name=devel-epol-obs +baseurl=http://119.3.219.20:82/openEuler:/20.03:/LTS:/Epol/standard_$basearch/ +enabled=0 +gpgcheck=0 diff --git a/release-assistant/javcra/libs/config/global_config.py b/release-assistant/javcra/libs/config/global_config.py new file mode 100644 index 0000000000000000000000000000000000000000..89b2f73c661e01d499144f421b58a90d6edb2bcb --- /dev/null +++ b/release-assistant/javcra/libs/config/global_config.py @@ -0,0 +1,54 @@ +#!/usr/bin/python3 +# ****************************************************************************** +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +# licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# ******************************************************************************/ +""" +Global environment variable value when the system is running +""" + +import os + +# STATUS_CODE +SUCCEED = 0 +FAILED = 1 + +# global const for check_requires part +# the config file of check_requires part will be stroed in the following +CHECK_REQUIRES_CONFIG_FOLDER_PATH = os.path.join(os.path.dirname(__file__)) + +# oscrc config +# the template file of oscrc, which will be stored in CHECK_REQUIRES_CONFIG_FOLDER_PATH +OSCRC_TEMPLETE = os.path.join( + CHECK_REQUIRES_CONFIG_FOLDER_PATH, + "checkpart", + "check_requires", + "oscrc.templete" +) +DEFAULT_OSCRC_APIURL = "https://build.openeuler.org" +DEFAULT_OSCRC_POSITION = "/root/.config/osc/oscrc" +OSCRC_USER_FLAG = "@USERNAME@" +OSCRC_PASS_FLAG = "@PASSWORD@" +OSCRC_APIURL_FLAG = "@APIURL@" + +# yum.repo config +YUM_REPO_TEMPLETE_FOLDER = os.path.join( + CHECK_REQUIRES_CONFIG_FOLDER_PATH, + "checkpart", + "check_requires", + "yum.repo" +) +OPENEULER_BRANCH_MAP = os.path.join( + CHECK_REQUIRES_CONFIG_FOLDER_PATH, + "checkpart", + "check_requires", + "support_branch.yaml" +) +SUPPORTED_BRANCHES_LIST = ["openEuler"] \ No newline at end of file diff --git a/release-assistant/requirement.txt b/release-assistant/requirement.txt new file mode 100644 index 0000000000000000000000000000000000000000..350daf1a73bcaa1f145f7aa826874e4a1792d28b --- /dev/null +++ b/release-assistant/requirement.txt @@ -0,0 +1,3 @@ +pyyaml +requests +unittest \ No newline at end of file