diff options
Diffstat (limited to 'external-schema-repo-generator/generator/generate.sh')
-rwxr-xr-x | external-schema-repo-generator/generator/generate.sh | 105 |
1 files changed, 88 insertions, 17 deletions
diff --git a/external-schema-repo-generator/generator/generate.sh b/external-schema-repo-generator/generator/generate.sh index 29ddf85..8a75b57 100755 --- a/external-schema-repo-generator/generator/generate.sh +++ b/external-schema-repo-generator/generator/generate.sh @@ -29,12 +29,13 @@ configmap_name=$6 snippet_filename=$7 specs_directory=$8 generation_directory=$9 +_5g_api_repo_url=${10} # Constants SCHEMA_MAP_FILENAME="schema-map.json" SCHEMA_MAP_NAME="schema-map" SUCCESS_CODE=0 -TREE=tree +TREE=blob INDENTATION_LEVEL_1=1 INDENTATION_LEVEL_2=2 INDENTATION_LEVEL_3=3 @@ -73,19 +74,88 @@ clone_repo() { # $1 - branch name clone_branch() { check_arguments $# $EXPECTED_1_ARG - if [ -d $tmp_location/"$1" ]; then - echo "Skipping cloning repository." - echo "Branch $1 has already been cloned in the directory ./$tmp_location/$1" - echo "To redownload branch remove ./$tmp_location/$1." + configmapSize=800000 + branch="" + # check if OPEN API branch value provided by user contains 5G API branch after colon for example: Rel-16-SA-91:TSG91-Rel16 + if [ -z "${1##*":"*}" ]; then + OpenApiBranch=${1%:*} + _5GApiBranch=${1#"$OpenApiBranch"} + _5GApiBranch=${_5GApiBranch#:} + if [ -d $tmp_location/"$OpenApiBranch" ]; then + echo "Skipping cloning repository." + echo "Branch $OpenApiBranch has already been cloned in the directory ./$tmp_location/$OpenApiBranch" + echo "To redownload branch remove ./$tmp_location/$OpenApiBranch." + else + echo "Cloning repository from branch $OpenApiBranch" + git clone --quiet --single-branch --branch "$OpenApiBranch" "$repo_url" "$tmp_location/$OpenApiBranch" 2>/dev/null + OpenApiBranchResult=$? + # clones 5G API branch moves schemas to OPEN API, splits folder to folder less than 1mb + echo "Cloning repository from branch $_5GApiBranch" + git clone --quiet --single-branch --branch "$_5GApiBranch" "$_5g_api_repo_url" "$tmp_location/$OpenApiBranch/$schemas_location/$_5GApiBranch" 2>/dev/null + _5GApiBranchResult=$? + mv $tmp_location/$OpenApiBranch/$schemas_location/$_5GApiBranch/*.yaml $tmp_location/$OpenApiBranch/$schemas_location/ + dirSize=$(du -bs $tmp_location/$OpenApiBranch/$schemas_location/ | cut -f1) + if [ "$configmapSize" -le "$dirSize" ]; then + find $tmp_location/$OpenApiBranch/$schemas_location/ -type f -iname '*yaml' -printf "%s %p\n" | awk -v c=$configmapSize -v tmpLocation=$tmp_location -v schema=$OpenApiBranch -f bin_packing.awk + # adds each folder as valid branch to generate separate configmap (less then 1 mb) for each folder + for i in $(ls -d -p $tmp_location/${OpenApiBranch}-* | grep -Eo '[^/]+/?$' | cut -d / -f1); do branch="${branch} $i"; done + else + branch=$OpenApiBranch + fi + # fix schema file references both remote and local against folder structure for whole schema + fix_schema_references $tmp_location $OpenApiBranch $schemas_location + if [ $OpenApiBranchResult -ne $SUCCESS_CODE ] && [ $_5GApiBranchResult -ne $SUCCESS_CODE ] ; then + echo "Problem with cloning branch $OpenApiBranch." + echo "Branch $OpenApiBranch= will not be added to spec." + else + valid_branches="${valid_branches} $branch" + echo "valid_branches: $valid_branches" + fi + fi else - echo "Cloning repository from branch $1" - git clone --quiet --single-branch --branch "$1" "$repo_url" "$tmp_location/$1" 2>/dev/null - result=$? - if [ $result -ne $SUCCESS_CODE ] ; then - echo "Problem with cloning branch $1." - echo "Branch $1 will not be added to spec." + OpenApiBranch=$1 + if [ -d $tmp_location/"$OpenApiBranch" ]; then + echo "Skipping cloning repository." + echo "Branch $OpenApiBranch has already been cloned in the directory ./$tmp_location/$OpenApiBranch" + echo "To redownload branch remove ./$tmp_location/$OpenApiBranch." else - valid_branches="${valid_branches} $1" + echo "Cloning repository from branch $OpenApiBranch" + git clone --quiet --single-branch --branch "$OpenApiBranch" "$repo_url" "$tmp_location/$OpenApiBranch" 2>/dev/null + OpenApiBranchResult=$? + branch="" + # script checks schema files if they don’t contain remote refs to 5G API even user didn't define it after colon for example: Rel-16-SA-91:TSG91-Rel16 + # if contain then script parse repo tag from reference checkouts it, split to folders, resolve refs and cerates configmap for each folder + _5GApiBranch=$(check5GApiBranchExistenceInRefs "$tmp_location/$OpenApiBranch/$schemas_location") + if [ ! -z "$_5GApiBranch" ]; then + echo "Cloning repository from branch $_5GApiBranch" + git clone --quiet --single-branch --branch "$_5GApiBranch" "$_5g_api_repo_url" "$tmp_location/$OpenApiBranch/$schemas_location/$_5GApiBranch" 2>/dev/null + _5GApiBranchResult=$? + mv $tmp_location/$OpenApiBranch/$schemas_location/$_5GApiBranch/*.yaml $tmp_location/$OpenApiBranch/$schemas_location + dirSize=$(du -bs $tmp_location/$OpenApiBranch/$schemas_location/ | cut -f1) + if [ "$configmapSize" -le "$dirSize" ]; then + find $tmp_location/$OpenApiBranch/$schemas_location/ -type f -iname '*yaml' -printf "%s %p\n" | awk -v c=$configmapSize -v tmpLocation=$tmp_location -v schema=$OpenApiBranch -f bin_packing.awk + for i in $(ls -d -p $tmp_location/${OpenApiBranch}-* | grep -Eo '[^/]+/?$' | cut -d / -f1); do branch="${branch} $i"; done + else + branch=$OpenApiBranch + fi + fix_schema_references $tmp_location $OpenApiBranch $schemas_location + if [ ! -z "$_5GApiBranch" ] && [ $_5GApiBranchResult -ne $SUCCESS_CODE ] && [ $OpenApiBranchResult -ne $SUCCESS_CODE ] ; then + echo "Problem with cloning branch $OpenApiBranch." + echo "Branch $OpenApiBranch= will not be added to spec." + else + valid_branches="${valid_branches} $branch" + echo "valid_branches: $valid_branches" + fi + #if schema files don't contain remote refs to 5G API script goes with old path and doesn't checkout 5G API branch + else + if [ $OpenApiBranchResult -ne $SUCCESS_CODE ] ; then + echo "Problem with cloning branch $OpenApiBranch." + echo "Branch $OpenApiBranch= will not be added to spec." + else + valid_branches="${valid_branches} $OpenApiBranch" + echo "valid_branches: $valid_branches" + fi + fi fi fi } @@ -125,7 +195,7 @@ add_schemas_from_branch() { check_arguments $# $EXPECTED_1_ARG schemas=$(ls -g $tmp_location/$1/$schemas_location/*.yaml | awk '{print $NF}') for schema in $schemas; do - echo "$1-$(basename $schema): |-" | indent_string $INDENTATION_LEVEL_1 + echo "$(basename $schema): |-" | indent_string $INDENTATION_LEVEL_1 cat "$schema" | indent_string $INDENTATION_LEVEL_2 done } >> "$branch_configmap_filename" @@ -164,8 +234,9 @@ add_mappings_from_branch() { for schema in $schemas; do repo_endpoint=$(echo "$repo_url" | cut -d/ -f4- | rev | cut -d. -f2- | rev) schema_repo_path=$(echo "$schema" | cut -d/ -f4-) + schema_repo_path_fixed=$(echo "$schema_repo_path" | sed -r "s%"-subdir-[0-9]"%%" ) public_url_schemas_location=${repo_url%.*} - public_url=$public_url_schemas_location/$TREE/$schema_repo_path + public_url=$public_url_schemas_location/$TREE/$schema_repo_path_fixed local_url=$vendor/$repo_endpoint/$TREE/$schema_repo_path echo "{" | indent_string $INDENTATION_LEVEL_3 >> "$schema_map_filename" @@ -182,7 +253,7 @@ create_snippet() { base_mounts_path="/opt/app/VESCollector/etc/externalRepo" base_mounts_name="external-repo-$vendor-schemas" mounts_paths=" - - mountPath: $base_mounts_path/schema-map + - mountPath: $base_mounts_path name: $base_mounts_name" config_maps=" @@ -271,9 +342,9 @@ generate_specs() { # todo add check of global env whether script should be ran main() { - check_arguments $arguments_number $EXPECTED_9_ARGS - move_to_generation_directory + check_arguments $arguments_number $EXPECTED_10_ARGS clone_repo + move_to_generation_directory generate_specs create_snippet move_to_starting_directory |