import os import yaml import sys def load_yaml(file_path): """ load yaml :param file_path: yaml file path :return: content of yaml """ with open(file_path, encoding="utf-8") as fp: try: content = yaml.load(fp.read(), Loader=yaml.Loader) except yaml.MarkedYAMLError as e: print(e) sys.exit(1) return content def get_sig_owners_path(sig_name): cur_path = os.popen("pwd").read().replace("\n", "") sig_path = os.path.join(cur_path, sig_name) if not os.path.exists(sig_path): print("%s is not exist" % sig_path) sys.exit(1) owners_path = os.path.join(sig_path, "OWNERS") return sig_path, owners_path def make_template_file_data_and_write(sig_name, sig_path, owners_path): content = {} content["name"] = sig_name content["description"] = "TO_BE_CLARIFIED" content["created_on"] = "2019-12-31" content["mailing_list"] = "TO_BE_CLARIFIED" content["meeting_url"] = "TO_BE_CLARIFIED" content["mature_level"] = "startup" content["mentors"] = [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}] # if sig_info.yaml exists if os.path.exists(os.path.join(sig_path, "sig-info.yaml")): sig_info_content = load_yaml(os.path.join(sig_path, "sig-info.yaml")) content["description"] = sig_info_content.get("description") if sig_info_content.get("description") else "TO_BE_CLARIFIED" content["meeting_url"] = sig_info_content.get("meeting_url") if sig_info_content.get("meeting_url") else "TO_BE_CLARIFIED" content["mailing_list"] = sig_info_content.get("mailing_list") if sig_info_content.get("mailing_list") else "TO_BE_CLARIFIED" mts_in_sig_info = [] for i in sig_info_content.get("maintainers"): mts_in_sig_info.append(i["gitee_id"]) v = [] for m in decode_owners(owners_path): if m in mts_in_sig_info: for mr in sig_info_content.get("maintainers"): if m == mr["gitee_id"]: v.append({ "gitee_id": m, "name": mr.get("name") if mr.get("name") else "TO_BE_CLARIFIED", "organization": mr.get("organization") if mr.get("organization") else "TO_BE_CLARIFIED", "email": mr.get("email") if mr.get("email") else "TO_BE_CLARIFIED", }) else: v.append({"gitee_id": m, "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}) if len(v) == 0: content["maintainers"] = [ {"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}] else: content["maintainers"] = v else: v = [] for m in decode_owners(owners_path): v.append({"gitee_id": m, "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}) if len(v) == 0: content["maintainers"] = [ {"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}] else: content["maintainers"] = v repos = [] for root, dirs, files in os.walk(sig_path): if len(dirs) == 0: if len(files) == 0: break for f in files: if root.count("/") > 2 and f.endswith(".yaml"): repos.append(root.split("/")[-2] + '/' + f.split(".yaml")[0]) else: continue if len(repos) == 0: content["repositories"] = [{"repo": ["example/repos1", "example/repos2"], "committers": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}], "contributors": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}],}, {"repo": ["example/repos1", "example/repos2"],}, ] else: content["repositories"] = [{"repo": repos, "committers": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}], "contributors": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}], }] write_yaml_to_sig(sig_path, content) def decode_owners(owners_path): if os.path.exists(owners_path): c = load_yaml(owners_path) return c["maintainers"] else: return [] def write_yaml_to_sig(dst_path, data): file_path = os.path.join(dst_path, "sig-info.yaml") with open(file_path, 'w', encoding="utf-8") as f: yaml.dump(data, f, Dumper=yaml.Dumper, sort_keys=False) # you can use "python3 create_single_siginfo.py sig_name(example: security)" to auto make a sig_info.yaml for a sig, # make sure you trigger this command after you enter the "community/sigs" directory if __name__ == '__main__': if len(sys.argv) != 2: print('Required 1 parameters! The sig_name need to be transferred in sequence.') sys.exit(1) sig = sys.argv[1] s_path, o_path = get_sig_owners_path(sig) make_template_file_data_and_write(sig, s_path, o_path)