-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathgenerate.sh
executable file
·182 lines (142 loc) · 5.83 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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#!/usr/bin/env bash
# Don't carry on when any command fails
set -e
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
BASEDIR=${SCRIPT_DIR}/..
COMMON_CONFIG_FILE="generators/common/config.yaml"
GENERATORS=${*:-`find generators -name 'config.yaml' -exec dirname {} \; | sed 's/generators\///'`}
GENERATED_CONFIG_FILES=""
OPENAPI_GENERATOR_VERSION=${OPENAPI_GENERATOR_VERSION:-v7.9.0}
OPENAPI_GENERATOR_COMMAND=${OPENAPI_GENERATOR_COMMAND:-\
docker run --rm -v "$(pwd):/local" -w /local \
openapitools/openapi-generator-cli:${OPENAPI_GENERATOR_VERSION}}
BUMP_CLIENT_LIBRARY_VERSION=${BUMP_CLIENT_LIBRARY_VERSION:-""}
CLIENT_LIBRARY_VERSION_SUFFIX=${CLIENT_LIBRARY_VERSION_SUFFIX:-""}
OVERRIDE_CLIENT_LIBRARY_VERSION=${OVERRIDE_CLIENT_LIBRARY_VERSION:-""}
# $1: version, $2: bump type (Major, Minor, Patch)
function semver_bump() {
INPUT_VERSION=$1
BUMP_TYPE=$2
POS=0
RESET=
OUTPUT_VERSION=
OUTPUT_SEPARATOR="."
IFS='.' read -ra NUMBERS <<< "$INPUT_VERSION"
for NUMBER in "${NUMBERS[@]}"; do
if [ -z "${RESET}" ];
then
if ([ $POS -eq 0 ] && [ "$BUMP_TYPE" == "Major" ]) || \
([ $POS -eq 1 ] && [ "$BUMP_TYPE" == "Minor" ]) || \
([ $POS -eq 2 ] && [ "$BUMP_TYPE" == "Patch" ]) ;
then
NUMBER=$((NUMBER+1))
RESET=1
fi
else
NUMBER=0
fi
echo -n "${NUMBER}${OUTPUT_SEPARATOR}"
if [ $POS -ge 1 ];
then
OUTPUT_SEPARATOR=""
fi
POS=$((POS+1))
done
echo -n "${CLIENT_LIBRARY_VERSION_SUFFIX}"
}
function validate_templates_checksum() {
OVERRIDE_COMMAND=""
GENERATOR_NAME=$1
LIBRARY_NAME=$2
LIBRARY=""
RESULT=0
if [ ! -z "$LIBRARY_NAME" ];
then
LIBRARY="--library $LIBRARY_NAME"
fi
$OPENAPI_GENERATOR_COMMAND author template -g $GENERATOR_NAME $LIBRARY -o generated/templates/${GENERATOR} > /dev/null
GENERATORS_PATH=$(pwd)/generators/${GENERATOR}/templates
GENERATED_PATH=$(pwd)/generated/templates/${GENERATOR}
pushd $GENERATED_PATH > /dev/null
shasum -a 256 $(find . -type f) >| SHA256SUM
popd > /dev/null
pushd $GENERATORS_PATH > /dev/null
echo >| SHA256SUM.new
for FILENAME in $(find . -type f \! -name 'SHA256SUM*' | sort);
do
LIB_SHASUM=$(grep \\$FILENAME ${GENERATED_PATH}/SHA256SUM | awk '{print $1}' || true)
OUR_SHASUM=$(grep \\$FILENAME ${GENERATORS_PATH}/SHA256SUM | awk '{print $1}' || true)
if [[ ! -z "$LIB_SHASUM" ]]; # File is provided by lib
then
if [ ! -z "$OUR_SHASUM" ] && [[ "$LIB_SHASUM" != "$OUR_SHASUM" ]]; # We do have checksum and doesn't match
then
LIBRARY_TEMPLATE="generated/templates/${GENERATOR}/$(echo $FILENAME | sed 's/^\.\///')"
TEMPLATE_SUBPATH="$(dirname $FILENAME/ | sed -E 's/^\.\/?//' )"
OVERRIDE_COMMAND="${OVERRIDE_COMMAND}\n\tcp ${LIBRARY_TEMPLATE} generators/${GENERATOR}/templates/${TEMPLATE_SUBPATH}"
RESULT=1
fi
echo "$LIB_SHASUM $FILENAME" >> ${GENERATORS_PATH}/SHA256SUM.new
fi
done
popd > /dev/null
# Remove if empty or rename otherwise
if [[ "$(grep -e '\s' ${GENERATORS_PATH}/SHA256SUM.new)" == "" ]];
then
unlink ${GENERATORS_PATH}/SHA256SUM.new
else
mv ${GENERATORS_PATH}/SHA256SUM.new ${GENERATORS_PATH}/SHA256SUM
fi
if [ "$RESULT" -ne "0" ];
then
echo -e "\n################################################################################\n"
echo -e "ERROR while building generator ${GENERATOR}: SHA256SUM for template(s) changed with OpenAPI generator ${OPENAPI_GENERATOR_VERSION}!\n"
echo -e "Please overwrite the template(s) and carefully check what has changed by running:\n${OVERRIDE_COMMAND}\n"
echo -e "\tgit add -p generators/${GENERATOR}/templates/\n"
fi
return $RESULT
}
cd ${BASEDIR}
rm -rf generated; mkdir -p generated/configuration
for GENERATOR in $GENERATORS
do
if [ "${GENERATOR}" != "common" ];
then
echo "Building configuration for generator ${GENERATOR}..."
read GENERATOR_NAME GENERATOR_LIBRARY <<<$(IFS="/"; echo $GENERATOR)
GENERATOR_FOLDER=generators/${GENERATOR}
CONFIG_FILE=${GENERATOR_FOLDER}/config.yaml
GENERATED_CONFIG_FILE=generated/configuration/${GENERATOR}.yaml
GIT_REPO_ID=$(grep gitRepoId: $CONFIG_FILE | sed 's/gitRepoId: //g')
LIBRARY=$(grep library: $CONFIG_FILE | sed 's/library: //g')
if [ -z "${OVERRIDE_CLIENT_LIBRARY_VERSION}" ] && [ -n "${GIT_REPO_ID}" ];
then
LATEST_LIBRARY_VERSION=$(curl -s https://api.github.com/repos/onfido/${GIT_REPO_ID}/releases | jq '.[0].name' | sed 's/[v"]//g')
if [ "$LATEST_LIBRARY_VERSION" == null ];
then
LATEST_LIBRARY_VERSION="0.0.0"
fi
CURRENT_LIBRARY_VERSION=$(semver_bump ${LATEST_LIBRARY_VERSION} ${BUMP_CLIENT_LIBRARY_VERSION})
echo "Latest delivered version was: ${LATEST_LIBRARY_VERSION}"
echo "Current version is going to be: ${CURRENT_LIBRARY_VERSION}"
echo "Client library version bump?: ${BUMP_CLIENT_LIBRARY_VERSION}"
else
CURRENT_LIBRARY_VERSION=$OVERRIDE_CLIENT_LIBRARY_VERSION
fi
validate_templates_checksum $GENERATOR_NAME $LIBRARY_NAME
mkdir -p $(dirname $GENERATED_CONFIG_FILE)
( cat $COMMON_CONFIG_FILE && echo && cat $CONFIG_FILE ) | \
GENERATOR=${GENERATOR} \
GENERATOR_NAME=${GENERATOR_NAME} \
GENERATOR_LIBRARY=${GENERATOR_LIBRARY} \
CLIENT_LIBRARY_VERSION=${CURRENT_LIBRARY_VERSION} \
envsubst >| ${GENERATED_CONFIG_FILE}
echo "Configuration for generator ${GENERATOR} built."
# Dump version number aside to have github action retrieving them later on
if [ -n "${GITHUB_OUTPUT}" -a -n "${CURRENT_LIBRARY_VERSION}" ];
then
echo "$(echo $GENERATOR | tr /- _ )_version=${CURRENT_LIBRARY_VERSION}" >> $GITHUB_OUTPUT
fi
GENERATED_CONFIG_FILES="${GENERATED_CONFIG_FILES} ${GENERATED_CONFIG_FILE}"
fi
done
${OPENAPI_GENERATOR_COMMAND} batch --clean ${GENERATED_CONFIG_FILES}