diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dc6ee54..1afa5ef 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/spellcheck.yml b/.github/workflows/spellcheck.yml index 62d5746..2afa7b7 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -15,7 +15,7 @@ jobs: cache-dependency-path: pyproject.toml - name: Install dependencies run: | - pip install -e '.[docs]' + pip install . --group docs - name: Check spelling run: | codespell docs/*.rst --ignore-words docs/codespell-ignore-words.txt 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/.github/workflows/test.yml b/.github/workflows/test.yml index 24123f8..763c6ad 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,9 +24,7 @@ jobs: cache-dependency-path: pyproject.toml - name: Install dependencies run: | - pip install -e '.[test,mypy,flake8]' - - name: Optionally install tui dependencies - run: pip install -e '.[tui]' + pip install . --group dev - name: Optionally install numpy if: matrix.numpy == 1 run: pip install numpy diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index fe8ba1e..0000000 --- a/.gitpod.yml +++ /dev/null @@ -1,2 +0,0 @@ -tasks: -- init: pip install '.[test]' \ No newline at end of file diff --git a/.readthedocs.yaml b/.readthedocs.yaml index e2b32ed..08c2f81 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -4,16 +4,13 @@ sphinx: configuration: docs/conf.py build: - os: ubuntu-22.04 + os: ubuntu-24.04 tools: - python: "3.11" - -python: - install: - - method: pip - path: . - extra_requirements: - - docs + python: "3.13" + jobs: + install: + - pip install --upgrade pip + - pip install . --group docs formats: - pdf diff --git a/Justfile b/Justfile index 1d3f6c9..f4f0e7f 100644 --- a/Justfile +++ b/Justfile @@ -3,30 +3,30 @@ # Run pytest with supplied options @test *options: - just run pytest {{options}} + uv run pytest {{options}} @run *options: - uv run --isolated --with-editable '.[test,mypy,flake8,docs]' -- {{options}} + uv run -- {{options}} # Run linters: black, flake8, mypy, cog @lint: just run black . --check - just run flake8 - just run mypy sqlite_utils tests - just run cog --check README.md docs/*.rst - just run codespell docs/*.rst --ignore-words docs/codespell-ignore-words.txt + uv run flake8 + uv run mypy sqlite_utils tests + uv run cog --check README.md docs/*.rst + uv run --group docs codespell docs/*.rst --ignore-words docs/codespell-ignore-words.txt # Rebuild docs with cog @cog: - just run cog -r README.md docs/*.rst + uv run --group docs cog -r README.md docs/*.rst # Serve live docs on localhost:8000 @docs: cog #!/usr/bin/env bash cd docs - uv run --isolated --with-editable '../.[test,docs]' make livehtml + uv run --group docs make livehtml # Apply Black @black: - just run black . + uv run black . diff --git a/docs/contributing.rst b/docs/contributing.rst index 297341f..f10b02a 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -13,78 +13,61 @@ 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:: - - cd docs - make livehtml +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. 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: Linting and formatting ====================== -``sqlite-utils`` uses `Black `__ for code formatting, and `flake8 `__ and `mypy `__ for linting and type checking. +``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. .. _contributing_just: -Using Just and uv -================= +Using Just +========== -If you install `Just `__ and `uv `__ you can use them to manage your local development environment. +If you install `Just `__ you can use it to manage your local development environment. To run all of the tests and linters:: diff --git a/pyproject.toml b/pyproject.toml index cceb315..30ceeb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,22 +31,22 @@ dependencies = [ "pip", ] -[project.urls] -Homepage = "https://github.com/simonw/sqlite-utils" -Documentation = "https://sqlite-utils.datasette.io/en/stable/" -Changelog = "https://sqlite-utils.datasette.io/en/stable/changelog.html" -Issues = "https://github.com/simonw/sqlite-utils/issues" -CI = "https://github.com/simonw/sqlite-utils/actions" - -[project.scripts] -sqlite-utils = "sqlite_utils.cli:cli" - -[project.optional-dependencies] -test = [ +[dependency-groups] +dev = [ "black>=24.1.1", "cogapp", "hypothesis", "pytest", + # mypy + "data-science-types", + "mypy", + "types-click", + "types-pluggy", + "types-python-dateutil", + "types-tabulate", + # flake8 + "flake8", + "flake8-pyproject", ] docs = [ "beanbag-docutils>=2.0", @@ -56,18 +56,16 @@ docs = [ "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/" +Changelog = "https://sqlite-utils.datasette.io/en/stable/changelog.html" +Issues = "https://github.com/simonw/sqlite-utils/issues" +CI = "https://github.com/simonw/sqlite-utils/actions" + +[project.scripts] +sqlite-utils = "sqlite_utils.cli:cli" [build-system] requires = ["setuptools"]