aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ci/azure-pipelines-api-client.yml62
-rw-r--r--.ci/azure-pipelines-package.yml33
-rw-r--r--.ci/azure-pipelines.yml9
-rw-r--r--.gitignore1
-rw-r--r--apiclient/.openapi-generator-ignore2
-rw-r--r--apiclient/templates/typescript/axios/package.mustache30
-rw-r--r--apiclient/templates/typescript/axios/stable.sh9
-rw-r--r--apiclient/templates/typescript/axios/unstable.sh9
8 files changed, 154 insertions, 1 deletions
diff --git a/.ci/azure-pipelines-api-client.yml b/.ci/azure-pipelines-api-client.yml
new file mode 100644
index 000000000..7f428aec1
--- /dev/null
+++ b/.ci/azure-pipelines-api-client.yml
@@ -0,0 +1,62 @@
+parameters:
+ - name: LinuxImage
+ type: string
+ default: "ubuntu-latest"
+ - name: GeneratorVersion
+ type: string
+ default: "5.0.0-beta2"
+
+jobs:
+- job: GenerateApiClients
+ displayName: 'Generate Api Clients'
+ dependsOn: Test
+
+ pool:
+ vmImage: "${{ parameters.LinuxImage }}"
+
+ steps:
+ - task: DownloadPipelineArtifact@2
+ displayName: 'Download OpenAPI Spec Artifact'
+ inputs:
+ source: 'current'
+ artifact: "OpenAPI Spec"
+ path: "$(System.ArtifactsDirectory)/openapispec"
+ runVersion: "latest"
+
+ - task: CmdLine@2
+ displayName: 'Download OpenApi Generator'
+ inputs:
+ script: "wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${{ parameters.GeneratorVersion }}/openapi-generator-cli-${{ parameters.GeneratorVersion }}.jar -O openapi-generator-cli.jar"
+
+# Generate npm api client
+# Unstable
+ - task: CmdLine@2
+ displayName: 'Build unstable typescript axios client'
+ condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
+ inputs:
+ script: 'bash ./apiclient/templates/typescript/axios/unstable.sh'
+
+ - task: Npm@1
+ displayName: 'Publish unstable typescript axios client'
+ condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
+ inputs:
+ command: publish
+ publishRegistry: useFeed
+ publishFeed: unstable
+ workingDir: ./apiclient/generated/typescript/axios
+
+# Stable
+ - task: CmdLine@2
+ displayName: 'Build stable typescript axios client'
+ condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
+ inputs:
+ script: 'bash ./apiclient/templates/typescript/axios/stable.sh'
+
+ - task: Npm@1
+ displayName: 'Publish stable typescript axios client'
+ condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
+ inputs:
+ command: publish
+ publishRegistry: useExternalRegistry
+ publishEndpoint: 'jellyfin-bot for NPM'
+ workingDir: ./apiclient/generated/typescript/axios
diff --git a/.ci/azure-pipelines-package.yml b/.ci/azure-pipelines-package.yml
index cc845afd4..67aac45c9 100644
--- a/.ci/azure-pipelines-package.yml
+++ b/.ci/azure-pipelines-package.yml
@@ -63,7 +63,38 @@ jobs:
sshEndpoint: repository
sourceFolder: '$(Build.SourcesDirectory)/deployment/dist'
contents: '**'
- targetFolder: '/srv/repository/incoming/azure/$(Build.BuildNumber)/$(BuildConfiguration)'
+
+- job: OpenAPISpec
+ dependsOn: Test
+ condition: or(startsWith(variables['Build.SourceBranch'], 'refs/heads/master'),startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
+ displayName: 'Push OpenAPI Spec to repository'
+
+ pool:
+ vmImage: 'ubuntu-latest'
+
+ steps:
+ - task: DownloadPipelineArtifact@2
+ displayName: 'Download OpenAPI Spec'
+ inputs:
+ source: 'current'
+ artifact: "OpenAPI Spec"
+ path: "$(System.ArtifactsDirectory)/openapispec"
+ runVersion: "latest"
+
+ - task: SSH@0
+ displayName: 'Create target directory on repository server'
+ inputs:
+ sshEndpoint: repository
+ runOptions: 'inline'
+ inline: 'mkdir -p /srv/repository/incoming/azure/$(Build.BuildNumber)'
+
+ - task: CopyFilesOverSSH@0
+ displayName: 'Upload artifacts to repository server'
+ inputs:
+ sshEndpoint: repository
+ sourceFolder: '$(System.ArtifactsDirectory)/openapispec'
+ contents: 'openapi.json'
+ targetFolder: '/srv/repository/incoming/azure/$(Build.BuildNumber)'
- job: BuildDocker
displayName: 'Build Docker'
diff --git a/.ci/azure-pipelines.yml b/.ci/azure-pipelines.yml
index b417aae67..5b5a17dea 100644
--- a/.ci/azure-pipelines.yml
+++ b/.ci/azure-pipelines.yml
@@ -34,6 +34,12 @@ jobs:
Linux: 'ubuntu-latest'
Windows: 'windows-latest'
macOS: 'macos-latest'
+
+- ${{ if or(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master')) }}:
+ - template: azure-pipelines-test.yml
+ parameters:
+ ImageNames:
+ Linux: 'ubuntu-latest'
- ${{ if not(or(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master'))) }}:
- template: azure-pipelines-abi.yml
@@ -55,3 +61,6 @@ jobs:
- ${{ if or(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master')) }}:
- template: azure-pipelines-package.yml
+
+- ${{ if or(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), startsWith(variables['Build.SourceBranch'], 'refs/heads/master')) }}:
+ - template: azure-pipelines-api-client.yml
diff --git a/.gitignore b/.gitignore
index 0df7606ce..7cd3d0068 100644
--- a/.gitignore
+++ b/.gitignore
@@ -276,3 +276,4 @@ BenchmarkDotNet.Artifacts
web/
web-src.*
MediaBrowser.WebDashboard/jellyfin-web
+apiclient/generated
diff --git a/apiclient/.openapi-generator-ignore b/apiclient/.openapi-generator-ignore
new file mode 100644
index 000000000..f3802cf54
--- /dev/null
+++ b/apiclient/.openapi-generator-ignore
@@ -0,0 +1,2 @@
+# Prevent generator from creating these files:
+git_push.sh
diff --git a/apiclient/templates/typescript/axios/package.mustache b/apiclient/templates/typescript/axios/package.mustache
new file mode 100644
index 000000000..7bfab08cb
--- /dev/null
+++ b/apiclient/templates/typescript/axios/package.mustache
@@ -0,0 +1,30 @@
+{
+ "name": "@jellyfin/client-axios",
+ "version": "10.7.0{{snapshotVersion}}",
+ "description": "Jellyfin api client using axios",
+ "author": "Jellyfin Contributors",
+ "keywords": [
+ "axios",
+ "typescript",
+ "jellyfin"
+ ],
+ "license": "GPL-3.0-only",
+ "main": "./dist/index.js",
+ "typings": "./dist/index.d.ts",
+ "scripts": {
+ "build": "tsc --outDir dist/",
+ "prepublishOnly": "npm run build"
+ },
+ "dependencies": {
+ "axios": "^0.19.2"
+ },
+ "devDependencies": {
+ "@types/node": "^12.11.5",
+ "typescript": "^3.6.4"
+ }{{#npmRepository}},{{/npmRepository}}
+{{#npmRepository}}
+ "publishConfig": {
+ "registry": "{{npmRepository}}"
+ }
+{{/npmRepository}}
+}
diff --git a/apiclient/templates/typescript/axios/stable.sh b/apiclient/templates/typescript/axios/stable.sh
new file mode 100644
index 000000000..118ef219f
--- /dev/null
+++ b/apiclient/templates/typescript/axios/stable.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+java -jar openapi-generator-cli.jar generate \
+ --input-spec $(System.ArtifactsDirectory)/openapispec/openapi.json \
+ --generator-name typescript-axios \
+ --output ./apiclient/generated/typescript/axios \
+ --template-dir ./apiclient/templates/typescript/axios \
+ --ignore-file-override ./apiclient/.openapi-generator-ignore \
+ --additional-properties=useSingleRequestParameter="true",withSeparateModelsAndApi="true",npmName="axios"
diff --git a/apiclient/templates/typescript/axios/unstable.sh b/apiclient/templates/typescript/axios/unstable.sh
new file mode 100644
index 000000000..be9f9be43
--- /dev/null
+++ b/apiclient/templates/typescript/axios/unstable.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+java -jar openapi-generator-cli.jar generate \
+ --input-spec $(System.ArtifactsDirectory)/openapispec/openapi.json \
+ --generator-name typescript-axios \
+ --output ./apiclient/generated/typescript/axios \
+ --template-dir ./apiclient/templates/typescript/axios \
+ --ignore-file-override ./apiclient/.openapi-generator-ignore \
+ --additional-properties=useSingleRequestParameter="true",withSeparateModelsAndApi="true",npmName="axios",snapshotVersion="-SNAPSHOT.$(Build.BuildNumber)",npmRepository="https://pkgs.dev.azure.com/jellyfin-project/jellyfin/_packaging/unstable/npm/registry/"