Spaces:
Running
Running
title: Gradio Space CI | |
emoji: π€ | |
colorFrom: gray | |
colorTo: gray | |
sdk: gradio | |
sdk_version: 4.18.0 | |
app_file: app.py | |
pinned: false | |
hf_oauth: true | |
hf_oauth_scopes: | |
- read-repos | |
space_ci: | |
trusted_authors: | |
- clefourrier | |
# ^ Only PRs from trusted authors are deployed in an ephemeral Space. | |
# Space owners are automatically trusted. | |
# It is possible to manually trust other authors by adding them as a list. | |
private: auto | |
# ^ Can be 'true', 'false' or 'auto'. If 'auto', the ephemeral Spaces will have same | |
# visibility as the main Space. | |
variables: auto | |
# ^ By default ('auto'), all variables from the main Space are copied to the ephemeral Space. | |
# Otherwise, you can define a key-value mapping with variables to set. | |
# Variables are injected as environment variable in the ephemeral Space and are public for anyone landing on the Space. | |
secrets: | |
- HF_TOKEN | |
# ^ A list of secrets that must be copied from the main Space to the ephemeral Spaces. | |
# Secrets are injected as environment variable in the ephemeral Space. | |
# Be careful with the 'trusted_authors' list when setting secrets. | |
hardware: cpu-basic | |
# ^ Defines which hardware to assign to the ephemeral Space. | |
# Can be set to 'auto' to assign the same hardware as the main Space. | |
# Defaults to 'cpu-basic' (free). | |
storage: null | |
# ^ Defines which storage to assign to the ephemeral Space. | |
# Can be set to 'auto' to assign the same storage as the main Space. | |
# Defaults to no storage (free). | |
# Listen to Pull Requests and start ephemeral Spaces on new PRs! π | |
**Gradio Space CI** is a tool to create ephemeral Spaces for each PR opened on your Space repo. | |
The goal is to improve developer experience by making the review process as lean as possible. | |
#### β οΈ Disclaimer: **Gradio Space CI** works only on public Spaces. | |
## β‘ Quick start (4 steps) | |
1. Update your requirements. | |
```py | |
# requirements.txt | |
gradio-space-ci @ git+https://huggingface.co/spaces/Wauplin/gradio-space-ci@0.2.1 | |
``` | |
2. Set `HF_TOKEN` as a Space secret. | |
3. Configure CI in your `README.md`. | |
```py | |
# README.md | |
title: ... | |
emoji: ... | |
sdk: gradio | |
space_ci: | |
trusted_authors: | |
- clefourrier | |
secrets: | |
- HF_TOKEN | |
hardware: cpu-basic | |
storage: null | |
``` | |
4. Enable CI in `app.py`. | |
```py | |
# app.py | |
from gradio_space_ci import enable_space_ci | |
enable_space_ci() | |
``` | |
And that's it! For more details, check out the [integration](#integration) section. | |
## β¨ Key features | |
1. **Listen to Pull Requests**. | |
2. **Launch ephemeral Spaces** on new PRs. | |
1. When a commit is pushed to a PR, the ephemeral Space gets synchronized. | |
2. When the PR is closed, the ephemeral Space is deleted. | |
3. Configure ephemeral Spaces automatically | |
1. All **variables** are copied from the main Space. | |
2. **Secrets** are copied from the main Space, based on CI configuration. | |
3. **Hardware** and **storage** are set, based on CI configuration. | |
4. Only **trusted authors** are able to access secrets | |
1. By default, repo owners are trusted authors | |
2. More authors can be added in CI configuration | |
3. untrusted authors can start ephemeral Space but without secrets or custom hardware | |
Want more? Please open an issue in the [Community Tab](https://huggingface.co/spaces/Wauplin/gradio-space-ci/discussions)! This is meant to be a community-driven implementation, enhanced by user feedback and contributions! | |
## βοΈ Integration | |
Integrate *Gradio Space CI* in just a few steps: | |
### 1. Update your `requirements.txt` | |
If you don't have a `requirements.txt` file yet, create one in your Space repo. | |
Add the following line to it: | |
```bash | |
# requirements.txt | |
gradio-space-ci @ git+https://huggingface.co/spaces/Wauplin/gradio-space-ci@0.2.1 | |
``` | |
### 2. Add a user token as `HF_TOKEN` secret | |
1. Go to your [user settings page](https://huggingface.co/settings/tokens). | |
2. Create a new token with **write** permissions. | |
3. Go to your Space settings page. | |
4. Add `HF_TOKEN` as a Space secret with your newly created token. | |
(optional) You can also define a `SPACE_CI_SECRET` secret value that will be used to authenticate webhook calls. If you don't define one, a random secret value will be generated for you. | |
### 3. Configure CI in `README.md` | |
Edit the Space metadata in your `README.md` file: | |
```yaml | |
title: ... | |
sdk: gradio | |
sdk_version: ... | |
app_file: ... | |
space_ci: | |
trusted_authors: | |
- Wauplin | |
# ^ Only PRs from trusted authors are deployed in an ephemeral Space. | |
# Space owners are automatically trusted. | |
# It is possible to manually trust other authors by adding them as a list. | |
private: auto | |
# ^ Can be 'true', 'false' or 'auto'. If 'auto', the ephemeral Spaces will have same | |
# visibility as the main Space. | |
variables: auto | |
# ^ By default ('auto'), all variables from the main Space are copied to the ephemeral Space. | |
# Otherwise, you can define a key-value mapping with variables to set. | |
# Variables are injected as environment variable in the ephemeral Space and are public for anyone landing on the Space. | |
secrets: | |
- HF_TOKEN | |
# ^ A list of secrets that must be copied from the main Space to the ephemeral Spaces. | |
# Secrets are injected as environment variable in the ephemeral Space. | |
# Be careful with the 'trusted_authors' list when setting secrets. | |
hardware: cpu-basic | |
# ^ Defines which hardware to assign to the ephemeral Space. | |
# Can be set to 'auto' to assign the same hardware as the main Space. | |
# Defaults to 'cpu-basic' (free). | |
storage: null | |
# ^ Defines which storage to assign to the ephemeral Space. | |
# Can be set to 'auto' to assign the same storage as the main Space. | |
# Defaults to no storage (free). | |
``` | |
### 4. Enable CI in `app.py` | |
Call `enable_space_ci` in your `app.py` file: | |
```py | |
# app.py | |
import gradio as gr | |
from gradio_space_ci import enable_space_ci | |
enable_space_ci() | |
# ANY gradio app | |
with gr.Blocks() as demo: | |
... | |
demo.launch() | |
``` | |
And you're done! Ephemeral Spaces will be launched for each and every PR on your repo. | |
## π Useful links | |
- **Demo:** https://huggingface.co/spaces/Wauplin/gradio-space-ci | |
- **README:** https://huggingface.co/spaces/Wauplin/gradio-space-ci/blob/main/README.md | |
- **Questions and feedback:** https://huggingface.co/spaces/Wauplin/gradio-space-ci/discussions | |
- **Release notes:** https://huggingface.co/spaces/Wauplin/gradio-space-ci/blob/main/RELEASE.md |