Skip to content

Commit 650b435

Browse files
authored
feat(orchestrator): verify if auto-generated openapi files are up-to-date (#1323)
* Verify if openapi files are up-to-date Signed-off-by: Gloria Ciavarrini <[email protected]> * fix: improve generation of definition.ts Signed-off-by: Gloria Ciavarrini <[email protected]> * fix: typo Signed-off-by: Gloria Ciavarrini <[email protected]> --------- Signed-off-by: Gloria Ciavarrini <[email protected]>
1 parent f1f2ce1 commit 650b435

File tree

4 files changed

+75
-846
lines changed

4 files changed

+75
-846
lines changed

plugins/orchestrator-common/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@
2828
],
2929
"configSchema": "config.d.ts",
3030
"scripts": {
31-
"build": "backstage-cli package build",
31+
"build": "yarn openapi:check && backstage-cli package build",
3232
"tsc": "tsc",
3333
"lint": "backstage-cli package lint",
3434
"test": "backstage-cli package test --passWithNoTests --coverage",
3535
"clean": "backstage-cli package clean",
3636
"prepack": "backstage-cli package prepack",
3737
"postpack": "backstage-cli package postpack",
38-
"openapi": "./scripts/openapi.sh",
38+
"openapi:generate": "./scripts/openapi.sh generate",
39+
"openapi:check": "./scripts/openapi.sh check",
3940
"openapi:prettier:fix": "prettier --ignore-unknown --write ./src/auto-generated"
4041
},
4142
"dependencies": {
Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,72 @@
11
#!/bin/bash
22
pwd
3-
set -ex
3+
set -e
44

5-
npx openapi-typescript ./src/openapi/openapi.yaml -o ./src/auto-generated/api/models/schema.ts
6-
npx openapi-generator-cli generate -g asciidoc -i ./src/openapi/openapi.yaml -o ./src/auto-generated/docs/index.adoc
7-
npx yaml2json -f ./src/openapi/openapi.yaml
5+
OPENAPI_SPEC_FILE="./src/openapi/openapi.yaml"
6+
SCHEMA_FILE="./src/auto-generated/api/models/schema.ts"
7+
DEFINITION_FILE="./src/auto-generated/api/definition.ts"
8+
METADATA_FILE="./src/auto-generated/.METADATA.sha1"
89

9-
export FILE=./src/auto-generated/api/definition.ts
10-
echo '// GENERATED FILE. DO NOT EDIT.' > ${FILE}
11-
echo 'const OPENAPI = `' >> ${FILE}
12-
cat ./src/openapi/openapi.json >> ${FILE}
13-
echo '`' >> ${FILE}
14-
echo "export const openApiDocument = JSON.parse(OPENAPI);" >> ${FILE}
10+
openapi_generate() {
11+
npx openapi-typescript ${OPENAPI_SPEC_FILE} -o ${SCHEMA_FILE}
12+
npx openapi-generator-cli generate -g asciidoc -i ./src/openapi/openapi.yaml -o ./src/auto-generated/docs/index.adoc
13+
npx yaml2json -f ${OPENAPI_SPEC_FILE}
1514

16-
rm ./src/openapi/openapi.json
17-
yarn openapi:prettier:fix
15+
OPENAPI_SPEC_FILE_JSON=$(tr -d '[:space:]' < "$(dirname $OPENAPI_SPEC_FILE)"/openapi.json)
16+
cat << EOF > ${DEFINITION_FILE}
17+
/* eslint-disable */
18+
/* prettier-ignore */
19+
// GENERATED FILE DO NOT EDIT.
20+
const OPENAPI = \`${OPENAPI_SPEC_FILE_JSON}\`;
21+
export const openApiDocument = JSON.parse(OPENAPI);
22+
EOF
23+
24+
rm ./src/openapi/openapi.json
25+
yarn openapi:prettier:fix
26+
NEW_SHA=$(openapi_checksum)
27+
openapi_update ${NEW_SHA}
28+
}
29+
30+
openapi_checksum(){
31+
cat ${DEFINITION_FILE} ${SCHEMA_FILE} ${OPENAPI_SPEC_FILE} | sha1sum | awk '{print $1}' | tr -d '[:space:]'
32+
}
33+
34+
openapi_update() {
35+
echo "${1}" > "${METADATA_FILE}"
36+
}
37+
38+
# Function to check if OpenAPI files are up-to-date
39+
openapi_check() {
40+
41+
if [ ! -f "${METADATA_FILE}" ]; then
42+
echo "Error: Metadata file '${METADATA_FILE}' not found. Run 'yarn openapi:generate' first."
43+
exit 1
44+
else
45+
STORED_SHA1=$(cat "${METADATA_FILE}")
46+
fi
47+
48+
# Generate new SHA-1 checksum
49+
NEW_SHA1=$(openapi_checksum)
50+
51+
# Check if the stored and current SHA-1 checksums differ
52+
if [ "${STORED_SHA1}" != "${NEW_SHA1}" ]; then
53+
echo "Changes detected in auto-generated files or openapi.yaml. Please run 'yarn openapi:generate' to update."
54+
exit 1
55+
else
56+
echo "No changes detected in auto-generated files or openapi.yaml. Auto-generated files are up to date."
57+
fi
58+
}
59+
60+
# Check the command passed as an argument
61+
case "$1" in
62+
"generate")
63+
openapi_generate
64+
;;
65+
"check")
66+
openapi_check
67+
;;
68+
*)
69+
echo "Error: Invalid command. Please use \"${0} generate\" to generate OpenAPI files or \"${0} check\" to verify their status."
70+
exit 1
71+
;;
72+
esac
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
d82937d6ce2c454759c0aad81c0d8206daa8e425

0 commit comments

Comments
 (0)