#!/bin/bash set -euxo pipefail cd "$(dirname "$0")/.." rm -rf /tmp/nextcloud-neon mkdir -p /tmp/nextcloud-neon xmlstarlet \ edit \ --update "/info/version" \ --value "$(cd external/nextcloud-server && git describe --tags | sed "s/^v//")" \ specs/templates/appinfo_core.xml \ > /tmp/nextcloud-neon/appinfo_core1.xml xmlstarlet \ format \ --indent-spaces 4 \ /tmp/nextcloud-neon/appinfo_core1.xml \ > /tmp/nextcloud-neon/appinfo_core2.xml cp /tmp/nextcloud-neon/appinfo_core2.xml specs/templates/appinfo_core.xml function generate_spec_templates() { fvm dart packages/spec_templates/bin/generate.dart "$1" "$2" } generate_spec_templates external/nextcloud-news false generate_spec_templates external/nextcloud-notes false generate_spec_templates external/nextcloud-notifications false generate_spec_templates external/nextcloud-server/apps/provisioning_api false generate_spec_templates external/nextcloud-server/apps/user_status false generate_spec_templates external/nextcloud-server/core true codenames=(core news notes notifications provisioning_api user_status) for codename in ${codenames[*]}; do jq \ --arg codename "$codename" \ -s \ '{ openapi: .[0].openapi, info: .[0].info, servers: [ { url: "https://{hostname}:{port}", variables: { hostname: { default: "localhost" }, port: { default: "8080" } } } ], security: [ { basic_auth: [] } ], tags: .[1].tags, components: { schemas: .[1].components.schemas }, paths: .[1].paths } | .components.securitySchemes = { basic_auth: { type: "http", scheme: "basic", }, } | .components.schemas.OCSMeta = { type: "object", required: [ "status", "statuscode" ], properties: { status: { type: "string" }, statuscode: { type: "integer" }, message: { type: "string" }, totalitems: { type: "string" }, itemsperpage: { type: "string" } } } | .components.schemas.EmptyOCS = { type: "object", required: [ "ocs" ], properties: { ocs: { type: "object", required: [ "meta", "data" ], properties: { meta: { "$ref": "#/components/schemas/OCSMeta" }, data: { type: "array" } } } } } ' \ specs/templates/"$codename".json \ specs/"$codename".json \ > /tmp/nextcloud-neon/"$codename".json cp /tmp/nextcloud-neon/"$codename".json specs/"$codename".json done base_spec=/tmp/nextcloud-neon/base.json merged_spec=/tmp/nextcloud-neon/merged.json for codename in ${codenames[*]}; do if [ ! -f $base_spec ]; then cp specs/"$codename".json $base_spec else jq \ -s \ '{ servers: .[0].servers, security: .[0].security, tags: (.[0].tags + .[1].tags), components: (.[0].components * .[1].components), paths: (.[0].paths * .[1].paths), }' \ $base_spec \ specs/"$codename".json \ > $merged_spec cp $merged_spec $base_spec fi done jq \ ' { openapi: "3.1.0", info: { title: "Nextcloud", version: "latest", license: { name: "agpl", identifier: "AGPL-3.0" } }, servers: .servers, security: .security, tags: .tags, components: .components, paths: .paths, } ' $merged_spec > packages/nextcloud/lib/src/nextcloud.openapi.json ( cd packages/nextcloud rm -rf .dart_tool/build fvm dart pub run build_runner build --delete-conflicting-outputs ) ./tool/format.sh