From 8f1dd621d0db6f217b4176988dd43fa36ff42fd3 Mon Sep 17 00:00:00 2001 From: Marco Blumendorf Date: Thu, 7 Nov 2019 17:38:19 +0100 Subject: [PATCH 1/4] add deployment scripts --- scripts/addNewVersion.js | 14 ++++++++++ scripts/prepare-pages-folder.sh | 47 +++++++++++++++++++++------------ scripts/rewriteIndex.js | 23 ++++++++++++++++ 3 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 scripts/addNewVersion.js create mode 100644 scripts/rewriteIndex.js diff --git a/scripts/addNewVersion.js b/scripts/addNewVersion.js new file mode 100644 index 0000000..1a8dc9d --- /dev/null +++ b/scripts/addNewVersion.js @@ -0,0 +1,14 @@ +const fs = require('fs'); +const versionsFile = 'gh-pages/versions.json'; +const version = require('../package.json').version; + +let versions; +try { + versions = JSON.parse(fs.readFileSync(versionsFile, 'utf8')); +} catch { + versions = []; +} + +const versionExists = versions.includes(version); +const newVersions = !versionExists ? versions.concat(version) : versions; +fs.writeFileSync(versionsFile, JSON.stringify(newVersions)); diff --git a/scripts/prepare-pages-folder.sh b/scripts/prepare-pages-folder.sh index 9ad2788..2c29b6c 100755 --- a/scripts/prepare-pages-folder.sh +++ b/scripts/prepare-pages-folder.sh @@ -1,27 +1,40 @@ #!/bin/bash +echo "starting gh-pages creation ..." VERSION=$(node -p "require('./package.json').version") +# checkout current gh-pages branch +echo -n "checking out - https://github.com/$TRAVIS_REPO_SLUG gh-pages branch ... " +git clone -b gh-pages --single-branch https://github.com/$TRAVIS_REPO_SLUG gh-pages +echo "done" + +echo -n "ensuring folders exist... " +mkdir -p gh-pages/releases gh-pages/alpha gh-pages/master +echo "done" + +# create release documentation and move to gh-pages/releases/x.x.x if [[ $TRAVIS_COMMIT_MESSAGE =~ ^release ]]; then - echo -n 'release commit: creating release docs ... ' - mkdir -p docs/releases/$VERSION - ls docs/ | grep -v releases | xargs -I{} cp -r docs/{} docs/releases/$VERSION - echo 'done.' + echo -n "release commit - creating release docs for version $VERSION ... " + rsync -r --delete ./docs/ gh-pages/releases/$VERSION + node "./scripts/addNewVersion.js" + if [[ $TRAVIS_BRANCH == master ]]; then + node "./scripts/rewriteIndex.js" + fi + echo "done." fi - +# create alpha documentation and move it to gh-pages/alpha if [[ $TRAVIS_BRANCH == alpha ]]; then - echo -n 'branch alpha: creating alpha docs ... ' - mkdir docs/$VERSION - ls docs/ | grep -v -e releases -e $VERSION | xargs -I{} mv docs/{} docs/$VERSION - echo 'done.' + echo -n "branch alpha - creating alpha docs ... " + rsync -r --delete ./docs/ gh-pages/alpha/ + echo "done." fi -# checkout current gh-poages branch and add new docs -echo 'creating gh-pages folder ...' -mkdir gh-pages -echo 'checking out gh-pages branch ...' -git clone -b gh-pages --single-branch https://github.com/$TRAVIS_REPO_SLUG gh-pages -echo 'adding new documents ...' -cp -r docs/* gh-pages -echo 'done.' +# create master documentation and move it to gh-pages/master +if [[ $TRAVIS_BRANCH == master ]]; then + echo -n "branch master - creating master docs ... " + rsync -r --delete ./docs/ gh-pages/master/ + echo "done." +fi + +echo "gh-pages creation ... done." diff --git a/scripts/rewriteIndex.js b/scripts/rewriteIndex.js new file mode 100644 index 0000000..241db7d --- /dev/null +++ b/scripts/rewriteIndex.js @@ -0,0 +1,23 @@ +const fs = require('fs'); +const indexFile = 'gh-pages/index.html'; +const version = require('../package.json').version; + +const indexSrc = (latestVersion) => + ` + + + + + + + Page Redirection + + + If you are not redirected automatically, follow this link to example. + + +`; + +fs.writeFileSync(indexFile, indexSrc(version)); From 1256cf2c4f8c7ea9684f4cf93d3623d6010f6652 Mon Sep 17 00:00:00 2001 From: Marco Blumendorf Date: Fri, 8 Nov 2019 11:40:04 +0100 Subject: [PATCH 2/4] add version dropdown --- styleguide.config.js | 1 + styleguide/StyleGuide.js | 2 ++ styleguide/VersionDropdown.js | 43 +++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 styleguide/VersionDropdown.js diff --git a/styleguide.config.js b/styleguide.config.js index 8bf6588..19e9274 100644 --- a/styleguide.config.js +++ b/styleguide.config.js @@ -143,6 +143,7 @@ module.exports = { styleguideComponents: { Wrapper: path.join(__dirname, 'src/layout/Frame/Frame'), Logo: path.join(__dirname, 'styleguide/Logo'), + VersionDropdown: path.join(__dirname, 'styleguide/VersionDropdown'), StyleGuideRenderer: path.join(__dirname, 'styleguide/StyleGuide'), TableOfContentsRenderer: path.join( __dirname, diff --git a/styleguide/StyleGuide.js b/styleguide/StyleGuide.js index 003aad9..5b6fc95 100644 --- a/styleguide/StyleGuide.js +++ b/styleguide/StyleGuide.js @@ -1,12 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import Logo from 'rsg-components/Logo'; // eslint-disable-line +import VersionDropdown from 'rsg-components/VersionDropdown'; // eslint-disable-line import './styles.css'; const StyleGuideRenderer = ({ toc, version, children, title }) => (
{title} + {title} {toc}
diff --git a/styleguide/VersionDropdown.js b/styleguide/VersionDropdown.js new file mode 100644 index 0000000..b5e9642 --- /dev/null +++ b/styleguide/VersionDropdown.js @@ -0,0 +1,43 @@ +import React, { useState, useEffect, useCallback } from 'react'; +import PropTypes from 'prop-types'; +import * as olt from '@lightelligence/styles'; +import { V2Select } from '../src/controls/V2Select'; + +const VersionDropdownRenderer = ({ version }) => { + const [options, setOptions] = useState([]); + + const createOptions = useCallback( + (versions) => setOptions(versions.map((v) => ({ value: v, label: v }))), + [], + ); + + useEffect(() => { + fetch('/react/versions.json').then((response) => { + if (response.status === 200) { + const versionList = JSON.parse(response.text()).sort(); + createOptions(versionList); + } + }); + }, [createOptions]); + + return ( +
+ { + window.location.href = `/react/releases/${v.target.value}`; + }} + options={options} + className={olt.uMarginBottom0} + /> +
+ ); +}; + +VersionDropdownRenderer.propTypes = { + version: PropTypes.node.isRequired, +}; + +// eslint-disable-next-line +export default VersionDropdownRenderer; From eeaa12094c251d5376c8e29a66e5331a58a8468e Mon Sep 17 00:00:00 2001 From: Marco Blumendorf Date: Fri, 8 Nov 2019 12:42:10 +0100 Subject: [PATCH 3/4] cleanups --- styleguide/VersionDropdown.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/styleguide/VersionDropdown.js b/styleguide/VersionDropdown.js index b5e9642..3cf2790 100644 --- a/styleguide/VersionDropdown.js +++ b/styleguide/VersionDropdown.js @@ -7,7 +7,10 @@ const VersionDropdownRenderer = ({ version }) => { const [options, setOptions] = useState([]); const createOptions = useCallback( - (versions) => setOptions(versions.map((v) => ({ value: v, label: v }))), + (versions) => + setOptions( + versions.map((v) => ({ value: v, label: `/react/releases/${v}` })), + ), [], ); @@ -26,7 +29,7 @@ const VersionDropdownRenderer = ({ version }) => { label="Select an option" value={version} onChange={(v) => { - window.location.href = `/react/releases/${v.target.value}`; + window.location.href = v.target.value; }} options={options} className={olt.uMarginBottom0} From 402a06e2a00081b80c375cd9dd9ee78e899c66fa Mon Sep 17 00:00:00 2001 From: Marco Blumendorf Date: Fri, 8 Nov 2019 13:29:46 +0100 Subject: [PATCH 4/4] rename versions.json to versions_json.txt --- scripts/addNewVersion.js | 2 +- styleguide/VersionDropdown.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/addNewVersion.js b/scripts/addNewVersion.js index 1a8dc9d..56afaa9 100644 --- a/scripts/addNewVersion.js +++ b/scripts/addNewVersion.js @@ -1,5 +1,5 @@ const fs = require('fs'); -const versionsFile = 'gh-pages/versions.json'; +const versionsFile = 'gh-pages/versions_json.txt'; const version = require('../package.json').version; let versions; diff --git a/styleguide/VersionDropdown.js b/styleguide/VersionDropdown.js index 3cf2790..01e1103 100644 --- a/styleguide/VersionDropdown.js +++ b/styleguide/VersionDropdown.js @@ -15,7 +15,7 @@ const VersionDropdownRenderer = ({ version }) => { ); useEffect(() => { - fetch('/react/versions.json').then((response) => { + fetch('/react/versions_json.txt').then((response) => { if (response.status === 200) { const versionList = JSON.parse(response.text()).sort(); createOptions(versionList);