/
generate.sh
147 lines (120 loc) · 4.79 KB
/
generate.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/bash
START=$(date +%s)
# Function to check for a given number of jobs, and sleep until one frees up.
job_limiter() {
while [[ $(jobs | wc -l) -ge "$1" ]]; do
sleep 5;
done
}
# Parse any command line args
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-j|--jobs)
JOB_MAX="$2"
# Shift past arg and arg value.
shift
shift
;;
-h|--help|*)
cat << EOF
Usage: set-up-dev.sh
-j --jobs <num jobs> | Number of concurrent jobs to run | Defaults to 8
-h --help | Show this screen
EOF
exit 0
;;
esac
done
BASE_PACKAGE_DIR="./src"
BASE_INVOKER_PACKAGE="TNT\\Ebay"
BASE_PACKAGE_NAME="ebay"
GITHUB_NAME="brandon14"
SDK_VERSION=0.2.2
SDK_USER_AGENT="$GITHUB_NAME/ebay-sdk-php/$SDK_VERSION/php"
# Set JOB_MAX default if not supplied.
[[ -z ${JOB_MAX+x} ]] && JOB_MAX=8
OPENAPI_GENERATOR=$(which openapi-generator-cli 2>/dev/null)
PHP_CS_FIXER=$(realpath ./vendor/bin/php-cs-fixer)
FILENAME_REGEX="^([a-zA-Z]+)_([a-zA-Z]+)_?([A-Za-z]+)*_(v[0-9])_(beta)*_?oas[23]\.yaml$"
echo "===========> Starting OpenAPI SDK generation with [$JOB_MAX] jobs at $(date)..."
echo ""
# Ensure we can find the openapi-generator-cli executable.
if [[ ! -x "$OPENAPI_GENERATOR" ]]; then
echo "Cannot find executable openapi-generator-cli file. Please try again..."
exit 1
fi
# Ensure PHP-CS-Fixer is available.
if [[ ! -x "$PHP_CS_FIXER" ]]; then
echo "Cannot find PHP-CS-Fixer script. Please try again..."
exit 1
fi
# Add bat file to php-cs-fixer script if running under a windows type environment.
if [[ "$OSTYPE" != "linux-gnu"* ]] || [[ "$OSTYPE" != "darwin"* ]] || [[ "$OSTYPE" != "freebsd"* ]]; then
echo "Running under windows. Adding .bat to executable..."
PHP_CS_FIXER="$PHP_CS_FIXER.bat"
fi
echo "Cleaning output folder [$BASE_PACKAGE_DIR]..."
# Clean output directory.
rm -rf "$BASE_PACKAGE_DIR"
# Generate each API for Ebay.
for openapispec in ./api-specs/*_oas*.yaml; do
# If we don't find the OpenAPI file, skip with
if [[ -f "$openapispec" ]]; then
# Check for max jobs running, if so sleep until a job frees up.
echo "Checking for max threads running..."
job_limiter "$JOB_MAX"
echo "Not at max jobs, can continue..."
# Clean file path name to get just the file name, and pull out the api name and sub name from the file name.
CLEAN_API_SPEC_NAME="${openapispec#"./api-specs/"}"
# Use regex to parse filename to grab pieces we need.
[[ "$CLEAN_API_SPEC_NAME" =~ $FILENAME_REGEX ]];
API_NAME="${BASH_REMATCH[1]}"
API_SUB_NAME="${BASH_REMATCH[2]}"
API_SUB_NAME_PROPER="${API_SUB_NAME^}"
API_VERSION="${BASH_REMATCH[4]}"
# Check for optional 2nd sub-name part.
if [[ "${BASH_REMATCH[3]}" != "" ]]; then
API_SUB_NAME="$API_SUB_NAME-${BASH_REMATCH[3]}"
API_SUB_NAME_PROPER="$API_SUB_NAME_PROPER${BASH_REMATCH[3]^}"
fi
# Check for beta indicator.
if [[ "${BASH_REMATCH[5]}" != "" ]]; then
API_SUB_NAME="${API_SUB_NAME}-beta"
API_SUB_NAME_PROPER="${API_SUB_NAME_PROPER}Beta"
fi
echo "===========> Generating OpenAPI library from file $openapispec with API name $API_NAME/$API_SUB_NAME"
echo ""
# Run command to generate openapi library, run in background so we can speed up the process.
"$OPENAPI_GENERATOR" generate \
-i "$openapispec" \
-g php \
-o "$BASE_PACKAGE_DIR/${API_NAME^}/$API_SUB_NAME_PROPER/${API_VERSION^}" \
--additional-properties=invokerPackage="$BASE_INVOKER_PACKAGE"\\"${API_NAME^}"\\"$API_SUB_NAME_PROPER"\\"${API_VERSION^}" \
--additional-properties=packageName="$GITHUB_NAME"/"$BASE_PACKAGE_NAME"-"$API_NAME"-"$API_SUB_NAME"-"$API_VERSION" \
--additional-properties=composerPackageName="$GITHUB_NAME"/"$BASE_PACKAGE_NAME"-"$API_NAME"-"$API_SUB_NAME"-"$API_VERSION" \
--global-property=apiTests=false \
--global-property=modelTests=false \
--additional-properties=srcBasePath=\"\" \
--git-user-id "$GITHUB_NAME" \
--git-repo-id "$BASE_PACKAGE_NAME"-"$API_NAME"-"$API_SUB_NAME"-"$API_VERSION" \
--http-user-agent "$SDK_USER_AGENT" \
-t ./templates &
# Make test directory for each library.
mkdir -p ./tests/Unit/${API_NAME^}/$API_SUB_NAME_PROPER/${API_VERSION^}
echo ""
else
echo "Cannot find OpenAPI spec file at $openapispec, Skipping file..."
fi
done
wait
LINT_START=$(date +%s)
echo "===========> Running PHP linter on generated SDKs at $(date)..."
# Batch PHP-CS-Fixer fixing using find-files and xargs to speed up linting.
"$PHP_CS_FIXER" list-files | xargs -n 10 -P "$JOB_MAX" "$PHP_CS_FIXER" fix --using-cache=no --config=./.php-cs-fixer.dist.php --allow-risky=yes
END=$(date +%s)
ELAPSED=$((END-START))
LINT_ELAPSED=$((END-LINT_START))
echo "===========> Finished generating OpenAPI SDK at $(date)..."
echo "===========> Took $ELAPSED seconds to run in total, $LINT_ELAPSED to lint..."
exit 0