diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dc6ee54..396e2b8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -21,7 +21,7 @@ jobs: cache-dependency-path: pyproject.toml - name: Install dependencies run: | - pip install -e '.[test]' + pip install . --group dev - name: Run tests run: | pytest diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 410edaf..1f55f4e 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -24,7 +24,7 @@ jobs: - name: Install Python dependencies run: | python -m pip install --upgrade pip - python -m pip install -e .[test] + python -m pip install . --group dev python -m pip install pytest-cov - name: Run tests run: |- diff --git a/.github/workflows/test-sqlite-support.yml b/.github/workflows/test-sqlite-support.yml index 83a8fd3..aa2ab9b 100644 --- a/.github/workflows/test-sqlite-support.yml +++ b/.github/workflows/test-sqlite-support.yml @@ -34,7 +34,7 @@ jobs: - run: python3 -c "import sqlite3; print(sqlite3.sqlite_version)" - name: Install dependencies run: | - pip install -e '.[test]' + pip install . --group dev pip freeze - name: Run tests run: | diff --git a/docs/contributing.rst b/docs/contributing.rst index 297341f..6154f6a 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -13,49 +13,41 @@ All improvements to the software should start with an issue. Read `How I build a Obtaining the code ================== -To work on this library locally, first checkout the code. Then create a new virtual environment:: +To work on this library locally, first checkout the code. git clone git@github.com:simonw/sqlite-utils cd sqlite-utils - python3 -mvenv venv - source venv/bin/activate -Or if you are using ``pipenv``:: +Use `uv run` to run the development version of the tool: - pipenv shell - -Within the virtual environment running ``sqlite-utils`` should run your locally editable version of the tool. You can use ``which sqlite-utils`` to confirm that you are running the version that lives in your virtual environment. + uv run sqlite-utils --help .. _contributing_tests: Running the tests ================= -To install the dependencies and test dependencies:: +Use `uv run` to run the tests: - pip install -e '.[test]' - -To run the tests:: - - pytest + uv run pytest .. _contributing_docs: Building the documentation ========================== -To build the documentation, first install the documentation dependencies:: +To build the documentation run this command:: - pip install -e '.[docs]' + uv run make livehtml --directory docs -Then run ``make livehtml`` from the ``docs/`` directory to start a server on port 8000 that will serve the documentation and live-reload any time you make an edit to a ``.rst`` file:: +This will start a server on port 8000 that will serve the documentation and live-reload any time you make an edit to a ``.rst`` file. cd docs make livehtml The `cog `__ tool is used to maintain portions of the documentation. You can run it like so:: - cog -r docs/*.rst + uv run cog -r docs/*.rst .. _contributing_linting: @@ -64,18 +56,12 @@ Linting and formatting ``sqlite-utils`` uses `Black `__ for code formatting, and `flake8 `__ and `mypy `__ for linting and type checking. -Black is installed as part of ``pip install -e '.[test]'`` - you can then format your code by running it in the root of the project:: + uv run black . - black . +Linting tools can be run like this:: -To install ``mypy`` and ``flake8`` run the following:: - - pip install -e '.[flake8,mypy]' - -Both commands can then be run in the root of the project like this:: - - flake8 - mypy sqlite_utils + uv run flake8 + uv run mypy sqlite_utils All three of these tools are run by our CI mechanism against every commit and pull request. diff --git a/pyproject.toml b/pyproject.toml index cceb315..304bbcd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,31 @@ dependencies = [ "pip", ] +[dependency-groups] +dev = [ + "black>=24.1.1", + "cogapp", + "hypothesis", + "pytest", + # docs + "beanbag-docutils>=2.0", + "codespell", + "furo", + "pygments-csv-lexer", + "sphinx-autobuild", + "sphinx-copybutton", + # mypy + "data-science-types", + "mypy", + "types-click", + "types-pluggy", + "types-python-dateutil", + "types-tabulate", + # flake8 + "flake8", + "flake8-pyproject", +] + [project.urls] Homepage = "https://github.com/simonw/sqlite-utils" Documentation = "https://sqlite-utils.datasette.io/en/stable/" @@ -41,34 +66,6 @@ CI = "https://github.com/simonw/sqlite-utils/actions" [project.scripts] sqlite-utils = "sqlite_utils.cli:cli" -[project.optional-dependencies] -test = [ - "black>=24.1.1", - "cogapp", - "hypothesis", - "pytest", -] -docs = [ - "beanbag-docutils>=2.0", - "codespell", - "furo", - "pygments-csv-lexer", - "sphinx-autobuild", - "sphinx-copybutton", -] -mypy = [ - "data-science-types", - "mypy", - "types-click", - "types-pluggy", - "types-python-dateutil", - "types-tabulate", -] -flake8 = [ - "flake8", - "flake8-pyproject", -] - [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta"