feat: use uv instead of pip
This commit is contained in:
+47
-62
@@ -5,23 +5,33 @@
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
import tomllib
|
||||
import urllib.request as url_lib
|
||||
from typing import List
|
||||
|
||||
import nox # pylint: disable=import-error
|
||||
|
||||
|
||||
def _read_dependencies() -> List[str]:
|
||||
"""Read project dependencies from pyproject.toml."""
|
||||
pyproject = tomllib.loads(pathlib.Path("pyproject.toml").read_text())
|
||||
return list(pyproject.get("project", {}).get("dependencies", []))
|
||||
|
||||
|
||||
def _install_bundle(session: nox.Session) -> None:
|
||||
session.install(
|
||||
"-t",
|
||||
deps = _read_dependencies()
|
||||
session.run(
|
||||
"uv",
|
||||
"pip",
|
||||
"install",
|
||||
"--target",
|
||||
"./libs",
|
||||
"--no-cache-dir",
|
||||
"--implementation",
|
||||
"py",
|
||||
"--no-deps",
|
||||
"--upgrade",
|
||||
"-r",
|
||||
"./requirements.txt",
|
||||
*deps,
|
||||
external=True,
|
||||
)
|
||||
|
||||
|
||||
@@ -34,24 +44,6 @@ def _check_files(names: List[str]) -> None:
|
||||
raise Exception(f"Please update {os.fspath(file_path)}.")
|
||||
|
||||
|
||||
def _update_pip_packages(session: nox.Session) -> None:
|
||||
session.install("wheel", "pip-tools==7.3.0")
|
||||
session.run(
|
||||
"pip-compile",
|
||||
"--generate-hashes",
|
||||
"--resolver=backtracking",
|
||||
"--upgrade",
|
||||
"./requirements.in",
|
||||
)
|
||||
session.run(
|
||||
"pip-compile",
|
||||
"--generate-hashes",
|
||||
"--resolver=backtracking",
|
||||
"--upgrade",
|
||||
"./src/test/python_tests/requirements.in",
|
||||
)
|
||||
|
||||
|
||||
def _get_package_data(package):
|
||||
json_uri = f"https://registry.npmjs.org/{package}"
|
||||
with url_lib.urlopen(json_uri) as response:
|
||||
@@ -80,13 +72,8 @@ def _update_npm_packages(session: nox.Session) -> None:
|
||||
package_json["devDependencies"][package] = latest
|
||||
|
||||
# Ensure engine matches the package
|
||||
if (
|
||||
package_json["engines"]["vscode"]
|
||||
!= package_json["devDependencies"]["@types/vscode"]
|
||||
):
|
||||
print(
|
||||
"Please check VS Code engine version and @types/vscode version in package.json."
|
||||
)
|
||||
if package_json["engines"]["vscode"] != package_json["devDependencies"]["@types/vscode"]:
|
||||
print("Please check VS Code engine version and @types/vscode version in package.json.")
|
||||
|
||||
new_package_json = json.dumps(package_json, indent=4)
|
||||
# JSON dumps uses \n for line ending on all platforms by default
|
||||
@@ -97,65 +84,60 @@ def _update_npm_packages(session: nox.Session) -> None:
|
||||
|
||||
|
||||
def _setup_template_environment(session: nox.Session) -> None:
|
||||
session.install("wheel", "pip-tools")
|
||||
session.run(
|
||||
"pip-compile",
|
||||
"--generate-hashes",
|
||||
"--resolver=backtracking",
|
||||
"--upgrade",
|
||||
"./requirements.in",
|
||||
)
|
||||
# session.run(
|
||||
# "pip-compile",
|
||||
# "--generate-hashes",
|
||||
# "--resolver=backtracking",
|
||||
# "--upgrade",
|
||||
# "./src/test/python_tests/requirements.in",
|
||||
# )
|
||||
"""Install project dependencies into the bundled libs directory."""
|
||||
_install_bundle(session)
|
||||
|
||||
|
||||
@nox.session()
|
||||
def setup(session: nox.Session) -> None:
|
||||
"""Sets up the template for development."""
|
||||
session.install("pip<24")
|
||||
_setup_template_environment(session)
|
||||
|
||||
|
||||
@nox.session()
|
||||
def tests(session: nox.Session) -> None:
|
||||
"""Runs all the tests for the extension."""
|
||||
session.install("-r", "src/test/python_tests/requirements.txt")
|
||||
session.run("pytest", "src/test/python_tests")
|
||||
deps = _read_dependencies()
|
||||
session.run("uv", "pip", "install", "--python", sys.executable, *deps, external=True)
|
||||
session.run("uv", "pip", "install", "--python", sys.executable, "pytest", external=True)
|
||||
session.run("pytest", "tests/python_tests")
|
||||
|
||||
|
||||
@nox.session()
|
||||
def lint(session: nox.Session) -> None:
|
||||
"""Runs linter and formatter checks on python files."""
|
||||
session.install("-r", "./requirements.txt")
|
||||
session.install("-r", "src/test/python_tests/requirements.txt")
|
||||
|
||||
session.install("pylint")
|
||||
deps = _read_dependencies()
|
||||
session.run("uv", "pip", "install", "--python", sys.executable, *deps, external=True)
|
||||
session.run(
|
||||
"uv",
|
||||
"pip",
|
||||
"install",
|
||||
"--python",
|
||||
sys.executable,
|
||||
"pytest",
|
||||
"pylint",
|
||||
"black",
|
||||
"isort",
|
||||
external=True,
|
||||
)
|
||||
session.run("pylint", "-d", "W0511", "./bundled/tool")
|
||||
session.run(
|
||||
"pylint",
|
||||
"-d",
|
||||
"W0511",
|
||||
"--ignore=./src/test/python_tests/test_data",
|
||||
"./src/test/python_tests",
|
||||
"--ignore=./tests/python_tests/test_data",
|
||||
"./tests/python_tests",
|
||||
)
|
||||
session.run("pylint", "-d", "W0511", "noxfile.py")
|
||||
|
||||
# check formatting using black
|
||||
session.install("black")
|
||||
session.run("black", "--check", "./bundled/tool")
|
||||
session.run("black", "--check", "./src/test/python_tests")
|
||||
session.run("black", "--check", "./tests/python_tests")
|
||||
session.run("black", "--check", "noxfile.py")
|
||||
|
||||
# check import sorting using isort
|
||||
session.install("isort")
|
||||
session.run("isort", "--check", "./bundled/tool")
|
||||
session.run("isort", "--check", "./src/test/python_tests")
|
||||
session.run("isort", "--check", "./tests/python_tests")
|
||||
session.run("isort", "--check", "noxfile.py")
|
||||
|
||||
# check typescript code
|
||||
@@ -171,9 +153,12 @@ def build_package(session: nox.Session) -> None:
|
||||
session.run("npm", "run", "vsce-package", external=True)
|
||||
|
||||
|
||||
def _update_uv_lock(session: nox.Session) -> None:
|
||||
session.run("uv", "lock", "--upgrade", external=True)
|
||||
|
||||
|
||||
@nox.session()
|
||||
def update_packages(session: nox.Session) -> None:
|
||||
"""Update pip and npm packages."""
|
||||
session.install("wheel", "pip-tools")
|
||||
_update_pip_packages(session)
|
||||
"""Update Python and npm packages."""
|
||||
_update_uv_lock(session)
|
||||
_update_npm_packages(session)
|
||||
|
||||
Reference in New Issue
Block a user