techdocs: Add JSON Schema config

Show better error if techdocs.builder is set to 'ci' and if no docs are found.
Return 404 from googleStorage client when a file is not found.
This commit is contained in:
Himanshu Mishra
2020-12-05 10:48:54 +01:00
parent c91fd25a53
commit a212e43142
5 changed files with 66 additions and 9 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ organization:
techdocs:
requestUrl: http://localhost:7000/api/techdocs
storageUrl: http://localhost:7000/api/techdocs/static/docs
docsBuilder: 'local' # Alternatives - 'ci'
builder: 'local' # Alternatives - 'ci'
generators:
techdocs: 'docker' # Alternatives - 'local'
publisher:
@@ -180,8 +180,8 @@ export class GoogleGCSPublish implements PublisherBase {
.file(filePath)
.createReadStream()
.on('error', err => {
this.logger.error(err.message);
res.send(err.message);
this.logger.warn(err.message);
res.status(404).send(err.message);
})
.on('data', chunk => {
fileStreamChunks.push(chunk);
@@ -120,10 +120,10 @@ export async function createRouter({
);
}
// techdocs-backend will only try to build documentation for an entity if techdocs.docsBuilder is set to 'local'
// techdocs-backend will only try to build documentation for an entity if techdocs.builder is set to 'local'
// If set to 'ci', it will only try to fetch and assume that that CI/CD pipeline of the repository hosting the
// entity's documentation is responsible for building and publishing documentation to the storage provider.
if (config.getString('techdocs.docsBuilder') === 'local') {
if (config.getString('techdocs.builder') === 'local') {
const docsBuilder = new DocsBuilder({
preparers,
generators,
+47 -2
View File
@@ -68,11 +68,56 @@
"visibility": "frontend"
},
"storageUrl": {
"type": "string"
"type": "string",
"visibility": "backend"
},
"generators": {
"type": "object",
"properties": {
"techdocs": {
"type": "string",
"visibility": "backend"
}
}
},
"builder": {
"type": "string",
"visibility": "frontend"
},
"publisher": {
"type": "object",
"properties": {
"type": {
"type": "string",
"visibility": "backend"
},
"google": {
"type": "object",
"properties": {
"pathToKey": {
"type": "string",
"visibility": "secret"
},
"projectId": {
"type": "string",
"visibility": "secret"
},
"bucketName": {
"type": "string",
"visibility": "secret"
}
}
}
},
"required": [
"type"
]
}
},
"required": [
"requestUrl"
"requestUrl",
"storageUrl",
"builder"
]
}
}
@@ -15,18 +15,30 @@
*/
import React from 'react';
import { ErrorPage } from '@backstage/core';
import { ErrorPage, useApi, configApiRef } from '@backstage/core';
type Props = {
errorMessage?: string;
};
export const TechDocsNotFound = ({ errorMessage }: Props) => {
const techdocsBuilder = useApi(configApiRef).getOptionalString(
'techdocs.builder',
);
let additionalInfo = '';
if (techdocsBuilder === 'ci') {
additionalInfo =
"Note that you have set techdocs.builder to 'ci' in your config, which means this Backstage app will not " +
"build docs if they are not found. Make sure the project's CI/CD pipeline builds and publishes docs. Or " +
"change techdocs.builder to 'local' to build docs from this Backstage instance.";
}
return (
<ErrorPage
status="404"
statusMessage={errorMessage || 'Documentation not found'}
additionalInfo={window.location.pathname}
additionalInfo={additionalInfo}
/>
);
};