This is a PR to change the way local development is done in Ibis (while preserving as much backwards compatibility with conda and non-conda/non-nix workflows as possible!), accomplishing the following things:
The main change here is the addition of a development environment that is self-contained and derived from a single source of truth (pyproject.toml
), using nix
.
See docs/web/contribute.md
for more details.
Note that both conda and setuptools-based development workflows are still supported as first class citizens.
DONE:
- ~A move to
poetry
for dependency management.~ done in #2937
It is still possible and supported to use setup.py and setuptools if you like, this functionality is checked in CI.
- ~More extensive CI testing, with minimal additional CI time used. It looks
like roughly on average 3 minutes of additional CI time occur, with more of
the library being tested on Windows in particular~ done in #2937
- ~Automatic generation of a conda recipe for every release, uploaded to GitHub
releases (this is the remaining 1% that isn't automated but this can
be automated by pushing a feedstock pull request directly from CI)~ I plan to do this in conda-forge directly, using their integrated bot automation
- ~Automated Dependabot updates for github-actions and poetry dependencies~ this is done using Renovate in #3053
- ~Generating a setup.py file from the project's
pyproject.toml
file~ ~This is now just checked that it doesn't need to be regenerated, since we want to ensure this is tested in CI where relevant.~ done in #3054, necessary for Renovate dependency update PRs
- ~Automatic generation of a conda environment file, uploaded to GitHub releases, useful for developers using conda~ We have automatically generated lockfiles for linux, macos, and windows, for all three versions of Python currently supported (3.7, 3.8, 3.9). These live under
conda-lock
and can be used to set up a development environment very quickly since there's no solve step required. Done #3077, #3080, #3083, #3087
Follow ups:
workflow_dispatch
(click-to-run) GitHub Actions workflow that cuts a release to PyPI and GitHub Releases.
- Automatic license updates once a year or on-demand. This is optional, but it's another thing we can automate at some point.
- ~Automatic nix dependency updates via PR submission every six hours or on-demand. This has to be done in a follow up.~ Done in https://github.com/ibis-project/ibis/pull/3182
Happy to address any concerns here, let's automate everything!
ci dependencies developer-tools released