diff options
Diffstat (limited to 'scripts/openapi-clients.sh')
-rwxr-xr-x | scripts/openapi-clients.sh | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/scripts/openapi-clients.sh b/scripts/openapi-clients.sh new file mode 100755 index 000000000..c799658e3 --- /dev/null +++ b/scripts/openapi-clients.sh | |||
@@ -0,0 +1,84 @@ | |||
1 | #!/bin/bash | ||
2 | # Required environment vars | ||
3 | # ========================= | ||
4 | # API_LANGS | ||
5 | # A ':' delimited list of the client lib languages to be generated | ||
6 | # API_GIT_USER | ||
7 | # The user that will be used to push/pull from the APIs repos | ||
8 | # API_GIT_EMAIL | ||
9 | # The git email | ||
10 | # GIT_TOKEN | ||
11 | # A personal access token for github or gilab for pushing to repos | ||
12 | # !!!This is a secret and shouldn't be logged publicly!!! | ||
13 | |||
14 | # (Optional environment vars) | ||
15 | # =========================== | ||
16 | # API_COMMIT_MSG | ||
17 | # A message to use when committing to the lib repo | ||
18 | # API_PATH_PREFIX | ||
19 | # Will be used for building the URL to the repo and path to checkout. | ||
20 | # !!! End with a slash "/", otherwise the prefix will be tacked onto the language | ||
21 | # API_URL_USERNAME | ||
22 | # The username to use building the URL to the git repo. | ||
23 | # Default: API_GIT_USER | ||
24 | # API_REPO_HOST | ||
25 | # Whoever's hosting the repo e.g gitlab.com, github.com, etc. | ||
26 | # Default: framagit.org | ||
27 | |||
28 | # Unofficial bash strict mode | ||
29 | # https://web.archive.org/web/20190115051613/https://redsymbol.net/articles/unofficial-bash-strict-mode/ | ||
30 | set -euo pipefail | ||
31 | IFS=$'\n\t ' | ||
32 | |||
33 | # Set default values | ||
34 | API_URL_USERNAME="${API_URL_USERNAME:-$API_GIT_USER}" | ||
35 | API_PATH_PREFIX="${API_PATH_PREFIX:-}" | ||
36 | API_REPO_HOST=${API_REPO_HOST:-framagit.org} | ||
37 | |||
38 | echo "API_GIT_USER='${API_GIT_USER}'" | ||
39 | echo "API_URL_USERNAME='${API_URL_USERNAME}'" | ||
40 | echo "API_LANGS='${API_LANGS}'" | ||
41 | |||
42 | git config --global user.email "${API_GIT_EMAIL}" | ||
43 | git config --global user.name "${API_GIT_USER}" | ||
44 | |||
45 | for lang in ${API_LANGS//:/ } ; do | ||
46 | ( | ||
47 | echo "Generating client API libs for $lang" | ||
48 | |||
49 | lang_dir="support/openapi/${lang}" | ||
50 | |||
51 | out_dir_prefix="dist/api/${API_PATH_PREFIX}" | ||
52 | out_dir="${out_dir_prefix}/${lang}" | ||
53 | git_repo_id="${API_PATH_PREFIX}${lang}" | ||
54 | host_path="${API_REPO_HOST}/${API_URL_USERNAME}/${git_repo_id}.git" | ||
55 | git_remote="https://${API_GIT_USER}:${GIT_TOKEN}@${host_path}" | ||
56 | if ! [ -e "$out_dir" ] ; then | ||
57 | # Make sure the prefix exists before cloning the repo | ||
58 | mkdir -p "${out_dir_prefix}" | ||
59 | git clone "https://${host_path}" "$out_dir" | ||
60 | fi | ||
61 | |||
62 | npx openapi-generator generate \ | ||
63 | -i support/doc/api/openapi.yaml \ | ||
64 | -c "${lang_dir}/def.yaml" \ | ||
65 | -t "${lang_dir}" \ | ||
66 | -g "$lang" \ | ||
67 | --git-host "${API_REPO_HOST}" \ | ||
68 | --git-user-id "${API_URL_USERNAME}" \ | ||
69 | --git-repo-id "${git_repo_id}" \ | ||
70 | -o "${out_dir}" | ||
71 | |||
72 | # Commit and push changes to the remote | ||
73 | cd "$out_dir" | ||
74 | git remote set-url origin "$git_remote" | ||
75 | # Make sure something has changed | ||
76 | if [[ $(git status -s | wc -l) = 0 ]] ; then | ||
77 | echo "No changes from previous version" | ||
78 | continue | ||
79 | fi | ||
80 | git add . | ||
81 | git commit -m "${API_COMMIT_MSG:-"Minor update $lang"}" | ||
82 | git push | ||
83 | ) | ||
84 | done | ||