From 7419767135e539a461a84488f11b37cdd10eadba Mon Sep 17 00:00:00 2001 From: Jorge Moratinos Salcines Date: Tue, 26 Aug 2025 10:55:58 +0200 Subject: [PATCH] New version of generate_all_capif_apis.sh script --- .../generate_all_capif_apis.sh | 96 +++++++++++++++++-- 1 file changed, 87 insertions(+), 9 deletions(-) diff --git a/tools/open_api_script/generate_all_capif_apis.sh b/tools/open_api_script/generate_all_capif_apis.sh index 0b5393c9..79c62810 100755 --- a/tools/open_api_script/generate_all_capif_apis.sh +++ b/tools/open_api_script/generate_all_capif_apis.sh @@ -1,14 +1,91 @@ #!/bin/bash +# This script generates all CAPIF APIs defined in the 3GPP TS 29222 series. +# This script must setup APIS_FOLDER variable to point to the folder where +# all the OpenAPI files are stored. (them must be placed under openapi-generator). Copy them to that folder +# before running this script. +# OPEN_API_GENERATOR_FOLDER variable must point to the openapi-generator folder + +# Steps to run this script: +# 1. Install Docker +# 2. Clone openapi-generator from https://github.com/OpenAPITools/openapi-generator +# 3. Copy all OpenAPI files to a folder inside the openapi-generator folder. +# 4. Run this script with the desired options. + +# Mostrar ayuda +show_help() { + echo "Usage: $0 [options]" + echo "" + echo "Options:" + echo " -a Folder containing OpenAPI files (default: APIs)" + echo " -c Name of the output project folder (default: CAPIF-generated-new)" + echo " -g Path to openapi-generator folder (default: /path/to/openapi-generator)" + echo " -h Show this help message" + echo "" + echo "Steps to run this script:" + echo " 1. Install Docker" + echo " 2. Clone openapi-generator from https://github.com/OpenAPITools/openapi-generator" + echo " 3. Copy all CAPIF API files to a folder inside the openapi-generator folder." + echo " 4. Run this script with the desired options." + echo "" + echo "Example:" + echo " $0 -a APIs -c MyProject -g /path/to/openapi-generator" + exit 0 +} + +# ParĂ¡metros por defecto +APIS_FOLDER=APIs +COMPOSITE_PROJECT=CAPIF-latest +OPEN_API_GENERATOR_FOLDER=/path/to/openapi-generator + +# Leer parĂ¡metros +while getopts ":a:c:g:h" opt; do + case $opt in + a) + APIS_FOLDER="$OPTARG" + ;; + c) + COMPOSITE_PROJECT="$OPTARG" + ;; + g) + OPEN_API_GENERATOR_FOLDER="$OPTARG" + ;; + h) + show_help + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + show_help + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + show_help + ;; + esac +done + +# Local variables ENDPOINTS=() SERVICE_NAMES=() -COMPOSITE_PROJECT=CAPIF-composite-test2 -OUTPUT_HOST_BASE_DIRECTORY=out/CAPIF-composite-test2 -OUTPUT_DOCKER_BASE_DIRECTORY=/gen/$OUTPUT_HOST_BASE_DIRECTORY +OUTPUT_HOST_BASE_DIRECTORY=out/$COMPOSITE_PROJECT DOCKER_COMPOSE_FILENAME=$OUTPUT_HOST_BASE_DIRECTORY/docker-compose-test.yml NGINX_CONF_FILE=$OUTPUT_HOST_BASE_DIRECTORY/nginx.conf +# Change to openapi-generator directory (limitation at run-in-docker.sh script) +cd $OPEN_API_GENERATOR_FOLDER + +# Validar directorios +if [ ! -d "$APIS_FOLDER" ]; then + echo "APIs folder '$APIS_FOLDER' does not exist." + exit 1 +fi +if [ ! -d "$OPEN_API_GENERATOR_FOLDER" ]; then + echo "OpenAPI generator folder '$OPEN_API_GENERATOR_FOLDER' does not exist." + exit 1 +fi + echo "docker compose file: $DOCKER_COMPOSE_FILENAME" +# Create output folder mkdir -p $OUTPUT_HOST_BASE_DIRECTORY # rm $DOCKER_COMPOSE_FILENAME || true @@ -20,17 +97,16 @@ function createPythonServer { SWAGGER_FILE=$1 API_NAME=$(basename -s .yaml $SWAGGER_FILE) ENDPOINT=$(awk '/- url: /{ print $3 }' $SWAGGER_FILE|awk -F / '{ print $2}') - OUTPUT=$OUTPUT_DOCKER_BASE_DIRECTORY/$API_NAME/ + OUTPUT=$OUTPUT_HOST_BASE_DIRECTORY/$API_NAME/ echo "SWAGGER_FILE: $SWAGGER_FILE" echo "API_NAME: $API_NAME" echo "ENDPOINT: $ENDPOINT" echo "OUTPUT DIRECTORY: $OUTPUT" ENDPOINTS+=($ENDPOINT) SERVICE_NAME=$(echo $ENDPOINT | sed 's/-/_/g') - # SERVICE_NAMES+=($SERVICE_NAME) - ./run-in-docker.sh generate -i $SWAGGER_FILE \ + $OPEN_API_GENERATOR_FOLDER/run-in-docker.sh generate -i $SWAGGER_FILE \ -g python-flask \ - -o $OUTPUT \ + -o /gen/$OUTPUT \ --package-name=$SERVICE_NAME cat >> $DOCKER_COMPOSE_FILENAME << EOF $ENDPOINT: @@ -40,8 +116,9 @@ function createPythonServer { EOF } - -CAPIF_FILES=$(ls capif|awk '/TS29222/{ print "capif/"$0 }') +echo "Generating services for APIs in $APIS_FOLDER" +CAPIF_FILES=$(ls $APIS_FOLDER|awk -v dir="$APIS_FOLDER" '/TS29222/{ print dir "/"$0 }') +echo "CAPIF_FILES: $CAPIF_FILES" for CAPIF_FILE in ${CAPIF_FILES[*]} do createPythonServer $CAPIF_FILE @@ -90,3 +167,4 @@ cat >> $NGINX_CONF_FILE << EOF } EOF +echo "Check all generated services under $OPEN_API_GENERATOR_FOLDER/$OUTPUT_HOST_BASE_DIRECTORY folder" \ No newline at end of file -- GitLab