diff --git a/.gitignore b/.gitignore index d529746..411b648 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ sablier.yaml ./plugins/traefik/e2e/kubeconfig.yaml -node_modules \ No newline at end of file +node_modules +.DS_Store \ No newline at end of file diff --git a/Makefile b/Makefile index 6b2697d..334af79 100644 --- a/Makefile +++ b/Makefile @@ -30,3 +30,6 @@ update-doc-version-middleware: find . -type f \( -name "*.md" -o -name "*.yml" \) -exec sed -i 's/version=v$(LAST)/version=v$(NEXT)/g' {} + sed -i 's/SABLIER_VERSION=v$(LAST)/SABLIER_VERSION=v$(NEXT)/g' plugins/caddy/Dockerfile.remote sed -i 's/v$(LAST)/v$(NEXT)/g' plugins/caddy/README.md + +docs: + docsify serve docs \ No newline at end of file diff --git a/README.md b/README.md index 499b9a8..3c3f4d5 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,43 @@ # Sablier - -[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors-) - + +[![GitHub license](https://img.shields.io/github/license/acouvreur/sablier.svg)](https://github.com/acouvreur/sablier/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/acouvreur/sablier.svg)](https://GitHub.com/acouvreur/sablier/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/acouvreur/sablier.svg)](https://GitHub.com/acouvreur/sablier/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/acouvreur/sablier.svg)](https://GitHub.com/acouvreur/sablier/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![GoDoc](https://godoc.org/github.com/acouvreur/sablier?status.svg)](http://godoc.org/github.com/acouvreur/sablier) ![Latest Build](https://img.shields.io/github/actions/workflow/status/acouvreur/sablier/build.yml?style=flat-square&branch=main) ![Go Report](https://goreportcard.com/badge/github.com/acouvreur/sablier?style=flat-square) ![Go Version](https://img.shields.io/github/go-mod/go-version/acouvreur/sablier?style=flat-square) -![Latest Release](https://img.shields.io/github/release/acouvreur/sablier/all.svg?style=flat-square) +![Latest Release](https://img.shields.io/github/v/release/acouvreur/sablier?style=flat-square&sort=semver) +![Latest PreRelease](https://img.shields.io/github/v/release/acouvreur/sablier?style=flat-square&include_prereleases&sort=semver) -Sablier is an API that start containers for a given duration. +An free and open-source software to bring workloads on demand to your infrastructure. -It provides an integrations with multiple reverse proxies and different loading strategies. +Either because you don't want to overload your raspberry pi or because your QA environment gets used only once a week and wastes resources by keeping your workloads up and running, Sablier is a project that might interest you. -Which allows you to start your containers on demand and shut them down automatically as soon as there's no activity. +## 🎯 Features -![Hourglass](https://raw.githubusercontent.com/acouvreur/sablier/main/docs/img/hourglass.png) +- [Supports the following providers](https://acouvreur.github.io/sablier/#/providers/overview) + - Docker + - Docker Swarm + - Kubernetes +- [Supports multiple reverse proxies](https://acouvreur.github.io/sablier/#/plugins/overview) + - Nginx + - Traefik + - Caddy +- Scale up your workload automatically upon the first request + - [with a themable waiting page]() + - [with a hanging request (hang until service is up)]() +- Scale your workload to zero automatically after a period of inactivity -## Getting started +## 📝 Documentation -## Documentation - -## Development +[See the documentation here](https://acouvreur.github.io/sablier/#/) ## Contributors - diff --git a/docs/README.md b/docs/README.md index f2d451b..e056107 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,14 +2,19 @@ # Sablier - Scale to Zero +Sablier is a **free** and **open-source** software that can scale your workloads on demand. + +![Demo](assets/img/demo.gif) + +Your workloads can be a docker container, a kubernetes deployment and more (see [providers](/providers/overview) for the full list). + + Sablier is an API that start containers for a given duration. It provides an integrations with multiple reverse proxies and different loading strategies. Which allows you to start your containers on demand and shut them down automatically as soon as there's no activity. -![Hourglass](https://raw.githubusercontent.com/acouvreur/sablier/main/docs/img/hourglass.png) - ## Glossary I'll use these terms in order to be provider agnostic. diff --git a/docs/assets/img/demo.gif b/docs/assets/img/demo.gif new file mode 100644 index 0000000..f11f3f7 Binary files /dev/null and b/docs/assets/img/demo.gif differ diff --git a/docs/plugins/overview.md b/docs/plugins/overview.md index b4a473f..569dea0 100644 --- a/docs/plugins/overview.md +++ b/docs/plugins/overview.md @@ -18,6 +18,8 @@ It leverages the API calls to plugin integration to catch in-flight requests to | [Nginx](/plugins/nginx) | ✅ | ✅ | ❌ | | [Caddy](/plugins/caddy) | ✅ | ✅ | ❌ | +*Your Reverse Proxy is not on the list? [Open an issue to request the missing reverse proxy integration here!](https://github.com/acouvreur/sablier/issues/new?assignees=&labels=enhancement%2C+reverse-proxy&projects=&template=reverse-proxy-integration-request.md&title=Add+%60%5BREVERSE+PROXY%5D%60+reverse+proxy+integration)* + ## Runtime and Compiled plugins Some reverse proxies have the capability to evaluate the plugins at runtime (Traefik with Yaegi, NGINX with Lua and JS plugins) which means the reverse proxy provides a way to consume the plugin directly. diff --git a/docs/providers/overview.md b/docs/providers/overview.md index 4b5b3df..20ad561 100644 --- a/docs/providers/overview.md +++ b/docs/providers/overview.md @@ -21,4 +21,4 @@ A Provider typically have the following capabilities: | | [EC2](/providers/ec2) | `ec2` | Work in progress | | | [Systemd](/providers/systemd) | `systemd` | Work in progress | -*Your Provider is not on the list? Open an issue or a pull request to add this functionnality here!* \ No newline at end of file +*Your Provider is not on the list? [Open an issue to request the missing provider here!](https://github.com/acouvreur/sablier/issues/new?assignees=&labels=enhancement%2C+provider&projects=&template=instance-provider-request.md&title=Add+%60%5BPROVIDER%5D%60+provider)* \ No newline at end of file diff --git a/docs/strategies.md b/docs/strategies.md index b3878e5..e44cec1 100644 --- a/docs/strategies.md +++ b/docs/strategies.md @@ -6,6 +6,8 @@ When configuring The **Dynamic Strategy** provides a waiting page for your session. +![Demo](assets/img/demo.gif) + ?> This strategy is well suited for a user that would access a frontend directly and expects to see a loading page. ```plantuml @@ -13,6 +15,8 @@ The **Dynamic Strategy** provides a waiting page for your session. User -> Proxy: Website Request Proxy -> Sablier: Reverse Proxy Plugin Request Session Status +Sablier -> Provider: Request Instance Status +Sablier <-- Provider: Response Instance Status Proxy <-- Sablier: Returns the X-Sablier-Status Header alt `X-Sablier-Status` value is `not-ready` @@ -47,7 +51,10 @@ Proxy -> Sablier: Reverse Proxy Plugin Request Session Status Sablier -> Provider: Request Instance Status alt `Instance` status is `not-ready` - + Proxy -> Sablier: Reverse Proxy Plugin Request Session Status + Sablier -> Provider: Request Instance Status + Sablier <-- Provider: Response Instance Status + Proxy <-- Sablier: Returns the waiting page end Sablier <-- Provider: Response Instance Status