Skip to content

Commit 0ea24ef

Browse files
committed
Add prior art section to motivation docs
Cover anaconda-project, conda-project, conda-execute, conda run, general-purpose Python task runners (tox, nox, invoke, hatch), and pixi. Expand acknowledgements to credit the anaconda-project and conda-project teams alongside prefix.dev.
1 parent 19fad0e commit 0ea24ef

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

docs/motivation.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,67 @@ the task-running side:
8282
- Conda integration: tasks can target specific conda environments using
8383
`-n`/`-p` flags, matching conda's standard interface.
8484

85+
## Prior art
86+
87+
The idea of running commands from a project definition is not new in the
88+
conda ecosystem. Several tools have explored this space, each with a
89+
different scope.
90+
91+
### anaconda-project
92+
93+
[anaconda-project](https://github.com/Anaconda-Platform/anaconda-project)
94+
was one of the first tools to combine conda environments with project
95+
commands. Its `anaconda-project.yml` lets you define named commands,
96+
platform-specific variants (`unix:` / `windows:`), and service
97+
dependencies. Running `anaconda-project run` automatically sets up the
98+
environment before executing. It focuses on reproducible project
99+
launchers rather than build-style task graphs -- there is no way to
100+
express dependencies between commands, no caching, and no templating.
101+
102+
### conda-project
103+
104+
[conda-project](https://github.com/conda-incubator/conda-project) is a
105+
community successor to anaconda-project, maintained under conda-incubator.
106+
It modernizes the workflow with `conda-lock` integration and a
107+
`conda project run` command. Like its predecessor, it centers on
108+
environment management and command execution rather than task
109+
orchestration -- commands cannot depend on each other.
110+
111+
### conda-execute
112+
113+
[conda-execute](https://github.com/pelson/conda-execute) takes a
114+
different approach: embed environment requirements directly in a script's
115+
header comments, then run it in an auto-created temporary environment.
116+
It is aimed at one-off scripts rather than multi-step project workflows.
117+
118+
### conda run
119+
120+
Conda itself ships `conda run -n <env> <command>`, which activates an
121+
environment and runs a single command. It is the low-level primitive that
122+
conda-tasks builds on, but it has no concept of task definitions,
123+
dependencies, or caching.
124+
125+
### General-purpose Python task runners
126+
127+
Tools like [tox](https://tox.wiki), [nox](https://nox.thea.codes),
128+
[invoke](https://www.pyinvoke.org), and
129+
[hatch](https://hatch.pypa.io) each provide ways to define and run
130+
project tasks. tox and nox focus on test-matrix automation with
131+
virtualenvs; invoke is a general-purpose Make replacement; hatch offers
132+
scripts and environment matrices for Python projects. None of them
133+
integrate directly with conda environments or conda's plugin system.
134+
135+
### pixi
136+
137+
[pixi](https://pixi.sh) by [prefix.dev](https://prefix.dev) was the
138+
first tool to ship a full-featured task runner tightly integrated with
139+
conda package management: task dependencies, platform overrides,
140+
input/output caching, template variables, and task arguments. Its task
141+
system is the direct inspiration for conda-tasks. The key difference is
142+
that pixi manages both environments and tasks, while conda-tasks
143+
deliberately handles only the task-running side and leaves environment
144+
management to conda.
145+
85146
## Acknowledgements
86147

87148
conda-tasks would not exist without the work of the
@@ -91,3 +152,9 @@ template variables, and the overall developer experience -- comes directly
91152
from their implementation. We are grateful for their contribution to the
92153
conda ecosystem and for setting the bar on what a project task runner
93154
should look like.
155+
156+
The [anaconda-project](https://github.com/Anaconda-Platform/anaconda-project)
157+
and [conda-project](https://github.com/conda-incubator/conda-project)
158+
teams explored running commands from project manifests long before
159+
conda-tasks existed. Their work informed how project-level automation
160+
fits into the conda ecosystem.

0 commit comments

Comments
 (0)