gradio-space-ci / app.py
Wauplin's picture
Wauplin HF staff
Update app.py
0896d8d verified
raw
history blame
2.94 kB
#!/usr/bin/env python
import json
import gradio as gr
from gradio_space_ci import enable_space_ci
from huggingface_hub import CommitScheduler, hf_hub_download
from open_pr import open_pr
enable_space_ci()
TITLE = "Listen to Pull Requests and start ephemeral Spaces on new PRs! πŸš€"
DESCRIPTION = """
## 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.
The app below let you open a PR to enable Space CI on a Space.
The steps are the following:
1. Sign-in with Hugging Face.
2. Input a Space id from the Hub
3. Click "Submit"
4. That's it! You'll get feedback if it works or not, and if it worked, you'll get the URL of the opened PR πŸ”₯
#### ⚠️ Disclaimer: **Gradio Space CI** works only on public Spaces.
For more details about **Gradio Space CI**, checkout [this page](https://huggingface.co/spaces/Wauplin/gradio-space-ci/blob/main/README.md).
If you find any issues, please report here: https://huggingface.co/spaces/Wauplin/gradio-space-ci/discussions
"""
SUCCESS_MESSAGE = """
### Success πŸ”₯
Yay! A PR has been open to enable Space CI on {space_id}. Check it out here: [{pr_url}]({pr_url}).
You can contact the Space owner to let them know about this PR.
"""
ERROR_MESSAGE = """
### Error ❌
An error happened while trying to open a PR to enable Space CI on {space_id}.
{error}"""
DATASET_ID = "Wauplin/gradio-space-ci-report"
csv_path = hf_hub_download(repo_id=DATASET_ID, repo_type="dataset", filename="report.jsonl", local_dir="./report")
scheduler = CommitScheduler(repo_id=DATASET_ID, repo_type="dataset", folder_path="./report")
def append(**kwargs):
with scheduler.lock:
with open(csv_path, "a") as f:
f.write(json.dumps(kwargs) + "\n")
def fn(space_id_or_url: str, oauth_profile: gr.OAuthProfile | None, oauth_token: gr.OAuthToken | None) -> str:
user = oauth_profile.username if oauth_profile is not None else "???"
try:
pr_url = open_pr(space_id_or_url, oauth_token)
append(space_id=space_id_or_url, status="success", pr_url=pr_url, user=user)
return SUCCESS_MESSAGE.format(space_id=space_id_or_url, pr_url=pr_url)
except Exception as e:
append(space_id=space_id_or_url, status="error", error=str(e), user=user)
return ERROR_MESSAGE.format(space_id=space_id_or_url, error=str(e))
with gr.Blocks() as blocks:
gr.Markdown(f"<h1 style='text-align: center; margin-bottom: 1rem'>{TITLE}</h1>")
gr.Markdown(DESCRIPTION)
with gr.Row(equal_height=False):
with gr.Column():
space_id = gr.Textbox(label="Space ID or URL", lines=1)
gr.LoginButton()
submit_btn = gr.Button("Submit", variant="primary")
with gr.Column():
output = gr.Markdown()
submit_btn.click(fn, space_id, output)
blocks.launch()