]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - scripts/openapi-clients.sh
OpenAPI clients generation
[github/Chocobozzz/PeerTube.git] / scripts / openapi-clients.sh
diff --git a/scripts/openapi-clients.sh b/scripts/openapi-clients.sh
new file mode 100755 (executable)
index 0000000..b031cea
--- /dev/null
@@ -0,0 +1,81 @@
+#!/bin/bash
+# Required environment vars
+# =========================
+# API_LANGS
+#   A ':' delimited list of the client lib languages to be generated
+# API_GIT_USER
+#   The user that will be used to push/pull from the APIs repos
+# API_GIT_EMAIL
+#   The git email
+# GIT_TOKEN
+#   A personal access token for github or gilab for pushing to repos
+#   !!!This is a secret and shouldn't be logged publicly!!!
+
+# (Optional environment vars)
+# ===========================
+# API_COMMIT_MSG
+#   A message to use when committing to the lib repo
+# API_PATH_PREFIX
+#   Will be used for building the URL to the repo and path to checkout.
+#   !!! End with a slash "/", otherwise the prefix will be tacked onto the language
+# API_URL_USERNAME
+#   The username to use building the URL to the git repo.
+#   Default: API_GIT_USER
+# API_REPO_HOST
+#   Whoever's hosting the repo e.g gitlab.com, github.com, etc.
+#   Default: framagit.org
+
+# Unofficial bash strict mode
+# https://web.archive.org/web/20190115051613/https://redsymbol.net/articles/unofficial-bash-strict-mode/
+set -euo pipefail
+IFS=$'\n\t '
+
+# Set default values
+API_URL_USERNAME="${API_URL_USERNAME:-$API_GIT_USER}"
+API_PATH_PREFIX="${API_PATH_PREFIX:-}"
+API_REPO_HOST=${API_REPO_HOST:-framagit.org}
+
+echo "API_GIT_USER='${API_GIT_USER}'"
+echo "API_URL_USERNAME='${API_URL_USERNAME}'"
+echo "API_LANGS='${API_LANGS}'"
+
+git config --global user.email "${API_GIT_EMAIL}"
+git config --global user.name "${API_GIT_USER}"
+
+for lang in ${API_LANGS//:/ } ; do
+(
+    echo "Generating client API libs for $lang"
+
+    out_dir_prefix="dist/api/${API_PATH_PREFIX}"
+    out_dir="${out_dir_prefix}/${lang}"
+    git_repo_id="${API_PATH_PREFIX}${lang}"
+    host_path="${API_REPO_HOST}/${API_URL_USERNAME}/${git_repo_id}.git"
+    git_remote="https://${API_GIT_USER}:${GIT_TOKEN}@${host_path}"
+    if ! [ -e "$out_dir" ] ; then
+        # Make sure the prefix exists before cloning the repo
+        mkdir -p "${out_dir_prefix}"
+        git clone "https://${host_path}" "$out_dir"
+    fi
+
+    npx openapi-generator generate \
+        -i support/doc/api/openapi.yaml \
+        -c "support/openapi/${lang}.yaml" \
+        -g "$lang" \
+        --git-host "${API_REPO_HOST}" \
+        --git-user-id "${API_URL_USERNAME}" \
+        --git-repo-id "${git_repo_id}" \
+        -o "${out_dir}"
+
+    # Commit and push changes to the remote
+    cd "$out_dir"
+    git remote set-url origin "$git_remote"
+    # Make sure something has changed
+  if [[ $(git status -s | wc -l) = 0 ]] ; then
+        echo "No changes from previous version"
+        continue
+    fi
+    git add .
+    git commit -m "${API_COMMIT_MSG:-"Minor update $lang"}"
+    git push
+)
+done