Skip to content

Commit

Permalink
Prevent race conditions when deploying website demos (gradio-app#5480)
Browse files Browse the repository at this point in the history
* wait for deploy to pypi

* read correct version for main deploys

* fixes

* rework

* use workflow dispatch

* fix build-pr
  • Loading branch information
aliabd authored Sep 18, 2023
1 parent acdeff5 commit 0be1e51
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 15 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
name: Build PR Artifacts

on:
push:
branches:
- main
workflow_dispatch:
pull_request:
branches:
- main
Expand Down Expand Up @@ -38,15 +36,17 @@ jobs:
- name: Get PR Number
id: get_pr_number
run: |
echo "GRADIO_VERSION=$(python -c 'import requests;print(requests.get("https://pypi.org/pypi/gradio/json").json()["info"]["version"])')" >> $GITHUB_OUTPUT
if ${{ github.event_name == 'pull_request' }}; then
echo "GRADIO_VERSION=$(python -c 'import requests;print(requests.get("https://pypi.org/pypi/gradio/json").json()["info"]["version"])')" >> $GITHUB_OUTPUT
python -c "import os;print(os.environ['GITHUB_REF'].split('/')[2])" > pr_number.txt
echo "PR_NUMBER=$(cat pr_number.txt)" >> $GITHUB_OUTPUT
else
echo "GRADIO_VERSION=$(python -c 'import json; print(json.load(open("gradio/package.json"))["version"])')" >> $GITHUB_OUTPUT
echo "PR_NUMBER='main'" >> $GITHUB_OUTPUT
fi
- name: Build pr package
run: |
python -c 'import json; j = json.load(open("gradio/package.json")); j["version"] = "${{ steps.get_pr_number.outputs.GRADIO_VERSION }}"; json.dump(j, open("gradio/package.json", "w"))'
pnpm i --frozen-lockfile --ignore-scripts
pnpm build
python3 -m build -w
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/deploy-pr-to-spaces.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,15 @@ jobs:
${{ secrets.SPACES_DEPLOY_TOKEN }} \
--gradio-version ${{ steps.set-outputs.outputs.gradio_version }} > url.txt
echo "SPACE_URL=$(cat url.txt)" >> $GITHUB_OUTPUT
- name: Upload website demos
- name: Upload Website Demos
if: >
github.event.workflow_run.event == 'push' &&
github.event.workflow_run.event == 'workflow_dispatch' &&
github.event.workflow_run.conclusion == 'success'
id: upload-website-demos
run: |
python scripts/upload_website_demos.py --AUTH_TOKEN ${{ secrets.SPACES_DEPLOY_TOKEN }} \
--WHEEL_URL https://gradio-builds.s3.amazonaws.com/${{ steps.set-outputs.outputs.gh_sha }}/ \
--GRADIO_VERSION ${{ steps.set-outputs.outputs.gradio_version }}
comment-spaces-success:
uses: "./.github/workflows/comment-queue.yml"
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,8 @@ jobs:
user: __token__
passwords: |
gradio:${{ secrets.PYPI_API_TOKEN }}
gradio_client:${{ secrets.PYPI_GRADIO_CLIENT_TOKEN }}
gradio_client:${{ secrets.PYPI_GRADIO_CLIENT_TOKEN }}
- name: trigger spaces deploy workflow
env:
GITHUB_TOKEN: ${{ secrets.COMMENT_TOKEN }}
run: gh workflow run build-pr.yml
13 changes: 5 additions & 8 deletions scripts/upload_website_demos.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,9 @@
import huggingface_hub

ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
VERSION_FILE = os.path.abspath(os.path.join(ROOT, "gradio", "package.json"))
DIR = os.path.dirname(__file__)
GRADIO_DEMO_DIR = os.path.abspath(os.path.join(ROOT, "demo"))

with open(VERSION_FILE) as f:
version = json.load(f)["version"]

# Reasoning:
# 1. all_demos includes all demos and is for testing PRs
# 2. reset_components includes media files that are only present in all_demos (only for PRs)
Expand Down Expand Up @@ -98,11 +94,12 @@ def upload_demo_to_space(
parser = argparse.ArgumentParser()
parser.add_argument("--WHEEL_URL", type=str, help="aws link to gradio wheel")
parser.add_argument("--AUTH_TOKEN", type=str, help="huggingface auth token")
parser.add_argument("--GRADIO_VERSION", type=str, help="gradio version")
args = parser.parse_args()
gradio_wheel_url = args.WHEEL_URL + f"gradio-{gradio_version}-py3-none-any.whl"
gradio_wheel_url = args.WHEEL_URL + f"gradio-{args.GRADIO_VERSION}-py3-none-any.whl"
if args.AUTH_TOKEN is not None:
hello_world_version = str(huggingface_hub.space_info("gradio/hello_world").cardData["sdk_version"])
for demo in demos:
if hello_world_version != gradio_version:
upload_demo_to_space(demo_name=demo, space_id="gradio/" + demo, hf_token=args.AUTH_TOKEN, gradio_version=gradio_version)
upload_demo_to_space(demo_name=demo, space_id="gradio/" + demo + "_main", hf_token=args.AUTH_TOKEN, gradio_version=gradio_version, gradio_wheel_url=gradio_wheel_url)
if hello_world_version != args.GRADIO_VERSION:
upload_demo_to_space(demo_name=demo, space_id="gradio/" + demo, hf_token=args.AUTH_TOKEN, gradio_version=args.GRADIO_VERSION)
upload_demo_to_space(demo_name=demo, space_id="gradio/" + demo + "_main", hf_token=args.AUTH_TOKEN, gradio_version=args.GRADIO_VERSION, gradio_wheel_url=gradio_wheel_url)

0 comments on commit 0be1e51

Please sign in to comment.