Hi all,

I am calling a LAZY CONSENSUS to officially anoint Ruff as the tool to 
implement lint rules that detect potential incompatibilities in existing user 
code (including DAG files and plugins) that may break in Airflow 3. The 
rationale is

* Ruff provides the best set of features for our needs according to my 
research, most importantly import resolution, and also a nice CLI “for free”.

* While a rule in Ruff must be implemented in Rust, which can be a hurdle to 
most Airflow contributors, it does not actually require a very deep 
understanding to Rust, but more toward the Python AST parser that Ruff provides 
(which is very similar to Python’s built-in ast).

* We intend to only implement lint rules, not “fixes” (which would allow Ruff 
to rewrite offending files automatically. This reduces the learning curve even 
further.

* Most Airflow contributors likely don’t know Python’s ast library very well to 
begin with anyway, so the learning curve would not be much flatter even if we 
choose a Python-based tool.

* We would not be the first Python library to use Ruff for this—Numpy also uses 
Ruff to detect potential incompatibilities for Numpy 2.0. We are also not the 
first to create Airflow rules in Ruff either—it already contains one 
Airflow-specific rule.

If we are to implement an auto fixer, it can still be rewritten in Python. With 
Ruff handling most of the user interaction (including generating proper error 
messages and a clear error code), the fixer can have a relatively simplistic 
CLI that can be more easily implemented with just argparse and print() (or a 
little drop of Rich if we feel fancy).

I have created a POC on generating lint errors against creating an Airflow DAG 
without using the 'schedule' argument correctly for Airflow 3: 
https://github.com/uranusjr/ruff/pull/1

If no one objects, the vote will pass three days from now, at 12:00 (noon) UTC, 
24 November 2024. I intend to formally submit the rule implemented above to 
Ruff, and start contributing other rules to Ruff. A list of rule candidates can 
be found in Wei’s thread “[Discuss] Airflow 2 to 3 migration rules” sent to 
this list earlier.

Thanks all,
TP
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
For additional commands, e-mail: dev-h...@airflow.apache.org

Reply via email to