OpenAPI clients generation
This commit is contained in:
		
							parent
							
								
									68ca61941e
								
							
						
					
					
						commit
						002df3813d
					
				
					 9 changed files with 126 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -4,6 +4,7 @@ stages:
 | 
			
		|||
  - build-and-lint
 | 
			
		||||
  - test
 | 
			
		||||
  - docker-nightly
 | 
			
		||||
  - clients
 | 
			
		||||
 | 
			
		||||
#before_script:
 | 
			
		||||
#  - 'sed -i -z "s/database:\n  hostname: ''localhost''/database:\n  hostname: ''postgres''/" config/test.yaml'
 | 
			
		||||
| 
						 | 
				
			
			@ -84,6 +85,21 @@ cache:
 | 
			
		|||
#  script:
 | 
			
		||||
#    - 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:
 | 
			
		||||
  stage: docker-nightly
 | 
			
		||||
  only:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,6 +73,7 @@
 | 
			
		|||
    "release": "scripty",
 | 
			
		||||
    "release-embed-api": "scripty",
 | 
			
		||||
    "nightly": "scripty",
 | 
			
		||||
    "openapi-clients": "scripty",
 | 
			
		||||
    "client-report": "scripty",
 | 
			
		||||
    "swagger-cli": "swagger-cli",
 | 
			
		||||
    "sass-lint": "sass-lint"
 | 
			
		||||
| 
						 | 
				
			
			@ -142,6 +143,7 @@
 | 
			
		|||
    "youtube-dl": "^3.0.2"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@openapitools/openapi-generator-cli": "^1.0.10-4.2.3",
 | 
			
		||||
    "@types/apicache": "^1.2.0",
 | 
			
		||||
    "@types/async": "^3.0.0",
 | 
			
		||||
    "@types/async-lock": "^1.1.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										81
									
								
								scripts/openapi-clients.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										81
									
								
								scripts/openapi-clients.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -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")
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
  description: |
 | 
			
		||||
    # Introduction
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    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.
 | 
			
		||||
 | 
			
		||||
    # Authentication
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    currently be used at a time.
 | 
			
		||||
 | 
			
		||||
    # Errors
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    format.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								support/openapi/go.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								support/openapi/go.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
# https://openapi-generator.tech/docs/generators/go
 | 
			
		||||
 | 
			
		||||
packageName: peertube
 | 
			
		||||
							
								
								
									
										6
									
								
								support/openapi/kotlin.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								support/openapi/kotlin.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
# https://openapi-generator.tech/docs/generators/kotlin
 | 
			
		||||
 | 
			
		||||
artifactId: peertube-api
 | 
			
		||||
groupId: org.peertube
 | 
			
		||||
packageName: org.peertube.client
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								support/openapi/python.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								support/openapi/python.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
# https://openapi-generator.tech/docs/generators/python
 | 
			
		||||
 | 
			
		||||
packageName: peertube
 | 
			
		||||
projectName: peertube
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,11 @@
 | 
			
		|||
    esutils "^2.0.2"
 | 
			
		||||
    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":
 | 
			
		||||
  version "1.2.2"
 | 
			
		||||
  resolved "https://registry.yarnpkg.com/@types/apicache/-/apicache-1.2.2.tgz#b820659b1d95e66ec0e71dcd0317e9d30f0c154b"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue