Migrate Skyvern to uv from poetry (#3554)

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: stas <stas@skyvern.com>
This commit is contained in:
Stanislav Novosad 2025-09-30 15:19:12 -06:00 committed by GitHub
parent 878ef36a36
commit d61179e132
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 17563 additions and 23282 deletions

View file

@ -21,8 +21,8 @@ echo "🔧 Running Devsy setup..."
# pip install -r requirements.txt
# pip install -r requirements-dev.txt
# pip install -e .
# poetry install
# pipenv install --dev
# uv sync
# uv sync --group dev
# ============================================================================
# NODE.JS / JAVASCRIPT / TYPESCRIPT PROJECTS

4
.github/sync.yml vendored
View file

@ -4,8 +4,8 @@ Skyvern-AI/skyvern-cloud:
deleteOrphaned: true
- source: pyproject.toml
dest: pyproject.toml
- source: poetry.lock
dest: poetry.lock
- source: uv.lock
dest: uv.lock
- source: setup.sh
dest: setup.sh
- source: .env.example

View file

@ -32,52 +32,38 @@ jobs:
- uses: actions/checkout@v3
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
# reference the matrixe python version here.
- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: "3.11"
# Cache the installation of Poetry itself, e.g. the next step. This prevents the workflow
# from installing Poetry every time, which can be slow. Note the use of the Poetry version
# number in the cache key, and the "-0" suffix: this allows you to invalidate the cache
# manually if/when you want to upgrade Poetry, or if something goes wrong. This could be
# mildly cleaner by using an environment variable, but I don't really care.
- name: cache poetry install
uses: actions/cache@v3
# Install uv (fast, single-file binary)
- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
# Cache uv's download/resolve cache to speed up CI (optional but nice)
- name: Cache uv global cache
uses: actions/cache@v4
with:
path: ~/.local
key: poetry-1.7.1
# Install Poetry. You could do this manually, or there are several actions that do this.
# `snok/install-poetry` seems to be minimal yet complete, and really just calls out to
# Poetry's default install script, which feels correct. I pin the Poetry version here
# because Poetry does occasionally change APIs between versions and I don't want my
# actions to break if it does.
#
# The key configuration value here is `virtualenvs-in-project: true`: this creates the
# venv as a `.venv` in your testing directory, which allows the next step to easily
# cache it.
- uses: snok/install-poetry@v1
with:
version: 1.7.1
virtualenvs-create: true
virtualenvs-in-project: true
# Cache your dependencies (i.e. all the stuff in your `pyproject.toml`). Note the cache
# key: if you're using multiple Python versions, or multiple OSes, you'd need to include
# them in the cache key. I'm not, so it can be simple and just depend on the poetry.lock.
- name: cache deps
id: cache-deps
uses: actions/cache@v3
path: ~/.cache/uv
key: uv-cache-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
# Cache the project virtualenv (keyed by Python version + lockfile)
- name: Cache venv
id: cache-venv
uses: actions/cache@v4
with:
path: .venv
key: pydeps-${{ hashFiles('**/poetry.lock') }}
# Install dependencies. `--no-root` means "install all dependencies but not the project
# itself", which is what you want to avoid caching _your_ code. The `if` statement
# ensures this only runs on a cache miss.
- run: poetry install --no-interaction --no-root
if: steps.cache-deps.outputs.cache-hit != 'true'
# Now install _your_ project. This isn't necessary for many types of projects -- particularly
# things like Django apps don't need this. But it's a good idea since it fully-exercises the
# pyproject.toml and makes that if you add things like console-scripts at some point that
# they'll be installed and working.
- run: poetry install --no-interaction
key: venv-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version || '3.11' }}-${{ hashFiles('**/uv.lock') }}
# Create/refresh the environment (installs main + dev groups)
- name: Sync deps with uv
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
uv lock
uv sync --group dev
# Ensure venv is current even on cache hit (cheap no-op if up to date)
- name: Ensure environment is up to date
if: steps.cache-venv.outputs.cache-hit == 'true'
run: |
uv sync --group dev
# Finally, run pre-commit.
- name: Run all pre-commit hooks
uses: pre-commit/action@v3.0.0
@ -102,14 +88,14 @@ jobs:
AZURE_GPT4O_MINI_API_VERSION: "dummy"
AWS_REGION: "us-east-1"
ENABLE_BEDROCK: "true"
run: poetry run ./run_alembic_check.sh
run: uv run ./run_alembic_check.sh
- name: trigger tests
env:
ENABLE_OPENAI: "true"
OPENAI_API_KEY: "sk-dummy"
AWS_ACCESS_KEY_ID: "dummy"
AWS_SECRET_ACCESS_KEY: "dummy"
run: poetry run pytest
run: uv run pytest
fe-lint-build:
name: Frontend Lint and Build
runs-on: ubuntu-latest

View file

@ -22,22 +22,23 @@ jobs:
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: "3.11"
- name: Install Project Dependencies
- name: Install uv
run: |
python -m pip install --upgrade pip
pip install poetry
poetry install --all-extras
poetry add codeflash
- name: create test dir
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Sync project dependencies
run: |
mkdir -p codeflash-tests
uv sync --group dev
- name: Install Codeflash into venv
run: |
uv pip install codeflash
- name: Create test dir
run: mkdir -p codeflash-tests
- name: Run Codeflash to optimize code
run: |
poetry env use python
poetry run codeflash
run: uv run codeflash
- name: remove test dir
run: |-
rm -rf codeflash-tests

View file

@ -45,58 +45,44 @@ jobs:
uses: actions/checkout@v4
# If you wanted to use multiple Python versions, you'd have specify a matrix in the job and
# reference the matrixe python version here.
- uses: actions/setup-python@v4
- name: Setup Python
id: setup-python
uses: actions/setup-python@v6
with:
python-version: "3.11"
# Cache the installation of Poetry itself, e.g. the next step. This prevents the workflow
# from installing Poetry every time, which can be slow. Note the use of the Poetry version
# number in the cache key, and the "-0" suffix: this allows you to invalidate the cache
# manually if/when you want to upgrade Poetry, or if something goes wrong. This could be
# mildly cleaner by using an environment variable, but I don't really care.
- name: cache poetry install
uses: actions/cache@v3
# Cache the installation of `uv` itself, e.g. the next step. This prevents the workflow
# from installing `uv` every time, which can be slow.
- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
# Cache uv's global cache (resolver/downloads) for speed
- name: Cache uv cache
uses: actions/cache@v4
with:
path: ~/.local
key: poetry-1.7.1
# Install Poetry. You could do this manually, or there are several actions that do this.
# `snok/install-poetry` seems to be minimal yet complete, and really just calls out to
# Poetry's default install script, which feels correct. I pin the Poetry version here
# because Poetry does occasionally change APIs between versions and I don't want my
# actions to break if it does.
#
# The key configuration value here is `virtualenvs-in-project: true`: this creates the
# venv as a `.venv` in your testing directory, which allows the next step to easily
# cache it.
- uses: snok/install-poetry@v1
with:
version: 1.7.1
virtualenvs-create: true
virtualenvs-in-project: true
# Cache your dependencies (i.e. all the stuff in your `pyproject.toml`). Note the cache
# key: if you're using multiple Python versions, or multiple OSes, you'd need to include
# them in the cache key. I'm not, so it can be simple and just depend on the poetry.lock.
- name: cache deps
id: cache-deps
uses: actions/cache@v3
path: ~/.cache/uv
key: uv-cache-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
# Cache the project venv (keyed by lockfile + Python)
- name: Cache venv
id: cache-venv
uses: actions/cache@v4
with:
path: .venv
key: pydeps-${{ hashFiles('**/poetry.lock') }}
# Install dependencies. `--no-root` means "install all dependencies but not the project
# itself", which is what you want to avoid caching _your_ code. The `if` statement
# ensures this only runs on a cache miss.
- run: poetry install --no-interaction --no-root
if: steps.cache-deps.outputs.cache-hit != 'true'
# Now install _your_ project. This isn't necessary for many types of projects -- particularly
# things like Django apps don't need this. But it's a good idea since it fully-exercises the
# pyproject.toml and makes that if you add things like console-scripts at some point that
# they'll be installed and working.
- run: poetry install --no-interaction
key: venv-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version || '3.11' }}-${{ hashFiles('**/uv.lock') }}
# Create/refresh environment. We install dev deps to get twine/build.
- name: Sync dependencies
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
uv sync --group dev
- name: Ensure environment is up to date (on cache hit)
if: steps.cache-venv.outputs.cache-hit == 'true'
run: uv sync --group dev
- name: Clean dist directory
run: rm -rf dist
- name: Build Package
run: poetry build
run: uv build
- name: Publish to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: poetry run twine upload --repository pypi dist/*
run: uv run twine upload --repository pypi dist/*

View file

@ -5,7 +5,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Development Commands
### Python Backend Commands
- **Install dependencies**: `poetry install`
- **Install dependencies**: `uv sync`
- **Run Skyvern service**: `skyvern run all` (starts both backend and UI)
- **Run backend only**: `skyvern run server`
- **Run UI only**: `skyvern run ui`
@ -67,7 +67,7 @@ Skyvern is a browser automation platform that uses LLMs and computer vision to i
### Environment Setup
- Requires Python 3.11+ and Node.js
- Uses Poetry for Python dependency management
- Uses UV for Python dependency management
- PostgreSQL database (managed via Docker or local install)
- Browser dependencies installed via Playwright

View file

@ -2,11 +2,11 @@ FROM python:3.11 AS requirements-stage
# Run `skyvern init llm` before building to generate the .env file
WORKDIR /tmp
RUN pip install poetry
RUN poetry self add poetry-plugin-export
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
&& ln -s /root/.local/bin/uv /usr/local/bin/uv
COPY ./pyproject.toml /tmp/pyproject.toml
COPY ./poetry.lock /tmp/poetry.lock
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
COPY ./uv.lock /tmp/uv.lock
RUN uv pip compile pyproject.toml -o requirements.txt --no-annotate --no-header
FROM python:3.11-slim-bookworm
WORKDIR /app

View file

@ -397,6 +397,19 @@ We love to see how Skyvern is being used in the wild. Here are some examples of
<img src="fern/images/geico_shu_recording_cropped.gif"/>
</p>
# Contributor Setup
Make sure to have [uv](https://docs.astral.sh/uv/getting-started/installation/) installed.
1. Run this to create your virtual environment (`.venv`)
```bash
uv sync --group dev
```
2. Perform initial server configuration
```bash
uv run skyvern quickstart
```
3. Navigate to `http://localhost:8080` in your browser to start using the UI
*The Skyvern CLI supports Windows, WSL, macOS, and Linux environments.*
# Documentation
More extensive documentation can be found on our [📕 docs page](https://docs.skyvern.com). Please let us know if something is unclear or missing by opening an issue or reaching out to us [via email](mailto:founders@skyvern.com) or [discord](https://discord.gg/fG2XXEuQX3).

File diff suppressed because it is too large Load diff

View file

@ -1,20 +1,25 @@
[tool.poetry]
[project]
name = "skyvern-langchain"
version = "0.2.0"
description = ""
authors = ["lawyzheng <lawy@skyvern.com>"]
packages = [{ include = "skyvern_langchain" }]
authors = [{ name = "lawyzheng", email = "lawy@skyvern.com" }]
requires-python = ">=3.11,<3.14"
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11,<3.14"
skyvern = ">=0.2.0"
langchain = "^0.3.19"
[tool.poetry.group.dev.dependencies]
twine = "^6.1.0"
dependencies = [
"skyvern>=0.2.0",
"langchain>=0.3.19,<0.4",
]
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
requires = ["hatchling"]
build-backend = "hatchling.build"
[dependency-groups]
dev = ["twine>=6.1.0,<7"]
[tool.hatch.build.targets.sdist]
include = ["skyvern_langchain"]
[tool.hatch.build.targets.wheel]
include = ["skyvern_langchain"]

5157
integrations/langchain/uv.lock generated Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,20 +1,24 @@
[tool.poetry]
[project]
name = "skyvern-llamaindex"
version = "0.2.1"
description = "Skyvern integration for LlamaIndex"
authors = ["lawyzheng <lawy@skyvern.com>"]
packages = [{ include = "skyvern_llamaindex" }]
authors = [{ name = "lawyzheng", email = "lawy@skyvern.com" }]
requires-python = ">=3.11,<3.14"
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11,<3.14"
skyvern = ">=0.2.0"
llama-index = "^0.12.19"
[tool.poetry.group.dev.dependencies]
twine = "^6.1.0"
dependencies = [
"skyvern>=0.2.0",
"llama-index>=0.12.19,<0.13",
]
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
requires = ["hatchling"]
build-backend = "hatchling.build"
[dependency-groups]
dev = ["twine>=6.1.0,<7"]
[tool.hatch.build.targets.sdist]
include = ["skyvern_llamaindex"]
[tool.hatch.build.targets.wheel]
include = ["skyvern_llamaindex"]

5534
integrations/llama_index/uv.lock generated Normal file

File diff suppressed because it is too large Load diff

10008
poetry.lock generated

File diff suppressed because one or more lines are too long

View file

@ -1,136 +1,150 @@
[tool.poetry]
[project]
name = "skyvern"
version = "0.2.6"
description = ""
authors = ["Skyvern AI <info@skyvern.com>"]
authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }]
requires-python = ">=3.11,<3.14"
readme = "README.md"
packages = [{ include = "skyvern" }, { include = "alembic" }]
dependencies = [
"azure-storage-blob>=12.26.0",
"python-dotenv>=1.0.0,<2",
"openai>=1.68.2",
"sqlalchemy[mypy]>=2.0.29,<3",
"aiohttp>=3.8.5,<4",
"python-multipart>=0.0.18,<0.0.19",
"toml>=0.10.2,<0.11",
"jinja2>=3.1.2,<4",
"uvicorn[standard]>=0.24.0.post1,<0.25",
"litellm>=1.75.8",
"playwright>1.46.0 ; python_version >= '3.12' and python_version < '3.14'",
"playwright==1.46.0 ; python_version >= '3.11' and python_version < '3.12'",
"greenlet>3.0.3 ; python_version >= '3.12' and python_version < '3.14'",
"greenlet==3.0.3 ; python_version >= '3.11' and python_version < '3.12'",
"pillow>=10.1.0,<11",
"starlette-context>=0.3.6,<0.4",
"ddtrace>=2.3.2,<3",
"pydantic>=2.5.2,<3",
"pydantic-settings>=2.1.0,<3",
"fastapi>=0.115.4,<0.116",
"psycopg[binary, pool]==3.1.18 ; python_version >= '3.11' and python_version < '3.13'",
"psycopg[binary, pool]>=3.2.2,<3.3.0 ; python_version >= '3.13' and python_version < '3.14'",
"alembic>=1.12.1,<2",
"python-jose[cryptography]>=3.4.0,<4",
"cachetools>=5.3.2,<6",
"aioboto3>=14.3.0,<15",
"asyncache>=0.3.1,<0.4",
"orjson>=3.9.10,<4",
"structlog>=23.2.0,<24",
"typer>=0.16.0",
"types-toml>=0.10.8.7,<0.11",
"httpx[socks]>=0.27.0",
"filetype>=1.2.0,<2",
"redis>=5.0.3,<6",
"onnxruntime>=1.20.0,<1.23.0 ; python_version >= '3.12' and python_version < '3.14'",
"onnxruntime<1.17 ; python_version >= '3.11' and python_version < '3.12'",
"aioredlock>=0.7.3,<0.8",
"stripe>=9.7.0,<10",
"tldextract>=5.1.2,<6",
"websockets~=12.0",
"email-validator>=2.2.0,<3",
"temporalio>=1.6.0,<2",
"requests-toolbelt>=1.0.0,<2",
"rich[jupyter]>=13.7.0,<14",
"posthog>=3.7.0,<4",
"aiofiles>=24.1.0,<25",
"pyotp>=2.9.0,<3",
"asyncpg>=0.30.0,<0.31",
"json-repair>=0.34.0,<0.35",
"pypdf>=5.1.0,<6",
"fastmcp>=2.10.1,<3",
"psutil>=7.0.0",
"tiktoken>=0.9.0",
"anthropic>=0.50.0,<0.51",
"google-cloud-aiplatform>=1.90.0,<2",
"alive-progress>=3.2.0,<4",
"colorama>=0.4.6,<0.5",
"onepassword-sdk==0.3.0",
"types-boto3[full]>=1.38.31,<2",
"lark>=1.2.2,<2",
"libcst>=1.8.2,<2",
"curlparser>=0.1.0,<0.2",
"lmnr[all]>=0.7.0,<0.8",
"openpyxl>=3.1.5,<4",
"pandas>=2.3.1,<3",
"azure-identity>=1.24.0,<2",
"azure-keyvault>=4.2.0,<5",
"dramatiq[asyncio]>=1.18.0,<2",
]
[dependency-groups]
dev = [
"isort>=5.13.2,<6",
"mypy>=1.18.2,<2",
"flake8>=6.0.0,<7",
"types-requests>=2.31.0.2,<3",
"pytest>=7.4.0,<8",
"pytest-asyncio>=0.21.1,<0.22",
"watchdog>=3.0.0,<4",
"mock>=5.1.0,<6",
"autoflake>=2.2.0,<3",
"pydevd-pycharm>=233.6745.319,<234",
"ipython>=8.17.2,<9",
"typer>=0.16.0,<0.17",
"ipykernel>=6.26.0,<7",
"notebook>=7.0.6,<8",
"freezegun>=1.2.2,<2",
"snoop>=0.4.3,<0.5",
"rich[jupyter]>=13.7.0,<14",
"fpdf>=1.7.2,<2",
"pypdf>=5.0.1,<6",
"twine>=6.1.0,<7",
"build>=1.2.2.post1,<2",
"pre-commit>=4.2.0,<5",
"ruff>=0.11.12,<0.12",
"aiosqlite>=0.21.0,<0.22",
"moto[s3, server]>=5.1.5,<6",
]
[tool.hatch.build]
packages = ["skyvern", "alembic"]
[tool.hatch.build.targets.sdist]
include = [
{ path = "skyvern-frontend", format = "sdist" },
{ path = "skyvern-frontend/src", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/public", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/package.json", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/package-lock.json", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/*.config.*", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/*.html", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/*.md", format = ["sdist", "wheel"] }
"skyvern",
"alembic",
]
exclude = [
{ path = "skyvern-frontend/node_modules", format = ["sdist", "wheel"] },
{ path = "skyvern-frontend/dist", format = ["sdist", "wheel"] }
"skyvern-frontend/node_modules",
"skyvern-frontend/dist",
]
[tool.hatch.build.targets.sdist.force-include]
"skyvern-frontend" = "skyvern-frontend"
[tool.poetry.dependencies]
azure-storage-blob = ">=12.26.0"
python = ">=3.11,<3.14"
python-dotenv = "^1.0.0"
openai = ">=1.68.2"
sqlalchemy = {extras = ["mypy"], version = "^2.0.29"}
aiohttp = "^3.8.5"
python-multipart = "^0.0.18"
toml = "^0.10.2"
jinja2 = "^3.1.2"
uvicorn = {extras = ["standard"], version = "^0.24.0.post1"}
litellm = ">=1.75.8"
playwright = [
{version = ">1.46.0", python = ">=3.12,<3.14"},
{version = "=1.46.0", python = ">=3.11,<3.12"}
[tool.hatch.build.targets.wheel]
include = [
"skyvern",
"alembic",
]
greenlet = [
{version = ">3.0.3", python = ">=3.12,<3.14"},
{version = "=3.0.3", python = ">=3.11,<3.12"}
]
pillow = "^10.1.0"
starlette-context = "^0.3.6"
ddtrace = "^2.3.2"
pydantic = "^2.5.2"
pydantic-settings = "^2.1.0"
fastapi = "^0.115.4"
psycopg = [
{version = "3.1.18", extras = ["binary", "pool"], python = ">=3.11, <3.13"},
{version = ">=3.2.2,<3.3.0", extras = ["binary", "pool"], python = ">=3.13, <3.14"}
]
alembic = "^1.12.1"
python-jose = {extras = ["cryptography"], version = "^3.4.0"}
cachetools = "^5.3.2"
aioboto3 = "^14.3.0"
asyncache = "^0.3.1"
orjson = "^3.9.10"
structlog = "^23.2.0"
typer = ">=0.16.0"
types-toml = "^0.10.8.7"
httpx = {version = ">=0.27.0", extras = ["socks"]}
filetype = "^1.2.0"
redis = "^5.0.3"
onnxruntime = [
{ version = ">=1.20.0,<1.23.0", python = ">=3.12, <3.14"},
{ version = "<1.17", python = ">=3.11, <3.12"}
]
aioredlock = "^0.7.3"
stripe = "^9.7.0"
tldextract = "^5.1.2"
websockets = "^12.0"
email-validator = "^2.2.0"
temporalio = "^1.6.0"
requests-toolbelt = "^1.0.0"
rich = {extras = ["jupyter"], version = "^13.7.0"}
posthog = "^3.7.0"
aiofiles = "^24.1.0"
pyotp = "^2.9.0"
asyncpg = "^0.30.0"
json-repair = "^0.34.0"
pypdf = "^5.1.0"
fastmcp = "^2.10.1"
psutil = ">=7.0.0"
tiktoken = ">=0.9.0"
anthropic = "^0.50.0"
google-cloud-aiplatform = "^1.90.0"
alive-progress = "^3.2.0"
colorama = "^0.4.6"
onepassword-sdk = "0.3.0"
types-boto3 = {extras = ["full"], version = "^1.38.31"}
lark = "^1.2.2"
libcst = "^1.8.2"
curlparser = "^0.1.0"
lmnr = {extras = ["all"], version = "^0.7.0"}
openpyxl = "^3.1.5"
pandas = "^2.3.1"
azure-identity = "^1.24.0"
azure-keyvault = "^4.2.0"
dramatiq = {version = "^1.18.0", extras = ["asyncio"]}
[tool.poetry.group.dev.dependencies]
isort = "^5.13.2"
mypy = "^1.18.2"
flake8 = "^6.0.0"
types-requests = "^2.31.0.2"
pytest = "^7.4.0"
pytest-asyncio = "^0.21.1"
watchdog = "^3.0.0"
mock = "^5.1.0"
autoflake = "^2.2.0"
pydevd-pycharm = "^233.6745.319"
ipython = "^8.17.2"
typer = "^0.16.0"
ipykernel = "^6.26.0"
notebook = "^7.0.6"
freezegun = "^1.2.2"
snoop = "^0.4.3"
rich = {extras = ["jupyter"], version = "^13.7.0"}
fpdf = "^1.7.2"
pypdf = "^5.0.1"
twine = "^6.1.0"
build = "^1.2.2.post1"
pre-commit = "^4.2.0"
ruff = "^0.11.12"
aiosqlite = "^0.21.0"
moto = {extras = ["s3", "server"], version = "^5.1.5"}
[tool.hatch.build.targets.wheel.force-include]
"skyvern-frontend/src" = "skyvern-frontend/src"
"skyvern-frontend/public" = "skyvern-frontend/public"
"skyvern-frontend/package.json" = "skyvern-frontend/package.json"
"skyvern-frontend/package-lock.json" = "skyvern-frontend/package-lock.json"
"skyvern-frontend/postcss.config.js" = "skyvern-frontend/postcss.config.js"
"skyvern-frontend/tailwind.config.js" = "skyvern-frontend/tailwind.config.js"
"skyvern-frontend/vite.config.ts" = "skyvern-frontend/vite.config.ts"
"skyvern-frontend/index.html" = "skyvern-frontend/index.html"
"skyvern-frontend/README.md" = "skyvern-frontend/README.md"
"skyvern-frontend/.env.example" = "skyvern-frontend/.env.example"
"skyvern-frontend/artifactServer.js" = "skyvern-frontend/artifactServer.js"
"skyvern-frontend/localServer.js" = "skyvern-frontend/localServer.js"
"skyvern-frontend/tsconfig.json" = "skyvern-frontend/tsconfig.json"
"skyvern-frontend/tsconfig.node.json" = "skyvern-frontend/tsconfig.node.json"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.ruff]
exclude = [
@ -183,10 +197,10 @@ skip = ["webeye/actions/__init__.py", "forge/sdk/__init__.py"]
[tool.mypy]
plugins = "sqlalchemy.ext.mypy.plugin"
[tool.poetry.scripts]
[project.scripts]
skyvern = "skyvern.cli.commands:cli_app"
[tool.codeflash]
[tool.codeflash]
# All paths are relative to this pyproject.toml's directory.
module-root = "skyvern"
tests-root = "codeflash-tests"

View file

@ -10,7 +10,6 @@ if [ ! -f .env ]; then
echo "Please add your api keys to the .env file."
fi
# shellcheck source=/dev/null
source "$(poetry env info --path)/bin/activate"
poetry install
uv sync
./run_alembic_check.sh
poetry run python -m skyvern.forge
uv run python -m skyvern.forge

View file

@ -20,7 +20,7 @@ These instructions will get you a copy of the project up and running on your loc
Before you begin, ensure you have the following installed:
- [Python 3.11](https://www.python.org/downloads/)
- [Poetry](https://python-poetry.org/docs/#installation)
- [uv](https://docs.astral.sh/uv/getting-started/installation/)
### Installation
@ -33,7 +33,7 @@ Before you begin, ensure you have the following installed:
2. **Install dependencies**
```sh
poetry install
uv sync
```
3. *Define the following environment variables*

6603
uv.lock generated Normal file

File diff suppressed because it is too large Load diff