#!/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" lang_dir="support/openapi/${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 @openapitools/openapi-generator-cli generate \ -i support/doc/api/openapi.yaml \ -c "${lang_dir}/def.yaml" \ -t "${lang_dir}" \ -g "$lang" \ --skip-validate-spec \ --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