* test pr

* conditional

* conditional

* conditional

* conditional

* conditional

* changes

* changes

* add changeset

* changes

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
This commit is contained in:
pngwn 2024-08-05 15:27:26 +01:00 committed by GitHub
parent d4c503a471
commit d30432e9c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
31 changed files with 725 additions and 664 deletions

View File

@ -0,0 +1,7 @@
---
"@gradio/client": minor
"gradio": minor
"website": minor
---
feat:harden CI

View File

@ -1,3 +1,4 @@
**/*.md
**/js/app/public/**
**/pnpm-workspace.yaml
**/js/app/dist/**
@ -12,7 +13,7 @@
**/gradio/**
**/.pnpm-store/**
**/.venv/**
**/.github/**
/guides/**
**/.mypy_cache/**
!test-strategy.md
@ -25,7 +26,6 @@
sweep.yaml
**/.vercel/**
**/build/**
**/*.md
**/src/lib/json/**/*
**/playwright/.cache/**/*
**/theme/src/pollen.css

View File

@ -2,18 +2,11 @@ name: "prepare"
description: "Prepare workflow"
inputs:
type:
description: "Type of workflow"
default: "one of: `gradio`, `python-client`, `js`, `js-client`, `functional`"
token:
description: "Github token"
required: true
name:
description: "Check name"
default: "false"
commit_status:
description: "Whether to create a commit status"
default: "true"
description: "GitHub token"
filter:
description: "Which filter to use"
outputs:
should_run:
description: "Whether to run the workflow"
@ -30,122 +23,55 @@ outputs:
source_branch:
description: "Source branch"
value: ${{ steps.pr.outputs.source_branch }}
merge_sha:
description: "SHA of the merged result preview branch"
value: ${{ steps.pr.outputs.merge_sha }}
mergeable:
description: "Whether the PR is mergeable"
value: ${{ steps.pr.outputs.mergeable }}
labels:
description: "Labels on the PR"
value: ${{ steps.pr.outputs.labels }}
found_pr:
description: "Whether a PR was found"
value: ${{ steps.pr.outputs.found_pr }}
run_id:
description: "Run ID"
value: ${{ steps.pr.outputs.run_id }}
gradio_version:
description: "Gradio version"
value: ${{ steps.pr.outputs.gradio_version }}
runs:
using: "composite"
steps:
- name: "Get PR number"
id: pr
uses: "gradio-app/github/actions/find-pr@main"
with:
github_token: ${{ inputs.token }}
- uses: actions/checkout@v4
with:
repository: ${{ github.repository }}
ref: ${{ steps.pr.outputs.sha }}
fetch-depth: 0
token: ${{ inputs.token }}
- uses: dorny/paths-filter@v3
- uses: gradio-app/github/actions/filter-paths@main
id: changes
with:
base: main
ref: ${{ steps.pr.outputs.sha == github.sha && 'main' || steps.pr.outputs.sha }}
filters: |
gradio:
- 'client/python/**'
- 'gradio/**'
- 'requirements.txt'
- '.github/**'
- 'scripts/**'
- 'test/**'
js:
- 'js/**'
- 'client/js/**'
- '.github/**'
- 'package.json'
- 'pnpm-lock.yaml'
- 'tsconfig.json'
- '.config/**'
functional:
- '.github/**'
- 'client/**'
- 'demo/**'
- 'gradio/**'
- 'js/**'
- 'scripts/**'
- 'globals.d.ts'
- 'package.json'
- 'pnpm-lock.yaml'
- 'pyproject.toml'
- 'requirements.txt'
- '.config/**'
visual:
- '.github/workflows/deploy-chromatic.yml'
- 'js!(/_website)/**'
- 'package.json'
website:
- 'js/_website/**'
- 'package.json'
- 'pnpm-lock.yaml'
- 'guides/**'
- 'README.md'
- 'CHANGELOG.md'
- 'gradio/**'
- 'client/**'
- 'demo/**'
- '.github/deplooy-website.yml'
- name: set env (gradio)
if: ${{ inputs.type == 'gradio' }}
shell: bash
run: echo "SHOULD_RUN=${{ steps.changes.outputs.gradio == 'true' }}" >> $GITHUB_ENV
- name: set env (js)
if: ${{ inputs.type == 'js' }}
shell: bash
run: echo "SHOULD_RUN=${{ steps.changes.outputs.js == 'true' }}" >> $GITHUB_ENV
- name: set env (functional)
if: ${{ inputs.type == 'functional' }}
shell: bash
run: echo "SHOULD_RUN=${{ steps.changes.outputs.functional == 'true' }}" >> $GITHUB_ENV
- name: set env (visual)
if: ${{ inputs.type == 'visual' }}
shell: bash
run: echo "SHOULD_RUN=${{ steps.changes.outputs.visual == 'true' }}" >> $GITHUB_ENV
- name: set end (all)
if: ${{ inputs.type == 'all' }}
shell: bash
run: echo "SHOULD_RUN=true" >> $GITHUB_ENV
- name: set env (website)
if: ${{ inputs.type == 'website' }}
shell: bash
run: echo "SHOULD_RUN=${{ steps.changes.outputs.website == 'true' }}" >> $GITHUB_ENV
- if: ${{ steps.pr.outputs.mergeable == 'false' && steps.pr.outputs.source_branch != 'main' }}
run: echo "SHOULD_RUN=false" >> $GITHUB_ENV
shell: bash
- name: set output
id: should_run
shell: bash
run: echo "should_run=${{ env.SHOULD_RUN }}" >> $GITHUB_OUTPUT
- uses: "gradio-app/github/actions/commit-status@main"
with:
token: ${{ inputs.token }}
pr: ${{ steps.pr.outputs.pr_number }}
sha: ${{ steps.pr.outputs.sha }}
name: ${{ inputs.name }}
changes: ${{ steps.changes.outputs.changes }}
type: ${{ inputs.type }}
init: true
mergeable: ${{ steps.pr.outputs.source_branch == 'main' || steps.pr.outputs.mergeable }}
commit_status: ${{ inputs.type == 'visual' && steps.should_run.outputs.should_run == 'false' || inputs.commit_status }}
filter: ${{ inputs.filter }}
- name: get gradio version
id: gradio_version
run: |
GRADIO_VERSION=$(curl -s https://pypi.org/pypi/gradio/json | grep -o '"version":"[^"]*"' | cut -d'"' -f4 | head -n 1)"
echo $GRADIO_VERSION >> $GITHUB_OUTPUT
- name: convert to JSON
uses: gradio-app/github/actions/input-to-json@main
with:
path: output.json
sha: ${{ github.event.pull_request?.head.sha || github.sha }}
source_repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
source_branch: ${{ github.event.pull_request.head.ref || github.ref }}
pr_number: ${{ github.event.pull_request?.number || 'false'}}
should_run: ${{ steps.changes.outputs.should_run }}
labels: ${{ github.event.pull_request.labels }}
run_id: ${{ github.run_id }}
gradio_version: ${{ steps.gradio_version.outputs.gradio_version }}
- name: cat json #remove
run: cat output.json
shell: bash
- name: upload JSON
uses: actions/upload-artifact@v4
with:
name: output.json
path: output.json
- name: set outputs
id: pr
uses: gradio-app/github/actions/json_to_outputs@main
with:
json: output.json
- name: echo outputs #remove
run: echo ${{ toJson(steps.pr.outputs) }}
shell: bash

View File

@ -1,28 +1,28 @@
name: 'install all deps'
description: 'Install all deps'
name: "install all deps"
description: "Install all deps"
inputs:
always_install_pnpm:
description: 'Dictates whether or not we should install pnpm & dependencies, regardless of the cache'
default: 'false'
description: "Dictates whether or not we should install pnpm & dependencies, regardless of the cache"
default: "false"
skip_build:
description: 'Skip build'
default: 'false'
description: "Skip build"
default: "false"
build_lite:
description: 'Build lite'
default: 'false'
description: "Build lite"
default: "false"
test:
description: 'Test'
default: 'false'
description: "Test"
default: "false"
python_version:
description: 'Python version'
default: '3.8'
description: "Python version"
default: "3.8"
os:
description: 'OS'
default: 'ubuntu-latest'
description: "OS"
default: "ubuntu-latest"
outputs:
venv_activate:
description: 'Venv activate'
description: "Venv activate"
value: ${{ steps.venv.outputs.venv_activate }}
runs:

View File

@ -1,16 +1,16 @@
name: 'install frontend'
description: 'Install frontend deps'
name: "install frontend"
description: "Install frontend deps"
inputs:
always_install_pnpm:
description: 'Dictates whether or not we should install pnpm & dependencies, regardless of the cache'
default: 'false'
description: "Dictates whether or not we should install pnpm & dependencies, regardless of the cache"
default: "false"
skip_build:
description: 'Skip build'
default: 'false'
description: "Skip build"
default: "false"
build_lite:
description: 'Build lite'
default: 'false'
description: "Build lite"
default: "false"
runs:
using: "composite"

51
.github/filters.json vendored Normal file
View File

@ -0,0 +1,51 @@
{
"gradio": [
"client/python/**",
"gradio/**",
"requirements.txt",
".github/**",
"scripts/**",
"test/**"
],
"js": [
"js/**",
"client/js/**",
".github/**",
"package.json",
"pnpm-lock.yaml",
"tsconfig.json",
".config/**"
],
"functional": [
".github/**",
"client/**",
"demo/**",
"gradio/**",
"js/**",
"scripts/**",
"globals.d.ts",
"package.json",
"pnpm-lock.yaml",
"pyproject.toml",
"requirements.txt",
".config/**"
],
"visual": [
".github/workflows/deploy-chromatic.yml",
"js!(/_website)/**",
"package.json"
],
"website": [
"js/_website/**",
"package.json",
"pnpm-lock.yaml",
"guides/**",
"README.md",
"CHANGELOG.md",
"gradio/**",
"client/**",
"demo/**",
".github/deploy-website.yml"
]
}

View File

@ -22,6 +22,7 @@ on:
jobs:
comment:
environment: comment_pr
concurrency:
group: ${{inputs.pr_number || inputs.tag}}
runs-on: ubuntu-latest

View File

@ -1,35 +1,36 @@
# safe runs from main
name: Delete Stale Spaces
on:
schedule:
- cron: '0 0 * * *'
- cron: "0 0 * * *"
workflow_dispatch:
inputs:
daysStale:
description: 'How stale a space needs to be to be deleted (days)'
description: "How stale a space needs to be to be deleted (days)"
required: true
default: '7'
default: "7"
jobs:
delete-old-spaces:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.9'
- name: Install pip
run: python -m pip install pip wheel requests
- name: Install Hub Client Library
run: pip install huggingface-hub==0.9.1
- name: Set daysStale
env:
DEFAULT_DAYS_STALE: '7'
run: echo "DAYS_STALE=${{ github.event.inputs.daysStale || env.DEFAULT_DAYS_STALE }}" >> $GITHUB_ENV
- name: Find and delete stale spaces
run: |
python scripts/delete_old_spaces.py $DAYS_STALE \
gradio-pr-deploys \
${{ secrets.SPACES_DEPLOY_TOKEN }}
- uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: Install pip
run: python -m pip install pip wheel requests
- name: Install Hub Client Library
run: pip install huggingface-hub==0.9.1
- name: Set daysStale
env:
DEFAULT_DAYS_STALE: "7"
run: echo "DAYS_STALE=${{ github.event.inputs.daysStale || env.DEFAULT_DAYS_STALE }}" >> $GITHUB_ENV
- name: Find and delete stale spaces
run: |
python scripts/delete_old_spaces.py $DAYS_STALE \
gradio-pr-deploys \
${{ secrets.SPACES_DEPLOY_TOKEN }}

View File

@ -1,176 +0,0 @@
name: "deploy / spaces"
on:
workflow_dispatch:
workflow_run:
workflows: ["trigger"]
types:
- requested
permissions:
statuses: write
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
cancel-in-progress: true
jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
merge_sha: ${{ steps.changes.outputs.merge_sha }}
mergeable: ${{ steps.changes.outputs.mergeable }}
found_pr: ${{ steps.changes.outputs.found_pr }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
type: "functional"
name: "deploy / spaces"
token: ${{ secrets.GITHUB_TOKEN }}
commit_status: false
comment-spaces-start:
needs: changes
uses: "./.github/workflows/comment-queue.yml"
if: ${{ needs.changes.outputs.should_run == 'true' }}
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: spaces~pending~null
deploy-spaces:
outputs:
space_url: ${{ steps.upload-demo.outputs.SPACE_URL }}
gradio_version: ${{ steps.get_gradio_version.outputs.gradio_version }}
js_tarball_url: ${{ steps.upload_js_tarball.outputs.js_tarball_url }}
needs: changes
if: ${{ needs.changes.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.changes.outputs.merge_sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
always_install_pnpm: true
python_version: '3.9'
build_lite: 'true'
- name: Package Lite NPM package
working-directory: js/lite
run: pnpm pack --pack-destination .
- name: Upload Lite NPM package
uses: actions/upload-artifact@v4
with:
name: gradio-lite-${{ github.sha }}
path: js/lite/gradio-lite-*.tgz
- name: Install pip
run: python -m pip install build requests
- name: Get Gradio Version
id: get_gradio_version
run: |
if ${{ github.event_name == 'pull_request' || github.event.workflow_run.event == '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
else
echo "GRADIO_VERSION=$(python -c 'import json; print(json.load(open("gradio/package.json"))["version"])')" >> $GITHUB_OUTPUT
fi
- name: Build pr package
run: |
python -c 'import json; j = json.load(open("gradio/package.json")); j["version"] = "${{ steps.get_gradio_version.outputs.GRADIO_VERSION }}"; json.dump(j, open("gradio/package.json", "w"))'
python3 -m build -w
- name: Set up Demos
run: |
python scripts/copy_demos.py https://gradio-builds.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/gradio-${{ steps.get_gradio_version.outputs.GRADIO_VERSION }}-py3-none-any.whl \
"gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python"
- name: Upload wheel
run: |
export AWS_ACCESS_KEY_ID=${{ secrets.PR_DEPLOY_KEY }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.PR_DEPLOY_SECRET }}
export AWS_DEFAULT_REGION=us-east-1
aws s3 cp dist/gradio-${{ steps.get_gradio_version.outputs.GRADIO_VERSION }}-py3-none-any.whl s3://gradio-builds/${{ needs.changes.outputs.sha }}/
- name: Create and Upload JS Client Tarball to S3
id: upload_js_tarball
continue-on-error: true
run: |
cd client/js
tarball_name=$(npm pack)
export AWS_ACCESS_KEY_ID=${{ secrets.PR_DEPLOY_KEY }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.PR_DEPLOY_SECRET }}
export AWS_DEFAULT_REGION=us-east-1
aws s3 cp $tarball_name s3://gradio-builds/${{ needs.changes.outputs.sha }}/$tarball_name
echo "js_tarball_url=https://gradio-builds.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/$tarball_name" >> $GITHUB_OUTPUT
- name: Install Hub Client Library
run: pip install huggingface-hub==0.23.2
# temporary, but ensures the script cannot be modified in a PR
- name: Get deploy scripts
run: |
curl https://raw.githubusercontent.com/gradio-app/gradio/main/scripts/upload_demo_to_space.py -o scripts/upload_demo_to_space.py
curl https://raw.githubusercontent.com/gradio-app/gradio/main/scripts/upload_website_demos.py -o scripts/upload_website_demos.py
- name: Upload demo to spaces
if: github.event.workflow_run.event == 'pull_request'
id: upload-demo
run: |
python scripts/upload_demo_to_space.py all_demos \
gradio-pr-deploys/pr-${{ needs.changes.outputs.pr_number }}-all-demos \
${{ secrets.SPACES_DEPLOY_TOKEN }} \
--gradio-version ${{ steps.get_gradio_version.outputs.GRADIO_VERSION }} > url.txt
echo "SPACE_URL=$(cat url.txt)" >> $GITHUB_OUTPUT
- name: Upload Website Demos
if: github.event_name == 'workflow_dispatch'
id: upload-website-demos
run: |
python scripts/upload_website_demos.py --AUTH_TOKEN ${{ secrets.WEBSITE_SPACES_DEPLOY_TOKEN }} \
--WHEEL_URL https://gradio-builds.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/ \
--CLIENT_URL "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python" \
--GRADIO_VERSION ${{ steps.get_gradio_version.outputs.GRADIO_VERSION }}
- name: log
run: |
echo ${{github.event.workflow_run.event }}
echo ${{ github.event.workflow_run.conclusion }}
comment-spaces-success:
uses: "./.github/workflows/comment-queue.yml"
needs: [deploy-spaces, changes]
if: needs.deploy-spaces.result == 'success' && needs.changes.outputs.found_pr == 'true'
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: spaces~success~${{ needs.deploy-spaces.outputs.space_url }}
additional_text: |
**Install Gradio from this PR**
```bash
pip install https://gradio-builds.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/gradio-${{ needs.deploy-spaces.outputs.gradio_version }}-py3-none-any.whl
```
**Install Gradio Python Client from this PR**
```bash
pip install "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python"
```
**Install Gradio JS Client from this PR**
```bash
npm install ${{ needs.deploy-spaces.outputs.js_tarball_url }}
```
comment-spaces-failure:
uses: "./.github/workflows/comment-queue.yml"
needs: [deploy-spaces, changes]
if: always() && needs.deploy-spaces == 'failure' && needs.changes.outputs.found_pr == 'true'
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: spaces~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/

View File

@ -16,6 +16,7 @@ concurrency:
jobs:
get-pr:
runs-on: ubuntu-latest
if: github.event.workflow_run.conclusion == 'success'
outputs:
found_pr: ${{ steps.pr_details.outputs.found_pr }}
@ -23,11 +24,11 @@ jobs:
source_repo: ${{ steps.pr_details.outputs.source_repo }}
source_branch: ${{ steps.pr_details.outputs.source_branch }}
steps:
- name: get pr details
id: pr_details
uses: gradio-app/github/actions/find-pr@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: get pr details
id: pr_details
uses: gradio-app/github/actions/find-pr@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
comment-changes-start:
uses: "./.github/workflows/comment-queue.yml"
needs: get-pr
@ -37,6 +38,8 @@ jobs:
pr_number: ${{ needs.get-pr.outputs.pr_number }}
message: changes~pending~null
version:
environment: comment_pr
permissions: write-all
name: static checks
needs: get-pr
@ -55,7 +58,7 @@ jobs:
- name: generate changeset
id: version
uses: "gradio-app/github/actions/generate-changeset@main"
with:
with:
github_token: ${{ secrets.COMMENT_TOKEN }}
main_pkg: gradio
pr_number: ${{ needs.get-pr.outputs.pr_number }}

92
.github/workflows/previews-build.yml vendored Normal file
View File

@ -0,0 +1,92 @@
name: "storybook-build"
on:
pull_request:
push:
branches:
- main
- 5.0-dev
env:
CI: true
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
NODE_OPTIONS: "--max-old-space-size=4096"
concurrency:
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
gradio_version: ${{ steps.changes.outputs.gradio_version }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
filter: "visual"
token: ${{ secrets.GITHUB_TOKEN }}
test:
name: test
runs-on: ubuntu-22.04
needs: changes
if: needs.changes.outputs.should_run == 'true'
steps:
- uses: actions/checkout@v4
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
always_install_pnpm: true
python_version: "3.9"
build_lite: "true"
- name: Package Lite NPM package
working-directory: js/lite
run: pnpm pack --pack-destination .
- name: Upload Lite NPM package
uses: actions/upload-artifact@v4
with:
name: gradio-lite-${{ github.sha }}
path: js/lite/gradio-lite-*.tgz
- name: Build pr package
run: |
python -c 'import json; j = json.load(open("gradio/package.json")); j["version"] = "${{ needs.changes.outputs.gradio_version }}"; json.dump(j, open("gradio/package.json", "w"))'
python3 -m build -w
- name: Upload Python package
uses: actions/upload-artifact@v4
with:
name: gradio-build
path: dist/gradio-${{ needs.changes.outputs.gradio_version }}-py3-none-any.whl
- name: copy demos
uses: gradio-app/gradio/.github/actions/copy-demos@main
with:
gradio_version: "https://gradio-builds.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/gradio-${{ needs.changes.outputs.gradio_version }}-py3-none-any.whl"
gradio_client_version: "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python"
- name: upload demos
uses: actions/upload-artifact@v4
with:
name: demos
path: demos/all_demos
- name: Create JS client tarball
id: create_js_tarball
continue-on-error: true
run: |
cd client/js
tarball_name=$(npm pack)
echo "tarball_name=client/js/$tarball_name" >> $GITHUB_OUTPUT
- name: Upload JS client tarball artifact
uses: actions/upload-artifact@v4
with:
name: js-client-tarball
path: ${{ steps.create_js_tarball.outputs.tarball_name }}
- name: upload storybook
uses: actions/upload-artifact@v4
with:
name: storybook-static
path: storybook-static

153
.github/workflows/previews-deploy.yml vendored Normal file
View File

@ -0,0 +1,153 @@
name: "deploy / spaces"
on:
workflow_dispatch:
workflow_run:
workflows: ["trigger"]
types:
- requested
permissions:
statuses: write
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
cancel-in-progress: true
jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
gradio_version: ${{ steps.changes.outputs.gradio_version }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
filter: "functional"
token: ${{ secrets.GITHUB_TOKEN }}
comment-spaces-start:
needs: changes
uses: "./.github/workflows/comment-queue.yml"
if: ${{ needs.changes.outputs.should_run == 'true' }}
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: spaces~pending~null
deploy-spaces:
environment: deploy_spaces
outputs:
space_url: ${{ steps.upload-demo.outputs.SPACE_URL }}
js_tarball_url: ${{ steps.upload_js_tarball.outputs.js_tarball_url }}
needs: changes
if: ${{ needs.changes.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
- name: list artifacts
run: ls -R .
- name: Set wheel name
id: set_wheel_name
run: |
wheel_file=$(find ./gradio-build -maxdepth 1 -type f -name "*.whl" -print -quit)
echo "wheel_name=$wheel_file" >> $GITHUB_OUTPUT
- name: Upload wheel
run: |
export AWS_ACCESS_KEY_ID=${{ secrets.PR_DEPLOY_KEY }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.PR_DEPLOY_SECRET }}
export AWS_DEFAULT_REGION=us-east-1
aws s3 cp ${{ steps.set_wheel_name.outputs.wheel_name}}-py3-none-any.whl s3://gradio-pypi-previews/${{ needs.changes.outputs.sha }}/
- name: Set tarball name
id: set_tarball_name
run: |
tar_gz_file=$(find ./js-client-tarball -maxdepth 1 -type f -name "*.tgz" -print -quit)
echo "tarball_name=$tar_gz_file" >> $GITHUB_OUTPUT
- name: Upload JS Client Tarball to S3
id: upload_js_tarball
continue-on-error: true
run: |
export AWS_ACCESS_KEY_ID=${{ secrets.PR_DEPLOY_KEY }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.PR_DEPLOY_SECRET }}
export AWS_DEFAULT_REGION=us-east-1
aws s3 cp $tarball_name s3://gradio-npm-previews/${{ needs.changes.outputs.sha }}/${{ steps.set_tarball_name.outputs.tarball_name }}
echo "js_tarball_url=https://gradio-npm-previews.s3.amazonaws.com/${{ steps.set_tarball_name.outputs.tarball_name }}" >> $GITHUB_OUTPUT
- name: Install Hub Client Library
run: pip install huggingface-hub==0.23.2
# temporary, but ensures the script cannot be modified in a PR
- name: Get deploy scripts
run: |
curl https://raw.githubusercontent.com/gradio-app/gradio/main/scripts/upload_demo_to_space.py -o scripts/upload_demo_to_space.py
curl https://raw.githubusercontent.com/gradio-app/gradio/main/scripts/upload_website_demos.py -o scripts/upload_website_demos.py
# safe, pulls from main branch
- name: Upload demo to spaces
if: github.event.workflow_run.event == 'pull_request'
id: upload-demo
run: |
python scripts/upload_demo_to_space.py all_demos \
gradio-pr-deploys/pr-${{ needs.changes.outputs.pr_number }}-all-demos \
${{ secrets.SPACES_DEPLOY_TOKEN }} \
--gradio-version ${{ needs.changes.outputs.gradio_version }} > url.txt
echo "SPACE_URL=$(cat url.txt)" >> $GITHUB_OUTPUT
# safe, pulls from main branch
- name: Upload Website Demos
if: github.event_name == 'workflow_dispatch'
id: upload-website-demos
run: |
python scripts/upload_website_demos.py --AUTH_TOKEN ${{ secrets.WEBSITE_SPACES_DEPLOY_TOKEN }} \
--WHEEL_URL https://gradio-builds.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/ \
--CLIENT_URL "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python" \
--GRADIO_VERSION ${{ needs.changes.outputs.gradio_version }}
- name: log
run: |
echo ${{github.event.workflow_run.event }}
echo ${{ github.event.workflow_run.conclusion }}
- name: log context
run: |
echo ${{ toJson(github) }}
comment-spaces-success:
uses: "./.github/workflows/comment-queue.yml"
needs: [deploy-spaces, changes]
if: needs.deploy-spaces.result == 'success'
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: spaces~success~${{ needs.deploy-spaces.outputs.space_url }}
additional_text: |
**Install Gradio from this PR**
```bash
pip install https://gradio-pypi-previews.s3.amazonaws.com/${{ needs.changes.outputs.sha }}/gradio-${{ needs.changes.outputs.gradio_version }}-py3-none-any.whl
```
**Install Gradio Python Client from this PR**
```bash
pip install "gradio-client @ git+https://github.com/gradio-app/gradio@${{ needs.changes.outputs.sha }}#subdirectory=client/python"
```
**Install Gradio JS Client from this PR**
```bash
npm install ${{ needs.deploy-spaces.outputs.js_tarball_url }}
```
comment-spaces-failure:
uses: "./.github/workflows/comment-queue.yml"
needs: [deploy-spaces, changes]
if: always() && needs.deploy-spaces == 'failure'
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: spaces~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/

View File

@ -1,3 +1,5 @@
# safe runs from main
name: publish
on:
push:
@ -11,6 +13,7 @@ env:
jobs:
version_or_publish:
runs-on: ubuntu-22.04
environment: publish
steps:
- name: checkout repo
uses: actions/checkout@v4
@ -21,7 +24,7 @@ jobs:
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
always_install_pnpm: true
skip_build: 'false'
skip_build: "false"
- name: Build packages
run: |
. venv/bin/activate
@ -36,8 +39,8 @@ jobs:
title: "chore: update versions"
publish: pnpm ci:publish
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }}
- name: add label to skip chromatic build
if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }}
@ -61,8 +64,8 @@ jobs:
if: steps.changesets.outputs.hasChangesets != 'true'
uses: "gradio-app/github/actions/publish-pypi@main"
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWSACCESSKEYID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWSSECRETKEY }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_AWS_S3_BUCKET_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_AWS_S3_BUCKET_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-west-2
with:
user: __token__

56
.github/workflows/storybook-build.yml vendored Normal file
View File

@ -0,0 +1,56 @@
name: "storybook-build"
on:
pull_request:
push:
branches:
- main
- 5.0-dev
env:
CI: true
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
NODE_OPTIONS: "--max-old-space-size=4096"
concurrency:
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
filter: "visual"
token: ${{ secrets.GITHUB_TOKEN }}
test:
name: test
runs-on: ubuntu-22.04
needs: changes
if: needs.changes.outputs.should_run == 'true'
steps:
- uses: actions/checkout@v4
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
always_install_pnpm: true
skip_build: "true"
- name: build client
run: pnpm --filter @gradio/client build
- name: generate theme.css
run: |
. venv/bin/activate
python scripts/generate_theme.py --outfile js/storybook/theme.css
- name: build storybook
run: pnpm build-storybook --quiet
- name: upload storybook
uses: actions/upload-artifact@v4
with:
name: storybook-static
path: storybook-static

View File

@ -2,15 +2,11 @@ name: "test / visual"
on:
workflow_run:
workflows: ["trigger"]
types:
workflows: ["storybook-build"]
types:
- requested
permissions:
statuses: write
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
cancel-in-progress: true
@ -18,22 +14,28 @@ jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
permissions:
actions: read
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
labels: ${{ steps.changes.outputs.labels }}
mergeable: ${{ steps.changes.outputs.mergeable }}
should_run: ${{ steps.json.outputs.should_run }}
sha: ${{ steps.json.outputs.sha }}
pr_number: ${{ steps.json.outputs.pr_number }}
source_branch: ${{ steps.json.outputs.source_branch }}
source_repo: ${{ steps.json.outputs.source_repo }}
labels: ${{ steps.json.outputs.labels }}
run_id: ${{ steps.json.outputs.run_id }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
- name: Download artifact
uses: actions/download-artifact@v4
with:
type: "visual"
token: ${{ secrets.GITHUB_TOKEN }}
name: "UI Tests"
name: artifact-dir
path: different_dir
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
- uses: gradio-app/github/actions/json-to-output@main
id: json
with:
path: output.json
comment-chromatic-start:
uses: "./.github/workflows/comment-queue.yml"
needs: changes
@ -44,7 +46,20 @@ jobs:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: |
storybook~pending~null
update-status:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.should_run == 'false' || github.repository == 'gradio-app/gradio' || contains(needs.changes.outputs.labels, 'no-visual-update') }}
steps:
- name: update status
uses: gradio-app/github/actions/set-commit-status@main
with:
sha: ${{ needs.changes.outputs.sha }}
token: ${{ secrets.GITHUB_TOKEN }}
name: "storybook"
run_id: ${{ needs.changes.outputs.run_id }}
test-visual:
environment: storybook
name: "test-visual"
needs: changes
if: ${{ needs.changes.outputs.should_run == 'true' && github.repository == 'gradio-app/gradio' && !contains(needs.changes.outputs.labels, 'no-visual-update') }}
@ -54,34 +69,26 @@ jobs:
errors: ${{ steps.publish-chromatic.outputs.errorCount }}
storybook_url: ${{ steps.publish-chromatic.outputs.storybookUrl }}
build_url: ${{ steps.publish-chromatic.outputs.buildUrl }}
permissions:
actions: read
steps:
- uses: actions/checkout@v4
- name: dowload storybook artifacts
uses: actions/download-artifact@v4
with:
fetch-depth: 0
ref: ${{ needs.changes.outputs.sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
always_install_pnpm: true
skip_build: 'true'
- name: build client
run: pnpm --filter @gradio/client build
- name: generate theme.css
run: |
. venv/bin/activate
python scripts/generate_theme.py --outfile js/storybook/theme.css
- name: build storybook
run: pnpm build-storybook --quiet
name: storybook-static
path: storybook-static
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: publish to chromatic
id: publish-chromatic
uses: chromaui/action@v11
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.COMMIT_STATUS }}
onlyChanged: true
exitOnceUploaded: true
storybookBuildDir: storybook-static
comment-chromatic-end:
uses: "./.github/workflows/comment-queue.yml"
needs: [test-visual, changes]
@ -91,7 +98,7 @@ jobs:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: |
storybook~success~${{ needs.test-visual.outputs.storybook_url }}
comment-chromatic-fail:
uses: "./.github/workflows/comment-queue.yml"
needs: [test-visual, changes]
@ -102,8 +109,6 @@ jobs:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: |
storybook~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/
# visual~success~${{ needs.chromatic-deployment.outputs.changes }}~${{ needs.chromatic-deployment.outputs.errors }}~${{ needs.chromatic-deployment.outputs.build_url }}

View File

@ -1,17 +1,14 @@
name: "test / functional"
name: "functional"
on:
workflow_run:
workflows: ["trigger"]
types:
- requested
permissions:
statuses: write
pull_request:
push:
branches:
- main
- 5.0-dev
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
jobs:
@ -21,30 +18,23 @@ jobs:
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
merge_sha: ${{ steps.changes.outputs.merge_sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
mergeable: ${{ steps.changes.outputs.mergeable }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
type: "functional"
filter: "functional"
token: ${{ secrets.GITHUB_TOKEN }}
test-functional:
name: "test-functional"
test:
name: "test"
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.should_run == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.changes.outputs.merge_sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: install dependencies
id: install_deps
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
@ -92,14 +82,3 @@ jobs:
export LITE_APP_LOAD_TIME=$(jq -r '.app_load_time' .lite-perf.json)
echo "LITE_APP_LOAD_TIME=$LITE_APP_LOAD_TIME" >> $GITHUB_ENV
cat .lite-perf.json # For debugging
- name: do check
if: always()
uses: "gradio-app/github/actions/commit-status@main"
with:
type: "functional"
token: ${{ secrets.GITHUB_TOKEN }}
pr: ${{ needs.changes.outputs.pr_number }}
sha: ${{ needs.changes.outputs.sha }}
name: "test / functional"
result: ${{ job.status }}
job_id: "test-functional"

View File

@ -1,66 +1,30 @@
name: "test / hygiene"
name: "hygiene"
on:
workflow_run:
workflows: ["trigger"]
types:
- requested
permissions:
statuses: write
pull_request:
push:
branches:
- main
- 5.0-dev
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
jobs:
changes:
name: "changes"
test:
name: "test"
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
merge_sha: ${{ steps.changes.outputs.merge_sha }}
mergeable: ${{ steps.changes.outputs.mergeable }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
type: "all"
token: ${{ secrets.GITHUB_TOKEN }}
test-hygiene:
name: "test-hygiene"
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.should_run == 'true'
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.changes.outputs.merge_sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: Generate Notebooks
run: |
pip install nbformat && python scripts/generate_notebooks.py
- name: Print Git Status
run: echo $(git status) && echo $(git diff)
- name: Assert Notebooks Match
- name: Assert Notebooks Match
run: git status | grep "nothing to commit, working tree clean"
- name: Check for large files
uses: actionsdesk/lfs-warning@v3.3
with:
filesizelimit: 5MB
- name: do check
if: always()
uses: "gradio-app/github/actions/commit-status@main"
with:
type: "all"
token: ${{ secrets.GITHUB_TOKEN }}
pr: ${{ needs.changes.outputs.pr_number }}
sha: ${{ needs.changes.outputs.sha }}
name: "test / hygiene"
result: ${{ job.status }}
job_id: "test-hygiene"

View File

@ -1,94 +1,70 @@
name: "test / python"
name: "python"
on:
workflow_run:
workflows: ["trigger"]
types:
- requested
permissions:
statuses: write
pull_request:
push:
branches:
- main
- 5.0-dev
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
env:
NODE_OPTIONS: "--max-old-space-size=4096"
# this is a non-secret secret and provides read access to a set of spaces for testing purposes
# this secret has minimal permissions and only has access to things that can be made public
HF_TOKEN: ${{ secrets.HF_TOKEN }}
HF_TOKEN: ${{ vars.HF_TOKEN }}
jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
continue-on-error: true
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
merge_sha: ${{ steps.changes.outputs.merge_sha }}
labels: ${{ steps.changes.outputs.labels }}
mergeable: ${{ steps.changes.outputs.mergeable }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
type: "gradio"
name: "test / python / linux"
filter: "gradio"
token: ${{ secrets.GITHUB_TOKEN }}
test-python:
needs: [changes]
if: needs.changes.outputs.should_run == 'true'
test:
name: "test-python-${{ matrix.os }}-${{ matrix.test-type == 'flaky' && 'flaky' || 'not-flaky'}}"
needs: changes
if: needs.changes.outputs.should_run == 'true'
strategy:
matrix:
os: ["ubuntu-latest", "windows-latest"]
test-type: ["not flaky", "flaky"]
exclude:
- os: ${{ github.event.workflow_run.event == 'pull_request' && contains( needs.changes.outputs.labels, 'windows-tests') && 'dummy' || 'windows-latest' }}
- test-type: ${{ github.event.workflow_run.event == 'pull_request' && contains( needs.changes.outputs.labels, 'flaky-tests') && 'dummy' || 'flaky' }}
- os: ${{ github.event_name == 'pull_request' && contains( github.event.pull_request.labels.*.name, 'windows-tests') && 'dummy' || 'windows-latest' }}
- test-type: ${{ github.event_name == 'pull_request' && contains( github.event.pull_request.labels.*.name, 'flaky-tests') && 'dummy' || 'flaky' }}
runs-on: ${{ matrix.os }}
continue-on-error: true
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.changes.outputs.merge_sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: install dependencies
id: install_deps
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
python_version: "3.8"
os: ${{ matrix.os }}
test: true
- name: Lint
if: runner.os == 'Linux'
run: |
. venv/bin/activate
./scripts/lint_backend.sh
- name: Typecheck
if: runner.os == 'Linux'
run: |
. venv/bin/activate
./scripts/type_check_backend.sh
- name: Run tests
run: |
. ${{steps.install_deps.outputs.venv_activate}}
python -m pytest -m "${{ matrix.test-type }}"
- name: do check
if: always()
uses: "gradio-app/github/actions/commit-status@main"
with:
type: "gradio"
token: ${{ secrets.GITHUB_TOKEN }}
pr: ${{ needs.changes.outputs.pr_number }}
sha: ${{ needs.changes.outputs.sha }}
name: "test / python / ${{ matrix.os == 'ubuntu-latest' && 'linux' || 'windows'}}"
result: ${{ job.status }}
job_id: "test-python-${{ matrix.os }}-${{ matrix.test-type == 'flaky' && 'flaky' || 'not-flaky'}}"
- uses: actions/checkout@v4
- name: install dependencies
id: install_deps
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
python_version: "3.8"
os: ${{ matrix.os }}
test: true
- name: Lint
if: runner.os == 'Linux'
run: |
. venv/bin/activate
./scripts/lint_backend.sh
- name: Typecheck
if: runner.os == 'Linux'
run: |
. venv/bin/activate
./scripts/type_check_backend.sh
- name: Run tests
run: |
. ${{steps.install_deps.outputs.venv_activate}}
python -m pytest -m "${{ matrix.test-type }}"

View File

@ -1,13 +1,11 @@
name: "test / js"
name: "js"
on:
workflow_run:
workflows: ["trigger"]
types:
- requested
permissions:
statuses: write
pull_request:
push:
branches:
- main
- 5.0-dev
env:
CI: true
@ -15,7 +13,7 @@ env:
NODE_OPTIONS: "--max-old-space-size=4096"
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
jobs:
@ -25,28 +23,23 @@ jobs:
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
merge_sha: ${{ steps.changes.outputs.merge_sha }}
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
mergeable: ${{ steps.changes.outputs.mergeable }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
type: "js"
filter: "js"
token: ${{ secrets.GITHUB_TOKEN }}
test-js:
test:
name: test
runs-on: ubuntu-22.04
needs: changes
if: needs.changes.outputs.should_run == 'true'
name: test-js
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.changes.outputs.merge_sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-frontend-deps@main"
with:
@ -65,14 +58,3 @@ jobs:
run: pnpm test:run
- name: client tests
run: pnpm --filter @gradio/client test
- name: do check
if: always()
uses: "gradio-app/github/actions/commit-status@main"
with:
type: "js"
token: ${{ secrets.GITHUB_TOKEN }}
pr: ${{ needs.changes.outputs.pr_number }}
sha: ${{ needs.changes.outputs.sha }}
name: "test / js"
result: ${{ job.status }}
job_id: "test-js"

View File

@ -7,7 +7,6 @@ on:
issue_comment:
types: [edited]
jobs:
changeset:
permissions: write-all

View File

@ -1,19 +0,0 @@
name: trigger
on:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]
branches:
- main
- 5.0-dev
push:
branches:
- main
- 5.0-dev
jobs:
checks:
permissions: write-all
runs-on: ubuntu-22.04
if: github.event.sender.login != 'gradio-pr-bot'
steps:
- run: echo "Requesting checks"

68
.github/workflows/website-build.yml vendored Normal file
View File

@ -0,0 +1,68 @@
name: "website-build"
on:
pull_request:
push:
branches:
- main
- 5.0-dev
env:
CI: true
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
NODE_OPTIONS: "--max-old-space-size=4096"
concurrency:
group: "${{ github.event.pull_request.number }}-${{ github.ref_name }}-${{ github.workflow }}"
cancel-in-progress: true
jobs:
changes:
name: "changes"
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.changes.outputs.should_run }}
sha: ${{ steps.changes.outputs.sha }}
gradio_version: ${{ steps.changes.outputs.gradio_version }}
steps:
- uses: actions/checkout@v4
- uses: "gradio-app/gradio/.github/actions/changes@main"
id: changes
with:
filter: "website"
token: ${{ secrets.GITHUB_TOKEN }}
test:
name: test
runs-on: ubuntu-22.04
needs: changes
if: needs.changes.outputs.should_run == 'true'
steps:
- uses: actions/checkout@v4
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
with:
always_install_pnpm: true
skip_build: true
# unsafe - pr could have modified the build script
- name: build client
run: pnpm --filter @gradio/client build
- name: build website
run: pnpm --filter @gradio/website build
- name: upload website artifacts
uses: actions/upload-artifact@v4
with:
name: website
path: js/_website/.vercel
- name: upload website json artifacts
uses: actions/upload-artifact@v4
with:
name: website-json
path: js/_website/src/lib/json
- name: upload website json templates
uses: actions/upload-artifact@v4
with:
name: website-templates
path: js/_website/src/lib/templates

View File

@ -3,7 +3,7 @@ name: "deploy / website"
on:
workflow_run:
workflows: ["trigger"]
types:
types:
- requested
permissions:
@ -12,7 +12,6 @@ permissions:
concurrency:
group: "${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}-${{ github.workflow_ref }}"
cancel-in-progress: true
# these variables are not secret and are used to identify the Vercel project
env:
@ -30,7 +29,6 @@ jobs:
pr_number: ${{ steps.changes.outputs.pr_number }}
source_branch: ${{ steps.changes.outputs.source_branch }}
source_repo: ${{ steps.changes.outputs.source_repo }}
found_pr: ${{ steps.changes.outputs.found_pr }}
mergeable: ${{ steps.changes.outputs.mergeable }}
steps:
- uses: actions/checkout@v4
@ -49,68 +47,69 @@ jobs:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: website~pending~null
deploy-website:
environment: deploy_website
name: "deploy-website"
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.should_run == 'true'
outputs:
vercel_url: ${{ steps.output_url.outputs.vercel_url }}
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
ref: ${{ needs.changes.outputs.merge_sha }}
repository: ${{ needs.changes.outputs.mergeable == 'true' && github.repository || needs.changes.outputs.source_repo }}
- name: install dependencies
uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
name: website-json
path: js/_website/lib/json
- uses: actions/download-artifact@v4
with:
always_install_pnpm: true
skip_build: true
- name: build client
run: pnpm --filter @gradio/client build
name: website-templates
path: js/_website/lib/templates
- name: deploy json to aws
if: startsWith(needs.changes.outputs.source_branch, 'changeset-release/') && needs.changes.outputs.source_repo == 'gradio-app/gradio'
run: |
export AWS_ACCESS_KEY_ID=${{ secrets.AWSACCESSKEYID }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.AWSSECRETKEY }}
export AWS_ACCESS_KEY_ID=${{ secrets.DOCS_JSON_AWS_S3_ACCESS_KEY }}
export AWS_SECRET_ACCESS_KEY=${{ secrets.DOCS_JSON_AWS_S3_SECRET_ACCESS_KEY }}
export AWS_DEFAULT_REGION=us-west-2
version=$(jq -r .version js/_website/src/lib/json/version.json)
aws s3 cp ./js/_website/src/lib/json/ s3://gradio-docs-json/$version/ --recursive
aws s3 cp ./js/_website/src/lib/templates/ s3://gradio-docs-json/$version/templates/ --recursive
- name: Install Vercel CLI
run: pnpm install --global vercel@latest
version=$(jq -r .version js/_website/lib/json/version.json)
aws s3 cp ./js/_website/lib/json/ s3://gradio-docs-json/$version/ --recursive
aws s3 cp ./js/_website/lib/templates/ s3://gradio-docs-json/$version/templates/ --recursive
- name: download website artifacts
uses: actions/download-artifact@v4
with:
name: website
path: js/_website/.vercel
# preview
- name: Pull Vercel Environment Information
shell: bash
if: needs.changes.outputs.found_pr == 'true'
run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
if: needs.changes.outputs.found_pr == 'true'
shell: bash
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
if: needs.changes.outputs.pr_number != 'false'
run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_DEPLOY_TOKEN }} --cwd js/_website
- name: Deploy Project Artifacts to Vercel
if: needs.changes.outputs.found_pr == 'true'
if: needs.changes.outputs.pr_number != 'true'
id: output_url
shell: bash
run: echo "vercel_url=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_OUTPUT
# production
run: echo "vercel_url=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_DEPLOY_TOKEN }} --cwd js/_website)" >> $GITHUB_OUTPUT
# production
- name: Pull Vercel Environment Information
if: needs.changes.outputs.source_repo == 'gradio-app/gradio' && needs.changes.outputs.source_branch == 'main'
shell: bash
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
if: needs.changes.outputs.source_repo == 'gradio-app/gradio' && needs.changes.outputs.source_branch == 'main'
shell: bash
run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_DEPLOY_TOKEN }} --cwd js/_website
- name: Deploy Project Artifacts to Vercel
if: needs.changes.outputs.source_repo == 'gradio-app/gradio' && needs.changes.outputs.source_branch == 'main'
shell: bash
run: echo "VERCEL_URL=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }})" >> $GITHUB_ENV
run: echo "VERCEL_URL=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_DEPLOY_TOKEN }})" --cwd js/_website >> $GITHUB_ENV
comment-deploy-success:
uses: "./.github/workflows/comment-queue.yml"
needs: [deploy-website, changes]
if: needs.deploy-website.result == 'success' && needs.changes.outputs.found_pr == 'true'
if: needs.deploy-website.result == 'success' && needs.changes.outputs.pr_number != 'false'
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
@ -119,10 +118,9 @@ jobs:
comment-deploy-failure:
uses: "./.github/workflows/comment-queue.yml"
needs: [deploy-website, changes]
if: always() && needs.deploy-website.result == 'failure' && needs.changes.outputs.found_pr == 'true'
if: always() && needs.deploy-website.result == 'failure' && needs.changes.outputs.pr_number != 'false'
secrets:
gh_token: ${{ secrets.COMMENT_TOKEN }}
with:
pr_number: ${{ needs.changes.outputs.pr_number }}
message: website~failure~https://github.com/gradio-app/gradio/actions/runs/${{github.run_id}}/

Binary file not shown.

View File

@ -11,15 +11,15 @@
"prepare": "svelte-kit sync"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.2.0",
"@sveltejs/adapter-static": "^3.0.1",
"@sveltejs/kit": "^2.5.7",
"@sveltejs/adapter-auto": "^3.2.2",
"@sveltejs/adapter-static": "^3.0.2",
"@sveltejs/kit": "^2.5.20",
"@tailwindcss/forms": "^0.5.0",
"@tailwindcss/typography": "^0.5.4",
"@types/prismjs": "^1.26.0",
"flexsearch": "^0.7.43",
"prismjs": "1.29.0",
"tailwindcss": "^3.1.6",
"flexsearch": "^0.7.43"
"tailwindcss": "^3.1.6"
},
"type": "module",
"dependencies": {

View File

@ -145,7 +145,7 @@
</a>
<a
href="/main/docs/third-party-clients"
href="./docs/third-party-clients"
target="_self"
class="shadow-alternate hover:scale-[1.02] group group relative flex flex-col overflow-hidden md:first:row-span-2 rounded-xl bg-gradient-to-r px-3 py-4 dark:border-gray-900 from-{data
.COLOR_SETS[3]}-50 hover:shadow-alternate to-white shadow-none transition-shadow dark:from-gray-850 dark:to-gray-950 dark:hover:from-gray-800"

View File

@ -1,7 +0,0 @@
import { redirect } from "@sveltejs/kit";
export function load({ params, url }) {
if (params?.version != "main") {
throw redirect(302, `/main` + url.pathname);
}
}

View File

@ -2,7 +2,10 @@ import { redirect } from "@sveltejs/kit";
export function load({ params }) {
if (params?.version)
throw redirect(302, `/main/docs/third-party-clients/introduction`);
throw redirect(
302,
`/${params?.version}/docs/third-party-clients/introduction`
);
throw redirect(302, `/main/docs/third-party-clients/introduction`);
throw redirect(302, `/docs/third-party-clients/introduction`);
}

View File

@ -6,7 +6,6 @@ export async function load({ params, parent }) {
const modules: any = import.meta.glob(
"/src/lib/templates*/third-party-clients/**/*.svx"
);
let name = params.doc;
let page_path: string | null = null;
@ -23,7 +22,6 @@ export async function load({ params, parent }) {
}
let version_append = on_main ? "/" : "_" + VERSION.replace(/\./g, "-") + "/";
let module;
for (const path in modules) {

View File

@ -173,7 +173,5 @@ export const redirects = {
"/docs/no-reload": "/docs/gradio/NO_RELOAD",
"/docs/python-client/python-client": "/docs/python-client/introduction",
"/docs/python-client/js-client": "/docs/js-client",
"/docs/gradio/interface#interface-queue": "/docs/gradio/interface",
"/docs/third-party-clients/introduction":
"/main/docs/third-party-clients/introduction"
"/docs/gradio/interface#interface-queue": "/docs/gradio/interface"
};

View File

@ -435,7 +435,7 @@ importers:
version: 2.2.0
'@sveltejs/adapter-vercel':
specifier: ^5.3.0
version: 5.3.0(@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))
version: 5.3.0(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))
hast-util-to-string:
specifier: ^3.0.0
version: 3.0.0
@ -450,14 +450,14 @@ importers:
version: 0.5.0
devDependencies:
'@sveltejs/adapter-auto':
specifier: ^3.2.0
version: 3.2.0(@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))
specifier: ^3.2.2
version: 3.2.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))
'@sveltejs/adapter-static':
specifier: ^3.0.1
version: 3.0.1(@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))
specifier: ^3.0.2
version: 3.0.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))
'@sveltejs/kit':
specifier: ^2.5.7
version: 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
specifier: ^2.5.20
version: 2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
'@tailwindcss/forms':
specifier: ^0.5.0
version: 0.5.0(tailwindcss@3.1.6(postcss@8.4.38))
@ -4391,13 +4391,13 @@ packages:
'@storybook/types@8.1.8':
resolution: {integrity: sha512-bWg6WkhnhkWBIu03lUKlX2eOYSjDzpzoulzLh1H4Tl1JReGed+cHbIpdIU6lke2aJyb2BNyzoyudUHKBBGaOzg==}
'@sveltejs/adapter-auto@3.2.0':
resolution: {integrity: sha512-She5nKT47kwHE18v9NMe6pbJcvULr82u0V3yZ0ej3n1laWKGgkgdEABE9/ak5iDPs93LqsBkuIo51kkwCLBjJA==}
'@sveltejs/adapter-auto@3.2.2':
resolution: {integrity: sha512-Mso5xPCA8zgcKrv+QioVlqMZkyUQ5MjDJiEPuG/Z7cV/5tmwV7LmcVWk5tZ+H0NCOV1x12AsoSpt/CwFwuVXMA==}
peerDependencies:
'@sveltejs/kit': ^2.0.0
'@sveltejs/adapter-static@3.0.1':
resolution: {integrity: sha512-6lMvf7xYEJ+oGeR5L8DFJJrowkefTK6ZgA4JiMqoClMkKq0s6yvsd3FZfCFvX1fQ0tpCD7fkuRVHsnUVgsHyNg==}
'@sveltejs/adapter-static@3.0.2':
resolution: {integrity: sha512-/EBFydZDwfwFfFEuF1vzUseBoRziwKP7AoHAwv+Ot3M084sE/HTVBHf9mCmXfdM9ijprY5YEugZjleflncX5fQ==}
peerDependencies:
'@sveltejs/kit': ^2.0.0
@ -4406,8 +4406,8 @@ packages:
peerDependencies:
'@sveltejs/kit': ^2.4.0
'@sveltejs/kit@2.5.7':
resolution: {integrity: sha512-6uedTzrb7nQrw6HALxnPrPaXdIN2jJJTzTIl96Z3P5NiG+OAfpdPbrWrvkJ3GN4CfWqrmU4dJqwMMRMTD/C7ow==}
'@sveltejs/kit@2.5.20':
resolution: {integrity: sha512-47rJ5BoYwURE/Rp7FNMLp3NzdbWC9DQ/PmKd0mebxT2D/PrPxZxcLImcD3zsWdX2iS6oJk8ITJbO/N2lWnnUqA==}
engines: {node: '>=18.13'}
hasBin: true
peerDependencies:
@ -6710,8 +6710,8 @@ packages:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
import-meta-resolve@4.0.0:
resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
import-meta-resolve@4.1.0:
resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
@ -12582,32 +12582,32 @@ snapshots:
'@types/express': 4.17.21
file-system-cache: 2.3.0
'@sveltejs/adapter-auto@3.2.0(@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))':
'@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))':
dependencies:
'@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
import-meta-resolve: 4.0.0
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
import-meta-resolve: 4.1.0
'@sveltejs/adapter-static@3.0.1(@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))':
'@sveltejs/adapter-static@3.0.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))':
dependencies:
'@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
'@sveltejs/adapter-vercel@5.3.0(@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))':
'@sveltejs/adapter-vercel@5.3.0(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))':
dependencies:
'@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
'@vercel/nft': 0.26.4
esbuild: 0.20.2
transitivePeerDependencies:
- encoding
- supports-color
'@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))':
'@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.11(@types/node@20.12.8)(lightningcss@1.24.1)(sass@1.66.1)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))
'@types/cookie': 0.6.0
cookie: 0.6.0
devalue: 5.0.0
esm-env: 1.0.0
import-meta-resolve: 4.0.0
import-meta-resolve: 4.1.0
kleur: 4.1.5
magic-string: 0.30.10
mrmime: 2.0.0
@ -15290,7 +15290,7 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
import-meta-resolve@4.0.0: {}
import-meta-resolve@4.1.0: {}
imurmurhash@0.1.4: {}