diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 26eeb5485..a648faf9c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,10 +1,10 @@ -name: JS Lint +name: Lint on: - pull_request jobs: - js_lint: - name: JS Lint + lint_ts: + name: Lint TypeScript source runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -15,5 +15,25 @@ jobs: run: pip install jupyterlab~=4.0 - name: Install JS dependencies run: jlpm - - name: Run JS Lint + - name: Lint TypeScript source run: jlpm lerna run lint:check + + lint_py_imports: + name: Lint Python imports + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Create and activate venv + run: | + python -m venv lint_py_imports + source ./lint_py_imports/bin/activate + - name: Install JupyterLab + run: pip install jupyterlab~=4.0 + - name: Install `import-linter` + run: pip install import-linter~=1.12.1 + - name: Install Jupyter AI packages from source + run: | + jlpm install + jlpm install-from-src + - name: Lint Python imports + run: lint-imports diff --git a/nx.json b/nx.json index 5c42122e0..4e9b0baa2 100644 --- a/nx.json +++ b/nx.json @@ -11,6 +11,9 @@ }, "dev-uninstall": { "dependsOn": ["clean:labextension"] + }, + "install-from-src": { + "dependsOn": ["^install-from-src"] } }, "tasksRunnerOptions": { diff --git a/package.json b/package.json index f2bab61bd..e0dc1bd99 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "dev": "jupyter lab --config playground/config.py", "dev-install": "lerna run dev-install --stream", "dev-uninstall": "lerna run dev-uninstall --stream", + "install-from-src": "lerna run install-from-src --stream", "lint": "jlpm && lerna run prettier && lerna run eslint", "lint:check": "lerna run prettier:check && lerna run eslint:check", "watch": "lerna run watch --parallel --stream", diff --git a/packages/jupyter-ai-magics/package.json b/packages/jupyter-ai-magics/package.json index 9d4be7ea9..c94e3bea1 100644 --- a/packages/jupyter-ai-magics/package.json +++ b/packages/jupyter-ai-magics/package.json @@ -19,6 +19,7 @@ }, "scripts": { "dev-install": "pip install -e \".[dev,all]\"", - "dev-uninstall": "pip uninstall jupyter_ai_magics -y" + "dev-uninstall": "pip uninstall jupyter_ai_magics -y", + "install-from-src": "pip install ." } } diff --git a/packages/jupyter-ai/package.json b/packages/jupyter-ai/package.json index 2e8348983..7665370f3 100644 --- a/packages/jupyter-ai/package.json +++ b/packages/jupyter-ai/package.json @@ -55,7 +55,8 @@ "watch:src": "tsc -w", "watch:labextension": "jupyter labextension watch .", "dev-install": "pip install -e \".[dev,all,test]\" && jupyter labextension develop . --overwrite && jupyter server extension enable jupyter_ai", - "dev-uninstall": "pip uninstall jupyter_ai -y" + "dev-uninstall": "pip uninstall jupyter_ai -y", + "install-from-src": "pip install ." }, "dependencies": { "@emotion/react": "^11.10.5", diff --git a/pyproject.toml b/pyproject.toml index 227a5282d..f829e181b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,3 +27,14 @@ ignore = [".*"] [tool.check-wheel-contents] ignore = ["W002"] + +[tool.importlinter] +root_packages = ["jupyter_ai", "jupyter_ai_magics"] +include_external_packages = true + +[[tool.importlinter.contracts]] +key = "pydantic" +name = "Forbidden import of `pydantic` package. Please import from `langchain.pydantic_v1` instead for compatibility with both Pydantic v1 and v2." +type = "forbidden" +source_modules = ["jupyter_ai", "jupyter_ai_magics"] +forbidden_modules = ["pydantic"]