Commit f9f40c60 authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

feat: migrate README + bumpversion

parent 300d3256
Loading
Loading
Loading
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
+53 −31
Original line number Diff line number Diff line
@@ -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
@@ -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")
@@ -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():
@@ -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)