mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-25 00:07:47 +01:00
parent
320940d19c
commit
823552f95f
@ -1,2 +1,9 @@
|
||||
node_modules
|
||||
bundle.js
|
||||
website/blog
|
||||
website/build
|
||||
website/node_modules
|
||||
website/i18n/*.js
|
||||
website/translated_docs
|
||||
website/core
|
||||
website/pages
|
||||
|
8
.gitignore
vendored
8
.gitignore
vendored
@ -43,3 +43,11 @@ typings
|
||||
|
||||
# We use yarn.lock
|
||||
package-lock.json
|
||||
|
||||
# Website stuff
|
||||
/website/build
|
||||
/website/backers.json
|
||||
/website/node_modules
|
||||
/website/yarn.lock
|
||||
/website/translated_docs
|
||||
/website/i18n/*
|
13
.travis.yml
13
.travis.yml
@ -14,7 +14,8 @@ before_script:
|
||||
- greenkeeper-lockfile-update
|
||||
script: yarn run test:coverage
|
||||
after_script: greenkeeper-lockfile-upload
|
||||
after_success: yarn run test:coverage-report
|
||||
after_success:
|
||||
- yarn run test:coverage-report
|
||||
notifications:
|
||||
slack:
|
||||
secure: MroremSKwtQkwPbrXjgs9hIqKTCDKk7bAIXXzjcS6wXC9uRaFgwFaW8oO3vBxtWa4BL44EQBLE/rboWgqFER62+XgXNgEqGZqrcJHJvby4r+dUNMPI64OZvWdIiydIYxLo8C1C4x5PqBup0xuLq8h/SBnNvA2NLgkjuvzOi+v/Q=
|
||||
@ -22,3 +23,13 @@ addons:
|
||||
postgresql: '9.4'
|
||||
cache:
|
||||
yarn: true
|
||||
deploy:
|
||||
# deploy doc on master to production
|
||||
- provider: script
|
||||
script:
|
||||
- git config --global user.name "${GH_NAME}"
|
||||
- git config --global user.email "${GH_EMAIL}"
|
||||
- echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc
|
||||
- cd website && npm install && GIT_USER="${GH_NAME}" npm run publish-gh-pages
|
||||
on:
|
||||
branch: master
|
@ -1,4 +1,8 @@
|
||||
# Activation Strategies
|
||||
---
|
||||
id: activation_strategy
|
||||
title: Activation Strategies
|
||||
---
|
||||
|
||||
|
||||
It is powerful to be able to turn a feature on and off instantaneously, without redeploying the application. The next level of control comes when you are able to enable a feature for specific users or enable it for a small subset of the users. We achieve this level of control with the help of activation strategies. The most simple strategy is the “default” strategy, which basically means that the feature should be enabled to everyone.
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
---
|
||||
id: events
|
||||
title: /api/admin/events
|
||||
---
|
||||
|
||||
# Events API
|
||||
|
||||
`GET: http://unleash.host.com/api/admin/events`
|
||||
|
@ -1,3 +1,8 @@
|
||||
---
|
||||
id: features
|
||||
title: /api/admin/features
|
||||
---
|
||||
|
||||
### Fetching Feature Toggles
|
||||
|
||||
`GET: http://unleash.host.com/api/admin/features`
|
||||
|
@ -1,3 +1,8 @@
|
||||
---
|
||||
id: metrics
|
||||
title: /api/admin/metrics
|
||||
---
|
||||
|
||||
# This document describes the metrics endpoint for admin ui
|
||||
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
## Strategies API
|
||||
---
|
||||
id: strategies
|
||||
title: /api/admin/strategies
|
||||
---
|
||||
|
||||
### Fetch Strategies
|
||||
`GET: http://unleash.host.com/api/admin/strategies`
|
||||
|
@ -1,3 +1,8 @@
|
||||
---
|
||||
id: features
|
||||
title: /api/client/features
|
||||
---
|
||||
|
||||
### Fetching Feature Toggles
|
||||
|
||||
`GET: http://unleash.host.com/api/client/features`
|
||||
|
@ -1,8 +1,11 @@
|
||||
# This document describes the client metrics endpoints
|
||||
---
|
||||
id: metrics
|
||||
title: /api/client/metrics
|
||||
---
|
||||
|
||||
### Send metrics
|
||||
|
||||
`POST http://unleash.host.com/api/client/metrics`
|
||||
`POST: http://unleash.host.com/api/client/metrics`
|
||||
|
||||
Register a metrics payload with a timed bucket.
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
# This document describes the client registration endpoints
|
||||
---
|
||||
id: register
|
||||
title: /api/client/register
|
||||
---
|
||||
|
||||
### Client registration
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
# API Documentation
|
||||
---
|
||||
id: index
|
||||
title: API Documentation
|
||||
---
|
||||
|
||||
## Client API
|
||||
This describes the API provided to unleash-clients.
|
||||
|
@ -1,3 +1,8 @@
|
||||
---
|
||||
id: internal
|
||||
title: /internal-backstage/prometheus
|
||||
---
|
||||
|
||||
# Internal Backstage API
|
||||
|
||||
`GET http://unleash.host.com/internal-backstage/prometheus`
|
||||
|
@ -1,3 +1,9 @@
|
||||
---
|
||||
id: client_specification
|
||||
title: Client Specification
|
||||
---
|
||||
|
||||
|
||||
# Client Specification 1.0
|
||||
|
||||
This document attempts to guide developers in implementing a Unleash Client SDK.
|
||||
|
@ -1,4 +1,8 @@
|
||||
# Database backups
|
||||
---
|
||||
id: database_backup
|
||||
title: Database Backup
|
||||
---
|
||||
|
||||
When upgrading to a new major version of Unleash it is advised to do a
|
||||
full database backup to ease rollback in case of failures.
|
||||
|
||||
|
@ -1,4 +1,8 @@
|
||||
# Schema
|
||||
---
|
||||
id: database_schema
|
||||
title: Database Schema
|
||||
---
|
||||
|
||||
|
||||
This document describes our current database schema used in PostgreSQL.
|
||||
We use db-migrate to migrate (create tables, add columns etc) the database.
|
||||
|
@ -1,4 +1,8 @@
|
||||
# Developer Guide
|
||||
---
|
||||
id: developer_guide
|
||||
title: Developer guide
|
||||
---
|
||||
|
||||
|
||||
## PostgreSQL
|
||||
To run and develop unleash you need to have PostgreSQL database (PostgreSQL v.9.5.x or newer) locally.
|
||||
|
@ -1,4 +1,7 @@
|
||||
# Getting stated
|
||||
---
|
||||
id: getting_started
|
||||
title: Getting Started
|
||||
---
|
||||
|
||||
## Requirements
|
||||
|
||||
|
@ -1,4 +1,8 @@
|
||||
# Migrations guide
|
||||
---
|
||||
id: migration_guide
|
||||
title: Migration Guide
|
||||
---
|
||||
|
||||
Generally the intention is that `unleash-server` should always provide support for clients one lower major version. This should make possible to upgrade `unleash` gradually.
|
||||
|
||||
|
||||
|
@ -1,4 +1,8 @@
|
||||
# Securing Unleash
|
||||
---
|
||||
id: securing_unleash
|
||||
title: Securing Unleash
|
||||
---
|
||||
|
||||
The Unleash API is split in two different paths: `/api/client` and `/api/admin`.
|
||||
This makes it easy to have different authentication strategy for the admin interface and the client-api used by the applications integrating with Unleash.
|
||||
|
||||
|
@ -1,4 +1,8 @@
|
||||
# Unleash Context
|
||||
---
|
||||
id: unleash_context
|
||||
title: Unleash Context
|
||||
---
|
||||
|
||||
|
||||
In order to standardise a few activation strategies we also needed to
|
||||
standardise a unleash context, which contains some fields that varies
|
||||
|
145
website/README.md
Normal file
145
website/README.md
Normal file
@ -0,0 +1,145 @@
|
||||
The Unleash website was created with [Docusaurus](https://docusaurus.io/).
|
||||
|
||||
It's hosted on https://unleash.github.io/
|
||||
|
||||
# What's In This Document
|
||||
|
||||
* [Get Started in 5 Minutes](#get-started-in-5-minutes)
|
||||
* [Directory Structure](#directory-structure)
|
||||
* [Editing Content](#editing-content)
|
||||
* [Adding Content](#adding-content)
|
||||
* [Full Documentation](#full-documentation)
|
||||
|
||||
# Get Started in 5 Minutes
|
||||
|
||||
1. Make sure all the dependencies for the website are installed:
|
||||
|
||||
```sh
|
||||
# Install dependencies
|
||||
$ npm install
|
||||
```
|
||||
2. Run your dev server:
|
||||
|
||||
```sh
|
||||
# Start the site
|
||||
$ npm run start
|
||||
```
|
||||
|
||||
## Directory Structure
|
||||
|
||||
Your project file structure should look something like this
|
||||
|
||||
```
|
||||
unleash/
|
||||
docs/
|
||||
doc-1.md
|
||||
doc-2.md
|
||||
doc-3.md
|
||||
website/
|
||||
core/
|
||||
pages/
|
||||
static/
|
||||
css/
|
||||
img/
|
||||
package.json
|
||||
sidebar.json
|
||||
siteConfig.js
|
||||
```
|
||||
|
||||
# Editing Content
|
||||
|
||||
## Editing an existing docs page
|
||||
|
||||
Edit docs by navigating to `docs/` and editing the corresponding document:
|
||||
|
||||
`docs/doc-to-be-edited.md`
|
||||
|
||||
```markdown
|
||||
---
|
||||
id: page-needs-edit
|
||||
title: This Doc Needs To Be Edited
|
||||
---
|
||||
|
||||
Edit me...
|
||||
```
|
||||
|
||||
For more information about docs, click [here](https://docusaurus.io/docs/en/navigation)
|
||||
|
||||
# Adding Content
|
||||
|
||||
## Adding a new docs page to an existing sidebar
|
||||
|
||||
1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`:
|
||||
|
||||
```md
|
||||
---
|
||||
id: newly-created-doc
|
||||
title: This Doc Needs To Be Edited
|
||||
---
|
||||
|
||||
My new content here..
|
||||
```
|
||||
|
||||
1. Refer to that doc's ID in an existing sidebar in `website/sidebar.json`:
|
||||
|
||||
```javascript
|
||||
// Add newly-created-doc to the Getting Started category of docs
|
||||
{
|
||||
"docs": {
|
||||
"Getting Started": [
|
||||
"quick-start",
|
||||
"newly-created-doc" // new doc here
|
||||
],
|
||||
...
|
||||
},
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation)
|
||||
|
||||
## Adding items to your site's top navigation bar
|
||||
|
||||
1. Add links to docs, custom pages or external links by editing the headerLinks field of `website/siteConfig.js`:
|
||||
|
||||
`website/siteConfig.js`
|
||||
```javascript
|
||||
{
|
||||
headerLinks: [
|
||||
...
|
||||
/* you can add docs */
|
||||
{ doc: 'my-examples', label: 'Examples' },
|
||||
/* you can add custom pages */
|
||||
{ page: 'help', label: 'Help' },
|
||||
/* you can add external links */
|
||||
{ href: 'https://github.com/facebook/Docusaurus', label: 'GitHub' },
|
||||
...
|
||||
],
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation)
|
||||
|
||||
## Adding custom pages
|
||||
|
||||
1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`:
|
||||
1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element:
|
||||
|
||||
`website/siteConfig.js`
|
||||
```javascript
|
||||
{
|
||||
headerLinks: [
|
||||
...
|
||||
{ page: 'my-new-custom-page', label: 'My New Custom Page' },
|
||||
...
|
||||
],
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
For more information about custom pages, click [here](https://docusaurus.io/docs/en/custom-pages).
|
||||
|
||||
# Full Documentation
|
||||
|
||||
Full documentation can be found on the [website](https://docusaurus.io/).
|
86
website/core/Footer.js
Normal file
86
website/core/Footer.js
Normal file
@ -0,0 +1,86 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const React = require('react');
|
||||
|
||||
class Footer extends React.Component {
|
||||
docUrl(doc, language) {
|
||||
const baseUrl = this.props.config.baseUrl;
|
||||
return `${baseUrl}docs/${language ? `${language}/` : ''}${doc}`;
|
||||
}
|
||||
|
||||
pageUrl(doc, language) {
|
||||
const baseUrl = this.props.config.baseUrl;
|
||||
return baseUrl + (language ? `${language}/` : '') + doc;
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<footer className="nav-footer" id="footer">
|
||||
<section className="sitemap">
|
||||
<a href={this.props.config.baseUrl} className="nav-home">
|
||||
{this.props.config.footerIcon && (
|
||||
<img
|
||||
src={this.props.config.baseUrl + this.props.config.footerIcon}
|
||||
alt={this.props.config.title}
|
||||
width="66"
|
||||
height="58"
|
||||
/>
|
||||
)}
|
||||
</a>
|
||||
<div>
|
||||
<h5>Docs</h5>
|
||||
<a href={this.docUrl('getting_started.html', this.props.language)}>
|
||||
Getting Started
|
||||
</a>
|
||||
<a href={this.docUrl('securing_unleash.html', this.props.language)}>
|
||||
Securing Unleash
|
||||
</a>
|
||||
<a href={this.docUrl('api/client/features.html', this.props.language)}>
|
||||
API Reference
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<h5>Community</h5>
|
||||
<a href={this.pageUrl('users.html', this.props.language)}>
|
||||
User Showcase
|
||||
</a>
|
||||
<a
|
||||
href="https://stackoverflow.com/tags/unleash"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener">
|
||||
Stack Overflow
|
||||
</a>
|
||||
<a
|
||||
href="https://twitter.com/Unleash_org"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener">
|
||||
Twitter
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<h5>More</h5>
|
||||
<a href="https://github.com/Unleash/unleash">GitHub</a>
|
||||
<a
|
||||
className="github-button"
|
||||
href={this.props.config.repoUrl}
|
||||
data-icon="octicon-star"
|
||||
data-count-href="/unleash/unleash/stargazers"
|
||||
data-show-count="true"
|
||||
data-count-aria-label="# stargazers on GitHub"
|
||||
aria-label="Star this project on GitHub">
|
||||
Star
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
<section className="copyright">{this.props.config.copyright}</section>
|
||||
</footer>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Footer;
|
14
website/package.json
Normal file
14
website/package.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"scripts": {
|
||||
"examples": "docusaurus-examples",
|
||||
"start": "docusaurus-start",
|
||||
"build": "docusaurus-build",
|
||||
"publish-gh-pages": "docusaurus-publish",
|
||||
"write-translations": "docusaurus-write-translations",
|
||||
"version": "docusaurus-version",
|
||||
"rename-version": "docusaurus-rename-version"
|
||||
},
|
||||
"devDependencies": {
|
||||
"docusaurus": "^1.5.1"
|
||||
}
|
||||
}
|
58
website/pages/en/help.js
Executable file
58
website/pages/en/help.js
Executable file
@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const React = require('react');
|
||||
|
||||
const CompLibrary = require('../../core/CompLibrary.js');
|
||||
|
||||
const Container = CompLibrary.Container;
|
||||
const GridBlock = CompLibrary.GridBlock;
|
||||
|
||||
const siteConfig = require(`${process.cwd()}/siteConfig.js`);
|
||||
|
||||
function docUrl(doc, language) {
|
||||
return `${siteConfig.baseUrl}docs/${language ? `${language}/` : ''}${doc}`;
|
||||
}
|
||||
|
||||
class Help extends React.Component {
|
||||
render() {
|
||||
const language = this.props.language || '';
|
||||
const supportLinks = [
|
||||
{
|
||||
content: `Learn more using the [documentation on this site.](${docUrl(
|
||||
'doc1.html',
|
||||
language,
|
||||
)})`,
|
||||
title: 'Browse Docs',
|
||||
},
|
||||
{
|
||||
content: 'Ask questions about the documentation and project',
|
||||
title: 'Join the community',
|
||||
},
|
||||
{
|
||||
content: "Find out what's new with this project",
|
||||
title: 'Stay up to date',
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="docMainWrapper wrapper">
|
||||
<Container className="mainContainer documentContainer postContainer">
|
||||
<div className="post">
|
||||
<header className="postHeader">
|
||||
<h1>Need help?</h1>
|
||||
</header>
|
||||
<p>This project is maintained by a dedicated group of people.</p>
|
||||
<GridBlock contents={supportLinks} layout="threeColumn" />
|
||||
</div>
|
||||
</Container>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Help;
|
225
website/pages/en/index.js
Executable file
225
website/pages/en/index.js
Executable file
@ -0,0 +1,225 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const React = require('react');
|
||||
|
||||
const CompLibrary = require('../../core/CompLibrary.js');
|
||||
|
||||
const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
|
||||
const Container = CompLibrary.Container;
|
||||
const GridBlock = CompLibrary.GridBlock;
|
||||
|
||||
const siteConfig = require(`${process.cwd()}/siteConfig.js`);
|
||||
|
||||
function imgUrl(img) {
|
||||
return `${siteConfig.baseUrl}img/${img}`;
|
||||
}
|
||||
|
||||
function docUrl(doc, language) {
|
||||
return `${siteConfig.baseUrl}docs/${language ? `${language}/` : ''}${doc}`;
|
||||
}
|
||||
|
||||
function pageUrl(page, language) {
|
||||
return siteConfig.baseUrl + (language ? `${language}/` : '') + page;
|
||||
}
|
||||
|
||||
class Button extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<div className="pluginWrapper buttonWrapper">
|
||||
<a className="button" href={this.props.href} target={this.props.target}>
|
||||
{this.props.children}
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Button.defaultProps = {
|
||||
target: '_self',
|
||||
};
|
||||
|
||||
const SplashContainer = props => (
|
||||
<div className="homeContainer">
|
||||
<div className="homeSplashFade">
|
||||
<div className="wrapper homeWrapper">{props.children}</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
const Logo = props => (
|
||||
<div className="projectLogo">
|
||||
<img src={props.img_src} alt="Project Logo" />
|
||||
</div>
|
||||
);
|
||||
|
||||
const ProjectTitle = () => (
|
||||
<h2 className="projectTitle">
|
||||
{siteConfig.title}
|
||||
<small>{siteConfig.tagline}</small>
|
||||
</h2>
|
||||
);
|
||||
|
||||
const PromoSection = props => (
|
||||
<div className="section promoSection">
|
||||
<div className="promoRow">
|
||||
<div className="pluginRowBlock">{props.children}</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
class HomeSplash extends React.Component {
|
||||
render() {
|
||||
const language = this.props.language || '';
|
||||
return (
|
||||
<SplashContainer>
|
||||
<div className="inner">
|
||||
<ProjectTitle />
|
||||
<a
|
||||
className="github-button"
|
||||
href={siteConfig.repoUrl}
|
||||
data-icon="octicon-star"
|
||||
data-count-href="/unleash/unleash/stargazers"
|
||||
data-show-count="true"
|
||||
data-count-aria-label="# stargazers on GitHub"
|
||||
aria-label="Star this project on GitHub">
|
||||
Star
|
||||
</a>
|
||||
<PromoSection>
|
||||
<Button href={docUrl('getting_started.html', language)}>Getting Started</Button>
|
||||
<Button href="#try">Try It Out</Button>
|
||||
<Button href={siteConfig.repoUrl}>GitHub</Button>
|
||||
</PromoSection>
|
||||
</div>
|
||||
</SplashContainer>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const Block = props => (
|
||||
<Container
|
||||
padding={['bottom', 'top']}
|
||||
id={props.id}
|
||||
background={props.background}>
|
||||
<GridBlock align="left" contents={props.children} layout={props.layout} />
|
||||
</Container>
|
||||
);
|
||||
|
||||
const FeatureCallout = () => (
|
||||
<div className="productShowcaseSection paddingBottom" style={{textAlign: 'center'}}>
|
||||
<p>
|
||||
Unleash is a feature toggle system, that gives you a great overview over all feature toggles across
|
||||
all your applications and services. It comes with official client implementations for Java, Node.js, Go, Ruby and Python.
|
||||
</p>
|
||||
<p>
|
||||
The main motivation for doing feature toggling is to decouple the process for deploying code to production
|
||||
and releasing new features. This helps reducing risk, and allow us to easily manage which features to enable
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
|
||||
const UnleashClient = () => (
|
||||
<Container padding={['bottom', 'top']} id="unleash-client" background={'light'}>
|
||||
|
||||
<h2>Client implementations</h2>
|
||||
<p>
|
||||
Unleash has offical SDK's for Java, Node.js, Go, Ruby and Python. And we will be happy to add implementations in other langugages written by you! These libraries makes it very easy to use Unleash in you application.
|
||||
</p>
|
||||
|
||||
<h3>Official client SDKs:</h3>
|
||||
<ul>
|
||||
<li><MarkdownBlock>[unleash/unleash-client-java](https://github.com/unleash/unleash-client-java)</MarkdownBlock></li>
|
||||
<li><MarkdownBlock>[unleash/unleash-client-node](https://github.com/unleash/unleash-client-node)</MarkdownBlock></li>
|
||||
<li><MarkdownBlock>[unleash/unleash-client-go](https://github.com/unleash/unleash-client-go)</MarkdownBlock></li>
|
||||
<li><MarkdownBlock>[unleash/unleash-client-ruby](https://github.com/unleash/unleash-client-ruby)</MarkdownBlock></li>
|
||||
<li><MarkdownBlock>[unleash/unleash-client-python](https://github.com/Unleash/unleash-client-python)</MarkdownBlock></li>
|
||||
</ul>
|
||||
|
||||
<h3>Clients written by awesome enthusiasts:</h3>
|
||||
<ul>
|
||||
<li><MarkdownBlock>[stiano/unleash-client-dotnet](https://github.com/stiano/unleash-client-dotnet) (.Net Core)</MarkdownBlock></li>
|
||||
<li><MarkdownBlock>[onybo/unleash-client-core](https://github.com/onybo/unleash-client-core) (.Net Core)</MarkdownBlock></li>
|
||||
<li><MarkdownBlock>[rarruda/unleash-client-python](https://github.com/rarruda/unleash-client-python) (Python 3)</MarkdownBlock></li>
|
||||
</ul>
|
||||
</Container>
|
||||
);
|
||||
|
||||
const TryOut = () => (
|
||||
<Block id="try">
|
||||
{[
|
||||
{
|
||||
content: 'We have deployed a demo version of [Unleash on Heroku](https://unleash.herokuapp.com). '+
|
||||
'Here you can play with the Unleash UI, define your toggles. <br /><br />'+
|
||||
'You can even use on of the Unleash client SDKs and test it out Unleash your application. '+
|
||||
'Use the api url located at https://unleash.herokuapp.com/api/.',
|
||||
image: imgUrl('dashboard.png'),
|
||||
imageAlign: 'left',
|
||||
align: 'left',
|
||||
title: 'Try Unleash',
|
||||
},
|
||||
]}
|
||||
</Block>
|
||||
);
|
||||
|
||||
const ActivationStrategies = () => (
|
||||
<Block background="dark">
|
||||
{[
|
||||
{
|
||||
content: 'It\'s fine to have a system for turning stuff on and off. But some times we want more granular control, we want to decide who to the toggle should be enabled for. This is where [activation strategies](docs/activation_strategy) comes in to the picture. Activation strategies take arbitrary config and allows us to enable a toggle in various ways.',
|
||||
image: imgUrl('logo-inverted.png'),
|
||||
imageAlign: 'right',
|
||||
title: 'Activation strategies',
|
||||
},
|
||||
]}
|
||||
</Block>
|
||||
);
|
||||
|
||||
const Showcase = props => {
|
||||
if ((siteConfig.users || []).length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const showcase = siteConfig.users.filter(user => user.pinned).map(user => (
|
||||
<a href={user.infoLink} key={user.infoLink}>
|
||||
<img src={user.image} alt={user.caption} title={user.caption} />
|
||||
</a>
|
||||
));
|
||||
|
||||
return (
|
||||
<div className="productShowcaseSection paddingBottom">
|
||||
<h2>Who is Using This?</h2>
|
||||
<p>This project is used by all these people</p>
|
||||
<div className="logos">{showcase}</div>
|
||||
<div className="more-users">
|
||||
<a className="button" href={pageUrl('users.html', props.language)}>
|
||||
More {siteConfig.title} Users
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
class Index extends React.Component {
|
||||
render() {
|
||||
const language = this.props.language || '';
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HomeSplash language={language} config={this.props.config} />
|
||||
<div className="mainContainer">
|
||||
<FeatureCallout />
|
||||
<UnleashClient />
|
||||
<TryOut />
|
||||
<ActivationStrategies />
|
||||
<Showcase language={language} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Index;
|
49
website/pages/en/users.js
Normal file
49
website/pages/en/users.js
Normal file
@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
const React = require('react');
|
||||
|
||||
const CompLibrary = require('../../core/CompLibrary.js');
|
||||
|
||||
const Container = CompLibrary.Container;
|
||||
|
||||
const siteConfig = require(`${process.cwd()}/siteConfig.js`);
|
||||
|
||||
class Users extends React.Component {
|
||||
render() {
|
||||
if ((siteConfig.users || []).length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const editUrl = `${siteConfig.repoUrl}/edit/master/website/siteConfig.js`;
|
||||
const showcase = siteConfig.users.map(user => (
|
||||
<a href={user.infoLink} key={user.infoLink}>
|
||||
<img src={user.image} alt={user.caption} title={user.caption} />
|
||||
</a>
|
||||
));
|
||||
|
||||
return (
|
||||
<div className="mainContainer">
|
||||
<Container padding={['bottom', 'top']}>
|
||||
<div className="showcaseSection">
|
||||
<div className="prose">
|
||||
<h1>Who is Using This?</h1>
|
||||
<p>This project is used by many folks</p>
|
||||
</div>
|
||||
<div className="logos">{showcase}</div>
|
||||
<p>Are you using this project?</p>
|
||||
<a href={editUrl} className="button">
|
||||
Add your company
|
||||
</a>
|
||||
</div>
|
||||
</Container>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Users;
|
12
website/sidebars.json
Normal file
12
website/sidebars.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"documentation": {
|
||||
"Getting Started": ["getting_started", "securing_unleash", "unleash_context", "activation_strategy", "client_specification", "migration_guide"],
|
||||
"Developer Guide": ["developer_guide", "database_schema", "database_backup"]
|
||||
},
|
||||
"api": {
|
||||
"Client": ["api/client/features", "api/client/register", "api/client/metrics"],
|
||||
"Admin": ["api/admin/features", "api/admin/strategies", "api/admin/metrics", "api/admin/events" ],
|
||||
"Internal": ["api/internal" ]
|
||||
|
||||
}
|
||||
}
|
108
website/siteConfig.js
Normal file
108
website/siteConfig.js
Normal file
@ -0,0 +1,108 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
// See https://docusaurus.io/docs/site-config for all the possible
|
||||
// site configuration options.
|
||||
|
||||
// List of projects/orgs using your project for the users page.
|
||||
const users = [
|
||||
{
|
||||
caption: 'FINN.no',
|
||||
// You will need to prepend the image path with your baseUrl
|
||||
// if it is not '/', like: '/test-site/img/docusaurus.svg'.
|
||||
image: '/img/finn.jpg',
|
||||
infoLink: 'https://www.finn.no',
|
||||
pinned: true,
|
||||
},
|
||||
];
|
||||
|
||||
const siteConfig = {
|
||||
title: 'Unleash', // Title for your website.
|
||||
tagline: 'The enterprise ready feature toggle service',
|
||||
url: 'https://unleash.github.io', // Your website URL
|
||||
baseUrl: '/', // Base URL for your project */
|
||||
// For github.io type URLs, you would set the url and baseUrl like:
|
||||
// url: 'https://facebook.github.io',
|
||||
// baseUrl: '/test-site/',
|
||||
|
||||
// Used for publishing and more
|
||||
projectName: 'unleash.github.io',
|
||||
organizationName: 'Unleash',
|
||||
// For top-level user or org sites, the organization is still the same.
|
||||
// e.g., for the https://JoelMarcey.github.io site, it would be set like...
|
||||
// organizationName: 'JoelMarcey'
|
||||
|
||||
// For no header links in the top nav bar -> headerLinks: [],
|
||||
headerLinks: [
|
||||
{ doc: 'getting_started', label: 'Documentation' },
|
||||
{ doc: 'api/client/features', label: 'API' },
|
||||
{ page: 'help', label: 'Help' },
|
||||
// {blog: true, label: 'Blog'},
|
||||
],
|
||||
|
||||
// If you have users set above, you add it here:
|
||||
users,
|
||||
|
||||
/* path to images for header/footer */
|
||||
headerIcon: 'img/logo-inverted.png',
|
||||
footerIcon: 'img/logo-inverted.png',
|
||||
favicon: 'img/favicon/favicon.ico',
|
||||
|
||||
/* Colors for website */
|
||||
colors: {
|
||||
primaryColor: '#3f51b5',
|
||||
secondaryColor: '#697ce5',
|
||||
},
|
||||
|
||||
/* Custom fonts for website */
|
||||
/*
|
||||
fonts: {
|
||||
myFont: [
|
||||
"Times New Roman",
|
||||
"Serif"
|
||||
],
|
||||
myOtherFont: [
|
||||
"-apple-system",
|
||||
"system-ui"
|
||||
]
|
||||
},
|
||||
*/
|
||||
|
||||
// This copyright info is used in /core/Footer.js and blog RSS/Atom feeds.
|
||||
copyright: `Copyright © ${new Date().getFullYear()} FINN.no`,
|
||||
|
||||
highlight: {
|
||||
// Highlight.js theme to use for syntax highlighting in code blocks.
|
||||
theme: 'default',
|
||||
},
|
||||
|
||||
// Add custom scripts here that would be placed in <script> tags.
|
||||
scripts: ['https://buttons.github.io/buttons.js'],
|
||||
|
||||
// On page navigation for the current documentation page.
|
||||
onPageNav: 'separate',
|
||||
// No .html extensions for paths.
|
||||
cleanUrl: true,
|
||||
|
||||
// Open Graph and Twitter card images.
|
||||
ogImage: 'img/unleash_logo.png',
|
||||
twitterImage: 'img/unleash_logo.png',
|
||||
|
||||
// Show documentation's last contributor's name.
|
||||
// enableUpdateBy: true,
|
||||
|
||||
// Show documentation's last update time.
|
||||
// enableUpdateTime: true,
|
||||
|
||||
// You may provide arbitrary config keys to be used as needed by your
|
||||
// template. For example, if you need your repo's URL...
|
||||
repoUrl: 'https://github.com/unleash/unleash',
|
||||
};
|
||||
|
||||
module.exports = siteConfig;
|
24
website/static/css/custom.css
Normal file
24
website/static/css/custom.css
Normal file
@ -0,0 +1,24 @@
|
||||
/* your custom css */
|
||||
|
||||
@media only screen and (min-device-width: 360px) and (max-device-width: 736px) {
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1024px) {
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1400px) {
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1500px) {
|
||||
}
|
||||
|
||||
h2.projectTitle {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.blockImage img {
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||||
}
|
BIN
website/static/img/dashboard.png
Normal file
BIN
website/static/img/dashboard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
1
website/static/img/docusaurus.svg
Normal file
1
website/static/img/docusaurus.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 76 KiB |
BIN
website/static/img/favicon/favicon.ico
Normal file
BIN
website/static/img/favicon/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
website/static/img/finn.jpg
Normal file
BIN
website/static/img/finn.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.0 KiB |
BIN
website/static/img/logo-inverted.png
Normal file
BIN
website/static/img/logo-inverted.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.3 KiB |
BIN
website/static/img/unleash_logo.png
Normal file
BIN
website/static/img/unleash_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
Loading…
Reference in New Issue
Block a user