WIP api-docs autogen, stylesheets, and auto-build process

pull/500/head
Scott Anderson 2019-09-30 10:00:22 -06:00
parent 0b6db10137
commit 9eec3e1729
9 changed files with 692 additions and 313 deletions

View File

@ -23,7 +23,10 @@ jobs:
command: ./deploy/ci-install-s3deploy.sh command: ./deploy/ci-install-s3deploy.sh
- run: - run:
name: Install NPM dependencies name: Install NPM dependencies
command: sudo npm i -g postcss-cli autoprefixer command: sudo npm i -g postcss-cli autoprefixer redoc-cli
- run:
name: Generate API documentation
command: cd api-docs && sh generate-api-docs.sh
- save_cache: - save_cache:
key: install-v1-{{ checksum ".circleci/config.yml" }} key: install-v1-{{ checksum ".circleci/config.yml" }}
paths: paths:

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ public
node_modules node_modules
*.log *.log
/resources /resources
/content/**/api.html

View File

@ -0,0 +1,40 @@
#!/bin/bash -e
# Get list of versions from directory names
versions="$(ls -d -- */)"
for version in $versions
do
# Trim the trailing slash off the directory name
version="${version%/}"
menu="${version//./_}_ref"
# Generate the frontmatter
frontmatter="---
title: InfluxDB $version API documentation
description: >
The InfluxDB API provides a programmatic interface for interactions with InfluxDB $version.
layout: api
menu:
$menu:
parent: InfluxDB v2 API
name: View full API docs
weight: 102
---
"
# Use Redoc to generate the API html
redoc-cli bundle -t template.hbs \
--title="InfluxDB $version API documentation" \
--options.sortPropsAlphabetically \
--options.menuToggle \
--options.hideHostname \
--templateOptions.version="$version" \
$version/swagger.yml
# Create temp file with frontmatter and Redoc html
echo "$frontmatter" >> $version.tmp
cat redoc-static.html >> $version.tmp
rm -f redoc-static.html
mv $version.tmp ../content/$version/api.html
done

View File

@ -7,6 +7,16 @@
<meta name="description" content="The InfluxDB API provides a programmatic interface for interactions with InfluxDB {{templateOptions.version}}."> <meta name="description" content="The InfluxDB API provides a programmatic interface for interactions with InfluxDB {{templateOptions.version}}.">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/img/favicon.png" type="image/png" sizes="32x32"> <link rel="shortcut icon" href="/img/favicon.png" type="image/png" sizes="32x32">
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-45024174-12"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-45024174-12');
</script>
<meta name="google-site-verification" content="_V6CNhaIIgVsTO9max_ECw7DUfPL-ZGE7G03MQgEGMU" />
<style> <style>
body { body {
padding: 0; padding: 0;
@ -15,10 +25,28 @@
</style> </style>
{{#unless disableGoogleFont}}<link href="https://fonts.googleapis.com/css?family=Roboto+Mono:500,500i,700,700i|Roboto:400,400i,700,700i|Rubik:400,400i,500,500i,700,700i" rel="stylesheet">{{/unless}} {{#unless disableGoogleFont}}<link href="https://fonts.googleapis.com/css?family=Roboto+Mono:500,500i,700,700i|Roboto:400,400i,700,700i|Rubik:400,400i,500,500i,700,700i" rel="stylesheet">{{/unless}}
{{{redocHead}}} {{{redocHead}}}
<link rel="stylesheet" type="text/css" href="/api.css">
</head> </head>
<body> <body>
<div id="loading">
<div class="spinner"></div>
</div>
<div id="influx-header">
<a href="/{{templateOptions.version}}">InfluxDB {{templateOptions.version}} Docs</a>
</div>
{{{redocHTML}}} {{{redocHTML}}}
<script type="text/javascript">
function removeFadeOut( el, speed ) {
var seconds = speed/1000;
el.style.transition = "opacity "+seconds+"s ease";
el.style.opacity = 0;
setTimeout(function() {
el.parentNode.removeChild(el);
}, speed);
}
removeFadeOut(document.getElementById('loading'), 500);
</script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,266 @@
@import "tools/color-palette";
@import "tools/icomoon";
// Fonts
$rubik: 'Rubik', sans-serif;
$roboto: 'Roboto', sans-serif;
$roboto-mono: 'Roboto Mono', monospace;
// Font weights
$medium: 500;
$bold: 700;
//////////////////////////////////// LOADER ////////////////////////////////////
#loading {
position: fixed;
width: 100vw;
height: 100vh;
z-index: 1000;
background-color: $g20-white;
opacity: 1;
transition: opacity .5s;
}
@keyframes spinner {
to {transform: rotate(360deg);}
}
.spinner:before {
content: '';
box-sizing: border-box;
position: absolute;
top: 50%;
left: 50%;
width: 50px;
height: 50px;
margin-top: -25px;
margin-left: -25px;
border-radius: 50%;
border: 3px solid $g16-pearl;
border-top-color: $cp-comet;
animation: spinner .6s linear infinite;
}
//////////////////////////////// InfluxDB Header ///////////////////////////////
#influx-header {
font-family: $rubik;
padding: 15px 20px ;
display: block;
background-color: $wp-violentdark;
a {
color: $g20-white;
text-decoration: none;
transition: color .2s;
&:hover {
color: $b-pool;
}
&:before {
content: '\e918';
font-family: 'icomoon';
margin-right: .65rem;
}
}
}
////////////////////////////////////////////////////////////////////////////////
.cjtbAK {
h1,h2,h3,h4,h5,h6,
p,li,th,td {
font-family: $rubik !important;
}
}
#redoc {
h1,h2,h3,h4,h5,h6 {
font-weight: $medium !important;
}
}
// Section title padding
.dluJDj {
padding: 20px 0;
}
// Page h1
.dTJWQH {
color: $g7-graphite;
font-size: 2rem;
}
// Download button
.jIdpVJ {
background: $b-dodger;
color: $g20-white;
border: none;
border-radius: 3px;
font-family: $rubik;
font-size: .85rem;
font-weight: $medium;
transition: background-color .2s;
&:hover {
background-color: $b-pool;
}
}
// Tag h1s
.WxWXp {
color: $g7-graphite;
font-size: 1.75rem;
}
// Summaru h2s and table headers
.ioYTqA, .bxcHYI, .hoUoen {
color: $g7-graphite;
}
// h3s
.espozG {
color: $g8-storm;
}
// Links
.bnFPhO a { color: $b-dodger;
&:visited {color: $b-dodger;}
}
.redoc-json {
font-family: $roboto-mono !important;
}
// Inline Code
.flfxUM code,
.gDsWLk code,
.kTVySD {
font-family: $roboto-mono !important;
color: $cp-marguerite;
background: $cp-titan;
border-color: $cp-titan;
}
// Required tags
.jsTAxL {
color: $o-curacao;
}
///////////////////////////// RESPONSE COLOR BLOCKS ////////////////////////////
// Green
.hLVzSF {
background-color: rgba($gr-wasabi, .5);
color: $gr-emerald;
}
// Red
.byLrBg {
background-color: rgba($o-marmelade, .35);
color: $o-curacao;
}
/////////////////////////////////// LEFT NAV ///////////////////////////////////
// Left nav background
.gZdDsM {
background-color: $g19-ghost;
}
.gpbcFk:hover, .sc-eTuwsz.active {
background-color: rgb(237, 237, 237);
}
// List item text
.SmuWE, .gcUzvG, .bbViyS, .sc-hrWEMg label {
font-family: $rubik !important;
}
.fyUykq {
font-weight: $medium;
}
// Request method tags
.cFwMcp {
&.post { background-color: $b-curious; }
&.get { background-color: $gr-canopy; }
&.put { background-color: $cp-comet; }
&.patch { background-color: $ch-keylime; }
&.delete { background-color: $o-curacao; }
}
// Active nav section
.gcUzvG, .iNzLCk:hover {
color: $m-magenta;
}
/////////////////////////////// RIGHT CODE COLUMN //////////////////////////////
// Right column backgrounds
.dtUibw, .fLUKgj {
background-color: $wp-jagger;
h3,h4,h5,h6 {
font-family: $rubik !important;
font-weight: $medium !important;
}
}
// Code backgrounds
.irpqyy > .react-tabs__tab-panel {
background-color: $wp-telopea;
}
.dHLKeu, .fVaxnA {
padding-left: 10px;
background-color: $wp-telopea;
}
// Response code tabs
.irpqyy > ul > li {
background-color: $wp-telopea;
border-radius: 3px;
&.react-tabs__tab--selected{ color: $cp-blueviolet; }
&.tab-error { color: $o-fire; }
&.tab-success { color: $gr-viridian; }
}
// Request methods
.bNYCAJ,
.jBjYbV,
.hOczRB,
.fRsrDc,
.hPskZd {
font-family: $rubik;
font-weight: $medium;
letter-spacing: .04em;
border-radius: 3px;
}
.bNYCAJ { background-color: $b-curious; } /* Post */
.jBjYbV { background-color: $gr-canopy; } /* Get */
.hOczRB { background-color: $cp-comet; } /* Put */
.fRsrDc { background-color: $ch-chartreuse; color: $ch-olive; } /* Patch */
.hPskZd { background-color: $o-curacao; } /* Delete */
// Content type block
.gzAoUb {
background-color: rgba($wp-jagger, .4);
font-family: $rubik;
}
.iENVAs { font-family: $roboto-mono; }
.dpMbau { font-family: $rubik; }
// Code controls
.fCJmC {
font-family: $rubik;
span { border-radius: 3px; }
}
// Code blocks
.kZHJcC { font-family: $roboto-mono; }
.jCgylq {
.token.string {
color: $gr-honeydew;
& + a { color: $b-malibu; }
}
.token.boolean { color: #f955b0; }
}

View File

@ -0,0 +1,4 @@
// InfluxData API Docs style overrides
// These override styles generated by ReDoc
@import "layouts/api-overrides";

File diff suppressed because one or more lines are too long

View File

@ -22,8 +22,13 @@ curl --request GET \
``` ```
## View Influx v2 API Documentation ## View Influx v2 API Documentation
Full InfluxDB v2 API documentation is built into the `influxd` service.
To view the API documentation, [start InfluxDB](/v2.0/get-started/#start-influxdb) <a class="btn" href="/v2.0/api/">InfluxDB v2.0 API documentation</a>
### View InfluxDB API documentation locally
InfluxDB API documentation is built into the `influxd` service and represents
the API specific to the current version of InfluxDB.
To view the API documentation locally, [start InfluxDB](/v2.0/get-started/#start-influxdb)
and visit the `/docs` endpoint in a browser. and visit the `/docs` endpoint in a browser.
<a class="btn" href="http://localhost:9999/docs" target="\_blank">localhost:9999/docs</a> <a class="btn" href="http://localhost:9999/docs" target="\_blank">localhost:9999/docs</a>

View File

@ -5,6 +5,7 @@
{{ $cssOptionsLight := (dict "targetPath" "light-theme.css" "outputStyle" "compressed" "enableSourceMap" true) }} {{ $cssOptionsLight := (dict "targetPath" "light-theme.css" "outputStyle" "compressed" "enableSourceMap" true) }}
{{ $cssSidebarOpen := (dict "targetPath" "sidebar-open.css" "outputStyle" "compressed" "enableSourceMap" true) }} {{ $cssSidebarOpen := (dict "targetPath" "sidebar-open.css" "outputStyle" "compressed" "enableSourceMap" true) }}
{{ $cssSidebarClose := (dict "targetPath" "sidebar-closed.css" "outputStyle" "compressed" "enableSourceMap" true) }} {{ $cssSidebarClose := (dict "targetPath" "sidebar-closed.css" "outputStyle" "compressed" "enableSourceMap" true) }}
{{ $cssAPIOverrides := (dict "targetPath" "api.css" "outputStyle" "compressed" "enableSourceMap" true) }}
{{ $PostCSSOptions := (dict "use" "autoprefixer" "noMap" false) }} {{ $PostCSSOptions := (dict "use" "autoprefixer" "noMap" false) }}
{{ $stylesLight := resources.Get "styles/styles-default.scss" | toCSS $cssOptionsLight | postCSS $PostCSSOptions | fingerprint }} {{ $stylesLight := resources.Get "styles/styles-default.scss" | toCSS $cssOptionsLight | postCSS $PostCSSOptions | fingerprint }}
@ -18,3 +19,6 @@
{{ $stylesSidebarClosed := resources.Get "styles/sidebar-closed.scss" | toCSS $cssOptionsLight | postCSS $PostCSSOptions | fingerprint }} {{ $stylesSidebarClosed := resources.Get "styles/sidebar-closed.scss" | toCSS $cssOptionsLight | postCSS $PostCSSOptions | fingerprint }}
<link rel="alternate stylesheet" title="sidebar-closed" type="text/css" href="{{ $stylesSidebarClosed.RelPermalink }}"> <link rel="alternate stylesheet" title="sidebar-closed" type="text/css" href="{{ $stylesSidebarClosed.RelPermalink }}">
{{ $stylesAPIOverrides := resources.Get "styles/styles-api.scss" | toCSS $cssAPIOverrides | postCSS $PostCSSOptions }}
<link rel="stylesheet" type="text/css" href="{{ $stylesAPIOverrides.RelPermalink }}">