+1 (non-binding), I love that. I use a git pre-commit bash script but I think 
the framework looks even better. :)

-feluelle

-------- Original Message --------
On Jul 2, 2019, 19:48, Maxime Beauchemin wrote:

> +1
>
> On Mon, Jul 1, [2019](tel:2019) at 11:20 PM Kaxil Naik <kaxiln...@gmail.com> 
> wrote:
>
>> +1 We have been using this on some of our Astronomer repositories as well
>> and have been happy with it.
>>
>> Regards,
>> Kaxil
>>
>> On Tue, Jul 2, [2019](tel:2019), 11:46 Jarek Potiuk 
>> <jarek.pot...@polidea.com> wrote:
>>
>> > TL;DR: I would like to make a proposal to add (easily managed)
>> pre-commit
>> > hooks with various lint checkers part of recommended (and encouraged)
>> > development workflow for Airflow. This will help with speeding-up local
>> > development cycle and decrease pressure on Travis CI.
>> >
>> > Over the last few months in our other oozie-to-airflow
>> > <https://github.com/GoogleCloudPlatform/oozie-to-airflow> project we've
>> > been running pre-commit hooks - we've integrated the fantastic
>> > https://pre-commit.com/ framework and we never looked back. The upcoming
>> > changes to docker images (AIP-10) makes it easy to standardise
>> pylint/mypy
>> > and other checks to be the same for every developer (using docker images)
>> > so it also makes possible to have consistent pre-commit environment for
>> > static checks for everyone.
>> >
>> > Pre-commit framework has a number of cool features you would expect from
>> > such tool:
>> >
>> > - it is super easy to install and manage the checks ('pre-commit
>> install')
>> > - all the checks are managed in single .pre-commit-config.yaml file (in
>> > repo)
>> > - it allows to run various checks only on the changes you are committing
>> > - it has nice and simple UI to run checks individually or skip some
>> checks,
>> > or run on all files
>> > - it automatically uses all processors on your machine (it will
>> distribute
>> > changed files evenly)
>> > - it has great UI for reporting what's going on
>> > - it has a number of pre-defined checks that are super-useful
>> > - check if you have not left debug instructions (Ash :) - no more
>> > problems with that!)
>> > - check if you resolved merge conflicts
>> > - check if you have not submitted a private key
>> > - check correctness of various files (shell, yaml, xml, whether
>> shebangs
>> > are added correctly etc.)
>> > - ....
>> > - it can even correct some of the problems found (it leaves corrected
>> files
>> > for you to commit):
>> > - automatically adding missing licences
>> > - automatically add python-encoding pragma
>> > - add Table of Contents for markdown files
>> > - and many more
>> > - it can be integrated in CI to run the very same checks but on all files
>> > during CI.
>> > - you can use --no-verify switch to skip pre-commit
>> >
>> > There are multiple advantages of using pre-commit hooks. It not only
>> speeds
>> > up local development (no more waiting for Travis) but if most people will
>> > start using it - it will also decrease the pressure on Travis - less
>> people
>> > will be submitting PRs just to check if they pass all the checks. I think
>> > that might be single biggest thing that we can do to have far less CPU
>> used
>> > by Airflow builds.
>> >
>> > There is one disadvantage I noticed - when you have unstaged changes,
>> > pre-commit stashes them before running checks and sometimes (if you
>> Ctrl^C
>> > very quickly) it will not stash them back - but it is recoverable it just
>> > needs one liner to recover. In normal circumstances it is really safe to
>> > run.
>> >
>> > I already made a working POC of pre-commit (not intended for merge - it
>> has
>> > many more unrelated changes that I am going to submit as separate PRs).
>> It
>> > takes less than [20-30](tel:2030) seconds to run all the checks in a small 
>> > commit
>> > (including pylint/mypy and other checks) so IMHO it is perfectly OK to
>> run
>> > on every commit. You can see the Job in CI here:
>> > https://travis-ci.org/PolideaInternal/airflow/jobs/552862055 and a short
>> > documentation I wrote on using pre-commits here:
>> >
>> >
>> https://github.com/PolideaInternal/airflow/blob/pre-commit-hooks/CONTRIBUTING.md#pre-commit-hooks
>> >
>> > Here are the checks I managed to get running for Airflow (pylint is
>> skipped
>> > for now until we finish it but it can be tested in separate job - I also
>> > did it in the same build):
>> >
>> > Docker build - might take longer on setup.py change (see
>> > ./.build/cache dir for logs).......................Passed
>> > Add licence for all XML, md
>> >
>> >
>> files...........................................................................Passed
>> > Add licence for all JS
>> >
>> >
>> files................................................................................Passed
>> > Add licence for all SQL
>> >
>> >
>> files...............................................................................Passed
>> > Add licence for all JINJA template
>> >
>> >
>> files....................................................................Passed
>> > Add licence for all other
>> >
>> >
>> files.............................................................................Passed
>> > No-tabs
>> >
>> checker.............................................................................................Passed
>> > Check yaml files with
>> >
>> >
>> yamllint..............................................................................Passed
>> > Check that executables have
>> >
>> >
>> shebangs........................................................................Passed
>> > Check for merge
>> >
>> >
>> conflicts...................................................................................Passed
>> > Check
>> >
>> Xml...................................................................................................Passed
>> > Debug Statements
>> >
>> >
>> (Python)...................................................................................Passed
>> > Detect Private
>> >
>> Key..........................................................................................Passed
>> > Fix python encoding
>> >
>> >
>> pragma..................................................................................Passed
>> > Fix End of
>> >
>> Files............................................................................................Passed
>> > Mixed line
>> >
>> ending...........................................................................................Passed
>> > Check hooks apply to the
>> >
>> >
>> repository.........................................................................Passed
>> > Add TOC to markdown
>> >
>> >
>> documents...............................................................................Passed
>> > Check Shell scripts syntax
>> >
>> >
>> corectness.......................................................................Passed
>> > Lint
>> >
>> dockerfile.............................................................................................Passed
>> > Run
>> >
>> mypy....................................................................................................Passed
>> > Run pylint for main
>> >
>> >
>> sources................................................................................Skipped
>> > Run pylint for
>> >
>> tests.......................................................................................Skipped
>> > Run
>> >
>> flake8..................................................................................................Passed
>> >
>> >
>> > J.
>> >
>> > J.
>> >
>> > --
>> >
>> > Jarek Potiuk
>> > Polidea <https://www.polidea.com/> | Principal Software Engineer
>> >
>> > M: [+48 660 796 129](tel:+48660796129) <[+48660796129](tel:+48660796129)>
>> > [image: Polidea] <https://www.polidea.com/>
>> >
>>

Reply via email to