+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/>
> >> >
> >>

Reply via email to