summaryrefslogtreecommitdiffstats
path: root/external-schema-repo-generator/generator/generate.sh
diff options
context:
space:
mode:
Diffstat (limited to 'external-schema-repo-generator/generator/generate.sh')
-rwxr-xr-xexternal-schema-repo-generator/generator/generate.sh105
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