From 002df3813d13c5accd36d7943af2b17376a6d1ac Mon Sep 17 00:00:00 2001 From: Average Dude Date: Fri, 14 Feb 2020 14:14:14 +0100 Subject: OpenAPI clients generation --- scripts/openapi-clients.sh | 81 +++++++++++++++++++++++++++++++++++++ scripts/openapi-peertube-version.sh | 5 +++ 2 files changed, 86 insertions(+) create mode 100755 scripts/openapi-clients.sh (limited to 'scripts') diff --git a/scripts/openapi-clients.sh b/scripts/openapi-clients.sh new file mode 100755 index 000000000..b031ceac1 --- /dev/null +++ b/scripts/openapi-clients.sh @@ -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 diff --git a/scripts/openapi-peertube-version.sh b/scripts/openapi-peertube-version.sh index 4eb481e64..49154a5f3 100755 --- a/scripts/openapi-peertube-version.sh +++ b/scripts/openapi-peertube-version.sh @@ -4,3 +4,8 @@ PACKAGE_VERSION=$(node -p "require('./package.json').version") sed -i "s/\(^\s*\)version: .*/\1version: $PACKAGE_VERSION/" ./support/doc/api/openapi.yaml + +# Sets the package version for libs +echo "packageVersion: $PACKAGE_VERSION" >> ./support/openapi/go.yaml +echo "artifactVersion: $PACKAGE_VERSION" >> ./support/openapi/kotlin.yaml +echo "packageVersion: $PACKAGE_VERSION" >> ./support/openapi/python.yaml -- cgit v1.2.3