Spaces:
Running
title: Gradio Space CI
emoji: π€
colorFrom: gray
colorTo: gray
sdk: gradio
sdk_version: 4.7.1
app_file: app.py
pinned: false
space_ci:
trusted_authors:
- clefourrier
private: auto
variables: auto
secrets:
- HF_TOKEN
hardware: cpu-basic
storage: null
Listen to Pull Requests and start ephemeral Spaces on new PRs! π
Gradio Space CI is a plugin (and package) to create ephemeral Spaces for each PR opened on your Space repo. The goal is to foster community contributions by making the review process as lean as possible.
β‘ Quick start (4 steps)
- Update your requirements.
# requirements.txt
gradio-space-ci @ git+https://huggingface.co/spaces/Wauplin/gradio-space-ci@0.2.1
- Set
HF_TOKEN
as a Space secret. - Configure CI in your
README.md
.
# README.md
title: ...
emoji: ...
sdk: gradio
space_ci:
trusted_authors:
- clefourrier
secrets:
- HF_TOKEN
hardware: cpu-basic
storage: null
- Enable CI in
app.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 section.
β¨ Key features
- Listen to Pull Requests.
- Launch ephemeral Spaces on new PRs.
- When a commit is pushed to a PR, the ephemeral Space gets synchronized.
- When the PR is closed, the ephemeral Space is deleted.
- Configure ephemeral Spaces automatically
- All variables are copied from the main Space.
- Secrets are copied from the main Space, based on CI configuration.
- Hardware and storage are set, based on CI configuration.
- Only trusted authors are able to access secrets
- By default, repo owners are trusted authors
- More authors can be added in CI configuration
- untrusted authors can start ephemeral Space but without secrets or custom hardware
Want more? Please open an issue in the Community Tab! 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:
# 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
- Go to your user settings page.
- Create a new token with write permissions.
- Go to your Space settings page.
- 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:
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:
# 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