aboutsummaryrefslogtreecommitdiffstats
path: root/build/openapi-checker.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build/openapi-checker.sh')
-rwxr-xr-xbuild/openapi-checker.sh44
1 files changed, 44 insertions, 0 deletions
diff --git a/build/openapi-checker.sh b/build/openapi-checker.sh
new file mode 100755
index 00000000000..9e4a4802b25
--- /dev/null
+++ b/build/openapi-checker.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+specs=()
+for path in core apps/*; do
+ if [ ! -f "$path/.noopenapi" ] && [[ "$(git check-ignore "$path")" != "$path" ]]; then
+ composer exec generate-spec "$path" "$path/openapi.json" || exit 1
+ if [[ "$(basename "$path")" != "core" ]]; then
+ if [ -f "$path/openapi-full.json" ]; then
+ specs+=("$path/openapi-full.json")
+ else
+ specs+=("$path/openapi.json")
+ fi;
+ fi;
+ fi
+done
+
+composer exec merge-specs -- \
+ --core core/openapi-full.json \
+ --merged openapi.json \
+ "${specs[@]}"
+
+files="$(git ls-files --exclude-standard --modified --others)"
+changed=false
+for file in $files; do
+ if [[ $file == *"openapi"*".json" ]]; then
+ changed=true
+ break
+ fi
+done
+
+if [ $changed = true ]
+then
+ git --no-pager diff
+ echo "The OpenAPI specifications are not up to date"
+ echo "Please run: bash build/openapi-checker.sh"
+ echo "And commit the result"
+ exit 1
+else
+ echo "OpenAPI specifications up to date. Carry on"
+ exit 0
+fi