Loading logo.png 0 → 100644 +16.7 KiB Loading image diff... tbc/bumpversion.sh 0 → 100755 +41 −0 Original line number Diff line number Diff line #!/usr/bin/env bash function log_info() { >&2 echo -e "[\\e[1;94mINFO\\e[0m] $*" } function log_warn() { >&2 echo -e "[\\e[1;93mWARN\\e[0m] $*" } function log_error() { >&2 echo -e "[\\e[1;91mERROR\\e[0m] $*" } # check number of arguments if [[ "$#" -le 2 ]]; then log_error "Missing arguments" log_error "Usage: $0 <current version> <next version>" exit 1 fi curVer=$1 nextVer=$2 relType=$3 if [[ "$curVer" ]]; then log_info "Bump version from \\e[33;1m${curVer}\\e[0m to \\e[33;1m${nextVer}\\e[0m (release type: $relType)..." # replace in README sed -e "s/ref: *'$curVer'/ref: '$nextVer'/" -e "s/ref: *\"$curVer\”/ref: \”$nextVer\”/" -e "s/component: *\(.*\)@$curVer/component: \1@$nextVer/" README.md > README.md.next mv -f README.md.next README.md # replace in template and variants for tmpl in templates/*.yml do sed -e "s/command: *\[\"--service\", \"\(.*\)\", \"$curVer\"\]/command: [\"--service\", \"\1\", \"$nextVer\"]/" "$tmpl" > "$tmpl.next" mv -f "$tmpl.next" "$tmpl" done else log_info "Bump version to \\e[33;1m${nextVer}\\e[0m (release type: $relType): this is the first release (skip)..." fi tbc/template_to_component.py +53 −31 Original line number Diff line number Diff line Loading @@ -2,7 +2,10 @@ import argparse import json from enum import Enum from logging import Logger import os from pathlib import Path import re import shutil from typing import Optional, Union import yaml Loading Loading @@ -166,35 +169,38 @@ def _migrate_var(var: TbcVar, var_prefix: str, tpl: dict[str, any], main_tpl: Op return gl_inputs def _migrate_tpl(tpl_desc, main_tpl_desc, project_dir: Path, var_prefix: str): def _migrate_tpl(tpl_desc, main_tpl_desc, project_dir: Path, var_prefix: str) -> list[tuple[TbcVar, Optional[GlInput]]]: ret: list[tuple[TbcVar, Optional[GlInput]]] = [] tpl_path = tpl_desc['template_path'] # load template with open(project_dir / tpl_path, "r") as tpl_file: all_tpl = list(yaml.load_all(tpl_file, Loader=yaml.BaseLoader)) tpl = all_tpl[-1] gl_inputs: list[Optional[GlInput]]=[] # migrate main template variables for var in tpl_desc.get("variables", []): gl_inputs.append(_migrate_var(TbcVar.parse_obj(var), var_prefix, tpl, main_tpl_desc)) tbc_var = TbcVar.parse_obj(var) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) # migrate feature variables for feat in tpl_desc.get("features", []): if feat.get("enable_with"): gl_inputs.append(_migrate_var(TbcVar(name=feat.get("enable_with"), tbc_var = TbcVar(name=feat.get("enable_with"), description= f"Enable {feat['name']}", type=TbcVarType.boolean, ), var_prefix, tpl, main_tpl_desc)) ) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) elif feat.get("disable_with"): gl_inputs.append(_migrate_var(TbcVar(name=feat.get("disable_with"), tbc_var = TbcVar(name=feat.get("disable_with"), description= f"Disable {feat['name']}", type=TbcVarType.boolean, ), var_prefix, tpl, main_tpl_desc)) ) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) for var in feat.get("variables", []): gl_inputs.append(_migrate_var(TbcVar.parse_obj(var), var_prefix, tpl, main_tpl_desc)) tbc_var = TbcVar.parse_obj(var) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) tpl_spec = {"spec": {"inputs": {inputs.name: inputs.to_json() for inputs in gl_inputs if inputs}}} tpl_spec = {"spec": {"inputs": {inputs.name: inputs.to_json() for _, inputs in ret if inputs}}} # rewrite template with inputs section # print(">> Rewrite template") Loading @@ -210,19 +216,26 @@ def _migrate_tpl(tpl_desc, main_tpl_desc, project_dir: Path, var_prefix: str): print(yaml.dump({"variables": tpl["variables"]}, default_flow_style=False, sort_keys=False)) print() return ret def _migrate_readme(readme_file: Path, var_input: list[tuple[TbcVar, Optional[GlInput]]]): # read file with open(readme_file, "r") as reader: readme_content = reader.read() # def _load_template(project_dir: Path, template_path: str) -> dict[str, any]: # bkp_path: Path = project_dir / (template_path[0:-4]+".bkp.yml") # if not bkp_path.exists(): # # try original file and make a copy # orig_path: Path = project_dir / template_path # if not orig_path.exists(): # raise ValueError(f"template file {template_path} not found") # print(f"making a copy of {template_path}...") # shutil.copy(orig_path, bkp_path) # replace "Name" header in tables by "Input / Variable" readme_content = re.sub(r"\| *Name *\|", "| Input / Variable |", readme_content) # readme_content = re.sub(r"\| *description", "| Description", readme_content) # readme_content = re.sub(r"\| *default value", "| Default value", readme_content) # with open(bkp_path, "r") as tpl_file: # return yaml.load(tpl_file, Loader=yaml.BaseLoader) # replace all occurrences "| SOME_VAR |" by "| some-var / SOME_VAR |" for var, input in var_input: if input: readme_content = re.sub(rf"\| *`{var.name}` *\|", f"| `{input.name}` / `{var.name}` |", readme_content) # write with open(readme_file, "w") as writer: writer.write(readme_content) def migrate(): Loading @@ -244,13 +257,22 @@ def migrate(): var_prefix = (args.var_prefix or kicker["name"].upper()) + "_" var_input: list[tuple[TbcVar, Optional[GlInput]]] = [] print(f"=== Migrating main template '{kicker['name']}' with var prefix '{var_prefix}'...") print() _migrate_tpl(kicker, None, project_dir, var_prefix) var_input.extend(_migrate_tpl(kicker, None, project_dir, var_prefix)) for variant in kicker.get("variants", []): # var_prefix_for_variant = var_prefix+(variant["id"].upper())+"_" print(f"=== Migrating variant '{variant['name']}' with var prefix '{var_prefix}'...") print() _migrate_tpl(variant, kicker, project_dir, var_prefix) var_input.extend(_migrate_tpl(variant, kicker, project_dir, var_prefix)) print("=== Migrating README...") print() _migrate_readme(project_dir / "README.md", var_input) print("=== Copying bumpversion.sh...") print() shutil.copy(Path(__file__).parent / "bumpversion.sh", project_dir) Loading
tbc/bumpversion.sh 0 → 100755 +41 −0 Original line number Diff line number Diff line #!/usr/bin/env bash function log_info() { >&2 echo -e "[\\e[1;94mINFO\\e[0m] $*" } function log_warn() { >&2 echo -e "[\\e[1;93mWARN\\e[0m] $*" } function log_error() { >&2 echo -e "[\\e[1;91mERROR\\e[0m] $*" } # check number of arguments if [[ "$#" -le 2 ]]; then log_error "Missing arguments" log_error "Usage: $0 <current version> <next version>" exit 1 fi curVer=$1 nextVer=$2 relType=$3 if [[ "$curVer" ]]; then log_info "Bump version from \\e[33;1m${curVer}\\e[0m to \\e[33;1m${nextVer}\\e[0m (release type: $relType)..." # replace in README sed -e "s/ref: *'$curVer'/ref: '$nextVer'/" -e "s/ref: *\"$curVer\”/ref: \”$nextVer\”/" -e "s/component: *\(.*\)@$curVer/component: \1@$nextVer/" README.md > README.md.next mv -f README.md.next README.md # replace in template and variants for tmpl in templates/*.yml do sed -e "s/command: *\[\"--service\", \"\(.*\)\", \"$curVer\"\]/command: [\"--service\", \"\1\", \"$nextVer\"]/" "$tmpl" > "$tmpl.next" mv -f "$tmpl.next" "$tmpl" done else log_info "Bump version to \\e[33;1m${nextVer}\\e[0m (release type: $relType): this is the first release (skip)..." fi
tbc/template_to_component.py +53 −31 Original line number Diff line number Diff line Loading @@ -2,7 +2,10 @@ import argparse import json from enum import Enum from logging import Logger import os from pathlib import Path import re import shutil from typing import Optional, Union import yaml Loading Loading @@ -166,35 +169,38 @@ def _migrate_var(var: TbcVar, var_prefix: str, tpl: dict[str, any], main_tpl: Op return gl_inputs def _migrate_tpl(tpl_desc, main_tpl_desc, project_dir: Path, var_prefix: str): def _migrate_tpl(tpl_desc, main_tpl_desc, project_dir: Path, var_prefix: str) -> list[tuple[TbcVar, Optional[GlInput]]]: ret: list[tuple[TbcVar, Optional[GlInput]]] = [] tpl_path = tpl_desc['template_path'] # load template with open(project_dir / tpl_path, "r") as tpl_file: all_tpl = list(yaml.load_all(tpl_file, Loader=yaml.BaseLoader)) tpl = all_tpl[-1] gl_inputs: list[Optional[GlInput]]=[] # migrate main template variables for var in tpl_desc.get("variables", []): gl_inputs.append(_migrate_var(TbcVar.parse_obj(var), var_prefix, tpl, main_tpl_desc)) tbc_var = TbcVar.parse_obj(var) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) # migrate feature variables for feat in tpl_desc.get("features", []): if feat.get("enable_with"): gl_inputs.append(_migrate_var(TbcVar(name=feat.get("enable_with"), tbc_var = TbcVar(name=feat.get("enable_with"), description= f"Enable {feat['name']}", type=TbcVarType.boolean, ), var_prefix, tpl, main_tpl_desc)) ) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) elif feat.get("disable_with"): gl_inputs.append(_migrate_var(TbcVar(name=feat.get("disable_with"), tbc_var = TbcVar(name=feat.get("disable_with"), description= f"Disable {feat['name']}", type=TbcVarType.boolean, ), var_prefix, tpl, main_tpl_desc)) ) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) for var in feat.get("variables", []): gl_inputs.append(_migrate_var(TbcVar.parse_obj(var), var_prefix, tpl, main_tpl_desc)) tbc_var = TbcVar.parse_obj(var) ret.append((tbc_var, _migrate_var(tbc_var, var_prefix, tpl, main_tpl_desc))) tpl_spec = {"spec": {"inputs": {inputs.name: inputs.to_json() for inputs in gl_inputs if inputs}}} tpl_spec = {"spec": {"inputs": {inputs.name: inputs.to_json() for _, inputs in ret if inputs}}} # rewrite template with inputs section # print(">> Rewrite template") Loading @@ -210,19 +216,26 @@ def _migrate_tpl(tpl_desc, main_tpl_desc, project_dir: Path, var_prefix: str): print(yaml.dump({"variables": tpl["variables"]}, default_flow_style=False, sort_keys=False)) print() return ret def _migrate_readme(readme_file: Path, var_input: list[tuple[TbcVar, Optional[GlInput]]]): # read file with open(readme_file, "r") as reader: readme_content = reader.read() # def _load_template(project_dir: Path, template_path: str) -> dict[str, any]: # bkp_path: Path = project_dir / (template_path[0:-4]+".bkp.yml") # if not bkp_path.exists(): # # try original file and make a copy # orig_path: Path = project_dir / template_path # if not orig_path.exists(): # raise ValueError(f"template file {template_path} not found") # print(f"making a copy of {template_path}...") # shutil.copy(orig_path, bkp_path) # replace "Name" header in tables by "Input / Variable" readme_content = re.sub(r"\| *Name *\|", "| Input / Variable |", readme_content) # readme_content = re.sub(r"\| *description", "| Description", readme_content) # readme_content = re.sub(r"\| *default value", "| Default value", readme_content) # with open(bkp_path, "r") as tpl_file: # return yaml.load(tpl_file, Loader=yaml.BaseLoader) # replace all occurrences "| SOME_VAR |" by "| some-var / SOME_VAR |" for var, input in var_input: if input: readme_content = re.sub(rf"\| *`{var.name}` *\|", f"| `{input.name}` / `{var.name}` |", readme_content) # write with open(readme_file, "w") as writer: writer.write(readme_content) def migrate(): Loading @@ -244,13 +257,22 @@ def migrate(): var_prefix = (args.var_prefix or kicker["name"].upper()) + "_" var_input: list[tuple[TbcVar, Optional[GlInput]]] = [] print(f"=== Migrating main template '{kicker['name']}' with var prefix '{var_prefix}'...") print() _migrate_tpl(kicker, None, project_dir, var_prefix) var_input.extend(_migrate_tpl(kicker, None, project_dir, var_prefix)) for variant in kicker.get("variants", []): # var_prefix_for_variant = var_prefix+(variant["id"].upper())+"_" print(f"=== Migrating variant '{variant['name']}' with var prefix '{var_prefix}'...") print() _migrate_tpl(variant, kicker, project_dir, var_prefix) var_input.extend(_migrate_tpl(variant, kicker, project_dir, var_prefix)) print("=== Migrating README...") print() _migrate_readme(project_dir / "README.md", var_input) print("=== Copying bumpversion.sh...") print() shutil.copy(Path(__file__).parent / "bumpversion.sh", project_dir)