It is a bit frustrating to have a PR fail fast due to the early "linting" stage failing.
Normally "linting" should come on top, i.e. in the end.
I can see that it is useful to have an initial stage that fails the build quickly (instead of letting all jobs fail slowly), but that should not be "linting", but one of the other jobs that is rather fast.
But since it will only run one job then first, I suggest to instead put "py27", "py34", "py35", and "py36" into the first stage ("py37" uses sudo=false, so is slower) - typically 4 jobs are run in parallel, so this would be faster in the successful case, but would still avoid running all other jobs in case one of them fails.
It is a bit frustrating to have a PR fail fast due to the early "linting" stage failing.
Normally "linting" should come on top, i.e. in the end.
I can see that it is useful to have an initial stage that fails the build quickly (instead of letting all jobs fail slowly), but that should not be "linting", but one of the other jobs that is rather fast.
But since it will only run one job then first, I suggest to instead put "py27", "py34", "py35", and "py36" into the first stage ("py37" uses sudo=false, so is slower) - typically 4 jobs are run in parallel, so this would be faster in the successful case, but would still avoid running all other jobs in case one of them fails.