Просмотр исходного кода

generate specification with shell script

Yuki Takei 1 год назад
Родитель
Сommit
c403c4eba8

+ 37 - 0
apps/app/bin/github-actions/openapi/swagger-definition-apiv3.js

@@ -0,0 +1,37 @@
+const path = require('node:path');
+
+const pkg = require('../../package.json');
+
+const apisBasePath = path.resolve(process.env.WORKSPACE_ROOT ?? '../../', 'apps/app');
+
+console.log(`apisBasePath: ${apisBasePath}`);
+module.exports = {
+  openapi: '3.0.1',
+  info: {
+    title: 'GROWI REST API v3',
+    version: pkg.version,
+  },
+  servers: [
+    {
+      url: 'https://demo.growi.org/_api/v3',
+    },
+  ],
+  apis: [
+    './src/server/routes/apiv3/**/*.{js,ts}',
+    './src/server/models/openapi/**/*.{js,ts}',
+  ],
+  security: [
+    {
+      api_key: [],
+    },
+  ],
+  components: {
+    securitySchemes: {
+      api_key: {
+        type: 'apiKey',
+        name: 'access_token',
+        in: 'query',
+      },
+    },
+  },
+};

+ 3 - 6
apps/app/config/swagger-definition.js → apps/app/bin/openapi/swagger-definition-apiv1.js

@@ -1,17 +1,14 @@
-const pkg = require('../package.json');
-
-const apiVersion = process.env.API_VERSION || '3';
-const basePath = (apiVersion === '1' ? '/_api' : `/_api/v${apiVersion}`);
+const pkg = require('../../package.json');
 
 
 module.exports = {
 module.exports = {
   openapi: '3.0.1',
   openapi: '3.0.1',
   info: {
   info: {
-    title: `GROWI REST API v${apiVersion}`,
+    title: 'GROWI REST API v1',
     version: pkg.version,
     version: pkg.version,
   },
   },
   servers: [
   servers: [
     {
     {
-      url: `https://demo.growi.org${basePath}`,
+      url: 'https://demo.growi.org/_api',
     },
     },
   ],
   ],
   security: [
   security: [

+ 28 - 0
apps/app/bin/openapi/swagger-definition-apiv3.js

@@ -0,0 +1,28 @@
+const pkg = require('../../package.json');
+
+module.exports = {
+  openapi: '3.0.1',
+  info: {
+    title: 'GROWI REST API v3',
+    version: pkg.version,
+  },
+  servers: [
+    {
+      url: 'https://demo.growi.org/_api/v3',
+    },
+  ],
+  security: [
+    {
+      api_key: [],
+    },
+  ],
+  components: {
+    securitySchemes: {
+      api_key: {
+        type: 'apiKey',
+        name: 'access_token',
+        in: 'query',
+      },
+    },
+  },
+};

+ 15 - 0
apps/app/bin/openapi/swagger-jsdoc-apiv1.sh

@@ -0,0 +1,15 @@
+# USAGE:
+#   cd apps/app && sh bin/openapi/swagger-jsdoc-apiv3.sh
+#   APP_PATH=/path/to/apps/app sh bin/openapi/swagger-jsdoc-apiv3.sh
+#   APP_PATH=/path/to/apps/app OUT=/path/to/output sh bin/openapi/swagger-jsdoc-apiv3.sh
+
+APP_PATH=${APP_PATH:-"."}
+
+OUT=${OUT:-"${APP_PATH}/tmp/swagger-apiv1.json"}
+
+swagger-jsdoc \
+  -o "${OUT}" \
+  -d "${APP_PATH}/bin/openapi/swagger-definition-apiv1.js" \
+  "${APP_PATH}/src/server/routes/*/*.{js,ts}" \
+  "${APP_PATH}/src/server/routes/attachment/**/*.{js,ts}" \
+  "${APP_PATH}/src/server/models/openapi/**/*.{js,ts}"

+ 14 - 0
apps/app/bin/openapi/swagger-jsdoc-apiv3.sh

@@ -0,0 +1,14 @@
+# USAGE:
+#   cd apps/app && sh bin/openapi/swagger-jsdoc-apiv3.sh
+#   APP_PATH=/path/to/apps/app sh bin/openapi/swagger-jsdoc-apiv3.sh
+#   APP_PATH=/path/to/apps/app OUT=/path/to/output sh bin/openapi/swagger-jsdoc-apiv3.sh
+
+APP_PATH=${APP_PATH:-"."}
+
+OUT=${OUT:-"${APP_PATH}/tmp/swagger-apiv3.json"}
+
+swagger-jsdoc \
+  -o "${OUT}" \
+  -d "${APP_PATH}/bin/openapi/swagger-definition-apiv3.js" \
+  "${APP_PATH}/src/server/routes/apiv3/**/*.{js,ts}" \
+  "${APP_PATH}/src/server/models/openapi/**/*.{js,ts}"

+ 2 - 2
apps/app/package.json

@@ -44,8 +44,8 @@
     "//// misc": "",
     "//// misc": "",
     "console": "yarn repl",
     "console": "yarn repl",
     "repl": "yarn cross-env NODE_ENV=development yarn ts-node src/server/repl.ts",
     "repl": "yarn cross-env NODE_ENV=development yarn ts-node src/server/repl.ts",
-    "openapi:v3": "cross-env API_VERSION=3 swagger-jsdoc -o tmp/swagger-apiv3.json -d config/swagger-definition.js \"src/server/routes/apiv3/**/*.{js,ts}\" \"src/server/models/**/*.{js,ts}\"",
-    "openapi:v1": "cross-env API_VERSION=1 swagger-jsdoc -o tmp/swagger-apiv1.json -d config/swagger-definition.js \"src/server/*/*.{js,ts}\" \"src/server/models/**/*.{js,ts}\"",
+    "openapi:v3": "sh bin/openapi/swagger-jsdoc-apiv3.sh",
+    "openapi:v1": "sh bin/openapi/swagger-jsdoc-apiv1.sh",
     "ts-node": "node -r ts-node/register/transpile-only -r tsconfig-paths/register -r dotenv-flow/config",
     "ts-node": "node -r ts-node/register/transpile-only -r tsconfig-paths/register -r dotenv-flow/config",
     "version": "yarn version --no-git-tag-version --non-interactive --preid=RC"
     "version": "yarn version --no-git-tag-version --non-interactive --preid=RC"
   },
   },