mirror of https://github.com/Chocobozzz/PeerTube
OpenAPI clients generation
parent
68ca61941e
commit
002df3813d
|
@ -4,6 +4,7 @@ stages:
|
||||||
- build-and-lint
|
- build-and-lint
|
||||||
- test
|
- test
|
||||||
- docker-nightly
|
- docker-nightly
|
||||||
|
- clients
|
||||||
|
|
||||||
#before_script:
|
#before_script:
|
||||||
# - 'sed -i -z "s/database:\n hostname: ''localhost''/database:\n hostname: ''postgres''/" config/test.yaml'
|
# - 'sed -i -z "s/database:\n hostname: ''localhost''/database:\n hostname: ''postgres''/" config/test.yaml'
|
||||||
|
@ -84,6 +85,21 @@ cache:
|
||||||
# script:
|
# script:
|
||||||
# - NODE_PENDING_JOB_WAIT=1000 npm run ci -- api-$CI_NODE_INDEX
|
# - NODE_PENDING_JOB_WAIT=1000 npm run ci -- api-$CI_NODE_INDEX
|
||||||
|
|
||||||
|
build-openapi-clients:
|
||||||
|
stage: clients
|
||||||
|
only:
|
||||||
|
refs:
|
||||||
|
- master
|
||||||
|
- schedules
|
||||||
|
changes:
|
||||||
|
- support/doc/api/openapi.yaml
|
||||||
|
script:
|
||||||
|
- apt-get update -qq
|
||||||
|
- apt-get -yqqq install openjdk-8-jre
|
||||||
|
- yarn install --pure-lockfile
|
||||||
|
- scripts/openapi-peertube-version.sh
|
||||||
|
- scripts/openapi-clients.sh
|
||||||
|
|
||||||
build-nightly:
|
build-nightly:
|
||||||
stage: docker-nightly
|
stage: docker-nightly
|
||||||
only:
|
only:
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
"release": "scripty",
|
"release": "scripty",
|
||||||
"release-embed-api": "scripty",
|
"release-embed-api": "scripty",
|
||||||
"nightly": "scripty",
|
"nightly": "scripty",
|
||||||
|
"openapi-clients": "scripty",
|
||||||
"client-report": "scripty",
|
"client-report": "scripty",
|
||||||
"swagger-cli": "swagger-cli",
|
"swagger-cli": "swagger-cli",
|
||||||
"sass-lint": "sass-lint"
|
"sass-lint": "sass-lint"
|
||||||
|
@ -142,6 +143,7 @@
|
||||||
"youtube-dl": "^3.0.2"
|
"youtube-dl": "^3.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@openapitools/openapi-generator-cli": "^1.0.10-4.2.3",
|
||||||
"@types/apicache": "^1.2.0",
|
"@types/apicache": "^1.2.0",
|
||||||
"@types/async": "^3.0.0",
|
"@types/async": "^3.0.0",
|
||||||
"@types/async-lock": "^1.1.0",
|
"@types/async-lock": "^1.1.0",
|
||||||
|
|
|
@ -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
|
|
@ -4,3 +4,8 @@
|
||||||
PACKAGE_VERSION=$(node -p "require('./package.json').version")
|
PACKAGE_VERSION=$(node -p "require('./package.json').version")
|
||||||
|
|
||||||
sed -i "s/\(^\s*\)version: .*/\1version: $PACKAGE_VERSION/" ./support/doc/api/openapi.yaml
|
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
|
||||||
|
|
|
@ -13,6 +13,7 @@ info:
|
||||||
altText: PeerTube Project Homepage
|
altText: PeerTube Project Homepage
|
||||||
description: |
|
description: |
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
The PeerTube API is built on HTTP(S). Our API is RESTful. It has predictable
|
The PeerTube API is built on HTTP(S). Our API is RESTful. It has predictable
|
||||||
resource URLs. It returns HTTP response codes to indicate errors. It also
|
resource URLs. It returns HTTP response codes to indicate errors. It also
|
||||||
accepts and returns JSON in the HTTP body. You can use your favorite
|
accepts and returns JSON in the HTTP body. You can use your favorite
|
||||||
|
@ -22,11 +23,13 @@ info:
|
||||||
which generates a client SDK in the language of your choice.
|
which generates a client SDK in the language of your choice.
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
|
|
||||||
When you sign up for an account, you are given the possibility to generate
|
When you sign up for an account, you are given the possibility to generate
|
||||||
sessions, and authenticate using this session token. One session token can
|
sessions, and authenticate using this session token. One session token can
|
||||||
currently be used at a time.
|
currently be used at a time.
|
||||||
|
|
||||||
# Errors
|
# Errors
|
||||||
|
|
||||||
The API uses standard HTTP status codes to indicate the success or failure
|
The API uses standard HTTP status codes to indicate the success or failure
|
||||||
of the API call. The body of the response will be JSON in the following
|
of the API call. The body of the response will be JSON in the following
|
||||||
format.
|
format.
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# https://openapi-generator.tech/docs/generators/go
|
||||||
|
|
||||||
|
packageName: peertube
|
|
@ -0,0 +1,6 @@
|
||||||
|
# https://openapi-generator.tech/docs/generators/kotlin
|
||||||
|
|
||||||
|
artifactId: peertube-api
|
||||||
|
groupId: org.peertube
|
||||||
|
packageName: org.peertube.client
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# https://openapi-generator.tech/docs/generators/python
|
||||||
|
|
||||||
|
packageName: peertube
|
||||||
|
projectName: peertube
|
||||||
|
|
|
@ -18,6 +18,11 @@
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
|
"@openapitools/openapi-generator-cli@^1.0.10-4.2.3":
|
||||||
|
version "1.0.10-4.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.10-4.2.3.tgz#4b934362efb9262fc236d4fb81b381e29bdb8245"
|
||||||
|
integrity sha512-Xo4rbz3aPiObpVS8oBUR0pHWYU5WBG/bmsJg16yCG7/vpGE8o1YsROTWMFfaMepWfxESrLP5XOqlBkZqbre7dw==
|
||||||
|
|
||||||
"@types/apicache@^1.2.0":
|
"@types/apicache@^1.2.0":
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/apicache/-/apicache-1.2.2.tgz#b820659b1d95e66ec0e71dcd0317e9d30f0c154b"
|
resolved "https://registry.yarnpkg.com/@types/apicache/-/apicache-1.2.2.tgz#b820659b1d95e66ec0e71dcd0317e9d30f0c154b"
|
||||||
|
|
Loading…
Reference in New Issue