#!/bin/bash set -euxo pipefail cd "$(dirname "$0")/.." rm -rf /tmp/nextcloud-neon mkdir -p /tmp/nextcloud-neon function generate_spec() { path="$1" codename="$2" composer exec generate-spec -- "$path" "../../packages/nextcloud/lib/src/api/$codename.openapi.json" --first-content-type --openapi-version 3.1.0 } for dir in external/nextcloud-server external/nextcloud-notifications external/nextcloud-spreed; do ( cd "$dir" composer install composer install --no-dev git checkout . # Remove changed files ) done for path in \ core \ apps/comments \ apps/dashboard \ apps/dav \ apps/files \ apps/files_external \ apps/files_reminders \ apps/files_sharing \ apps/files_trashbin \ apps/files_versions \ apps/provisioning_api \ apps/settings \ apps/sharebymail \ apps/theming \ apps/updatenotification \ apps/user_status \ apps/weather_status \ ; do ( cd external/nextcloud-server generate_spec "$path" "$(basename $path)" ) done ( cd external/nextcloud-notifications generate_spec "." "notifications" ) ( cd external/nextcloud-spreed generate_spec "." "spreed" ) for spec in packages/nextcloud/lib/src/api/*.openapi.json; do name="$(basename "$spec" | cut -d "." -f 1)" dir="packages/nextcloud/lib/src/patches/$name" if [ -d "$dir" ]; then for patch in "$dir/"*; do cp "$spec" "/tmp/nextcloud-neon/$name.json" jsonpatch --indent 4 "/tmp/nextcloud-neon/$name.json" "$patch" > "$spec" done fi done ( cd external/nextcloud-server composer exec merge-specs -- --core ../../packages/nextcloud/lib/src/api/core.openapi.json --merged /tmp/nextcloud-neon/merged.json ../../packages/nextcloud/lib/src/api/*.openapi.json --openapi-version 3.1.0 ) jq \ -s \ '.[0] * {components: {schemas: .[1].components.schemas | with_entries(select(.key | endswith("Capabilities")))}, paths: {"/ocs/v2.php/cloud/capabilities": {get: {responses: .[1].paths."/ocs/v2.php/cloud/capabilities".get.responses}}}}' \ packages/nextcloud/lib/src/api/core.openapi.json \ /tmp/nextcloud-neon/merged.json \ > /tmp/nextcloud-neon/core.json cp /tmp/nextcloud-neon/core.json packages/nextcloud/lib/src/api/core.openapi.json