Any more comments on it? Should I make an AIP for that :)? Or should I just ask a vote/propose a PR ? Anyone has a strong opinion? I think it changes the dev workflow quite a bit on one hand, but it is fully optional on the other hand.
On Thu, Jul 4, 2019 at 9:23 AM Kamil Breguła <kamil.breg...@polidea.com> wrote: > +1 At first I was skeptical about this tool. I prefer to run it by > hand, but I am more and more convinced that using it as a pre-commit > makes sense. > > On Wed, Jul 3, 2019 at 10:58 PM Felix Uellendall <felue...@pm.me.invalid> > wrote: > > > > +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/> > > >> > > > >> > -- Jarek Potiuk Polidea <https://www.polidea.com/> | Principal Software Engineer M: +48 660 796 129 <+48660796129> [image: Polidea] <https://www.polidea.com/>