Skip to content

Commit 83f3cf7

Browse files
committed
Add configuration. Store output paths and metadata in /data. Refactors and simplifying module and function names.
1 parent fe603d6 commit 83f3cf7

File tree

8 files changed

+49
-1296
lines changed

8 files changed

+49
-1296
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ node_modules
1010
.hugo_build.lock
1111
/content/influxdb/*/api/**/*.html
1212
/api-docs/redoc-static.html*
13+
/data/api*
1314
/content/influxdb/*/api/**
14-
/static/openapi
1515
.vscode/*
1616
.idea
1717
**/config.toml

api-docs/scripts/generate-openapi-articles.js

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { execSync } = require('child_process');
22
const path = require('path');
33
const fs = require('fs');
4-
const openapiPathsToHugo = require('./openapi-paths-to-hugo-data/index.js');
4+
const openapiDocs = require('./openapi-docs/index.js');
55

66
// Calculate the relative paths
77
const DOCS_ROOT = '.';
@@ -24,7 +24,7 @@ function generateDataFromOpenAPI(specFile, dataOutPath, articleOutPath) {
2424
fs.mkdirSync(dataOutPath, { recursive: true });
2525
}
2626

27-
openapiPathsToHugo.generateHugoData({
27+
openapiDocs.openapiToData({
2828
dataOutPath,
2929
articleOutPath,
3030
specFile
@@ -54,27 +54,33 @@ const generatePagesFromArticleData = async (articlesPath, contentPath) => {
5454
)
5555
}
5656

57-
const api_reference_paths = {
58-
'cloud-v2': {
59-
spec_file: path.join(API_DOCS_ROOT, '/cloud/v2/ref.yml'),
60-
pages_dir: path.join(DOCS_ROOT, '/content/influxdb/cloud/api/v2'),
61-
},
62-
'oss-v2': {
63-
spec_file: path.join(API_DOCS_ROOT, '/v2/ref.yml'),
64-
pages_dir: path.join(DOCS_ROOT, '/content/influxdb/v2/api/v2'),
65-
}
57+
// To output to a public folder where JavaScript can access it, use /static/<namespace>--for example: /static/openapi/
58+
const config = {
59+
dataOutPath: path.join(DOCS_ROOT, '/data/api/influxdb'),
60+
metadataOutPath: path.join(DOCS_ROOT, `/data/api-metadata/influxdb`),
61+
apis: [
62+
{
63+
name: 'cloud-v2',
64+
spec_file: path.join(API_DOCS_ROOT, '/cloud/v2/ref.yml'),
65+
pages_dir: path.join(DOCS_ROOT, '/content/influxdb/cloud/api/v2'),
66+
},
67+
{
68+
name: 'oss-v2',
69+
spec_file: path.join(API_DOCS_ROOT, '/v2/ref.yml'),
70+
pages_dir: path.join(DOCS_ROOT, '/content/influxdb/v2/api/v2'),
71+
}
72+
]
6673
}
6774

68-
Object.keys(api_reference_paths).forEach((key) => {
69-
const api = api_reference_paths[key];
70-
const staticPath = path.join(DOCS_ROOT, '/static/openapi');
71-
const staticSpecPath = path.join(staticPath, `/influxdb-${key}.yml`);
72-
const staticPathsPath = path.join(staticPath, `/influxdb-${key}/paths`);
73-
const articlesPath = path.join(DOCS_ROOT, `/data/article-data/influxdb/${key}`);
75+
config.apis.forEach(api => {
7476
// Execute the getswagger.sh script
75-
execCommand(`${path.join(API_DOCS_ROOT, 'getswagger.sh')} ${key} -B`);
76-
// Copy the generated OpenAPI spec to the static folder
77-
fs.copyFileSync(api.spec_file, staticSpecPath);
78-
generateDataFromOpenAPI(api.spec_file, staticPathsPath, articlesPath);
79-
generatePagesFromArticleData(articlesPath, api.pages_dir);
77+
execCommand(`${path.join(API_DOCS_ROOT, 'getswagger.sh')} ${api.name} -B`);
78+
const dataOut = path.join(config.dataOutPath, api.name);
79+
const metadataOut = path.join(config.metadataOutPath, api.name);
80+
if (!fs.existsSync(dataOut)) {
81+
fs.mkdirSync(dataOut, { recursive: true });
82+
}
83+
fs.copyFileSync(api.spec_file, path.join(dataOut, api.name + '.yml'));
84+
generateDataFromOpenAPI(api.spec_file, dataOut, metadataOut);
85+
generatePagesFromArticleData(metadataOut, api.pages_dir);
8086
});

api-docs/scripts/openapi-paths-to-hugo-data/cli.js renamed to api-docs/scripts/openapi-docs/cli.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
const path = require('path');
21
const argparse = require('argparse');
3-
const openapiPathsToHugo = require('./index.js');
2+
const apiDocs = require('./index.js');
43

54
const cli = new argparse.ArgumentParser({
6-
prog: 'openapi-docs',
5+
prog: 'api-docs',
76
add_help: true
87
});
98

109
cli.add_argument('--hugo', {
11-
help: 'Generate Hugo data from OpenAPI paths',
12-
dest: 'generateHugoData'
10+
help: 'Generate a data file with objects (e.g. for Hugo data) from OpenAPI paths',
11+
dest: 'generateData'
1312
});
1413

1514
cli.add_argument('-d', '--data-output', {
@@ -42,12 +41,12 @@ var options = cli.parse_args();
4241

4342
/* Usage examples
4443
*
45-
node ./openapi-paths-to-hugo-data/index.js \
44+
node ./api-docs-data/index.js \
4645
./data/influxdb/cloud/openapi.yaml \
4746
-d ./data/influxdb/cloud/path-apis \
4847
-o ./data/article-data/influxdb/cloud
4948
50-
node ./openapi-paths-to-hugo-data/index.js \
49+
node ./api-docs-data/index.js \
5150
./data/influxdb/oss/openapi.yaml \
5251
-d ./data/influxdb/oss/path-apis \
5352
-o ./data/article-data/influxdb/oss
@@ -57,6 +56,6 @@ var options = cli.parse_args();
5756
////////////////////////////////////////////////////////////////////////////////
5857

5958

60-
if (options.generateHugoData) {
61-
openapiPathsToHugo.generateHugoData(options);
59+
if (options.generateData) {
60+
apiDocs.openapiToData(options);
6261
}

api-docs/scripts/openapi-paths-to-hugo-data/index.js renamed to api-docs/scripts/openapi-docs/index.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const openapiUtils = {
1818
}
1919
}
2020

21-
function writePathOpenapis(openapi, prefix, outPath) {
21+
function openapiPaths(openapi, prefix, outPath) {
2222
const pathGroups = {};
2323
Object.keys(openapi.paths).sort()
2424
.forEach((p) => {
@@ -84,7 +84,7 @@ function createArticleDataForPathGroup(openapi) {
8484
return article;
8585
}
8686

87-
function writeOpenapiArticleData(sourcePath, targetPath, opts) {
87+
function openapiMetadata(sourcePath, targetPath, opts) {
8888
const isFile = filePath => {
8989
return fs.lstatSync(filePath).isFile();
9090
};
@@ -117,17 +117,20 @@ function writeOpenapiArticleData(sourcePath, targetPath, opts) {
117117
}
118118
}
119119

120-
function generateHugoData(options) {
120+
function openapiToData(options) {
121121
const filenamePrefix = `${path.parse(options.specFile).name}-`;
122122

123123
const sourceFile = readFile(options.specFile, 'utf8');
124124
console.log(`Generating OpenAPI path files in ${options.dataOutPath}....`);
125-
writePathOpenapis(sourceFile, filenamePrefix, options.dataOutPath);
125+
openapiPaths(sourceFile, filenamePrefix, options.dataOutPath);
126126

127127
console.log(`Generating OpenAPI article data in ${options.articleOutPath}...`);
128-
writeOpenapiArticleData(options.dataOutPath, options.articleOutPath, {filePattern: filenamePrefix});
128+
openapiMetadata(options.dataOutPath, options.articleOutPath, {filePattern: filenamePrefix});
129129
}
130130

131131
module.exports = {
132-
generateHugoData
132+
openapiToData,
133+
openapiPaths,
134+
openapiMetadata
135+
133136
};

api-docs/scripts/openapi-paths-to-hugo-data/package.json renamed to api-docs/scripts/openapi-docs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "openapi-paths-to-hugo-data",
2+
"name": "api-docs-data",
33
"version": "1.0.0",
44
"description": "A tool to convert OpenAPI v3 paths to Hugo data.",
55
"main": "index.js",

0 commit comments

Comments
 (0)