PEP-8 is a set of Python style recommendations. pep8
is a module that checks your .py
file for violations. To make your Travis-CI build fail if you have any violations, you could add these lines to your .travis.yml
:
before_install:
- pip install pep8
script:
# Run pep8 on all .py files in all subfolders
# (I ignore "E402: module level import not at top of file"
# because of use case sys.path.append('..'); import <module>)
- find . -name \*.py -exec pep8 --ignore=E402 {} +
However, since this makes my build fail for very trivial violations, like extra whitespace after a line of code, I find it isn't practical to include this check unless I also automatically fix any issues. autopep8
(https://pypi.python.org/pypi/autopep8) can perform this fix; now let's get Travis-CI to run it after every build, and if there are corrections, commit and push these changes.
language: python
python:
- 2.7
- 3.3
- 3.4
- 3.5
notifications:
email: false
before_install:
- sudo apt-get update
- sudo apt-get -y install python-pip
- sudo pip install --upgrade pip
- pip install --upgrade pip
- pip install pep8
- pip install autopep8
script:
# Run pep8 on all .py files in all subfolders
# We must ignore E402 module level import not at top of file
# because of use case sys.path.append('..'); import <module>
- num_errors_before=`find . -name \*.py -exec pep8 --ignore=E402 {} + | wc -l`
- echo $num_errors_before
- cd "$TRAVIS_BUILD_DIR"
- git config --global user.email "mcurrie@bruceforceresearch.com"
# From https://help.github.com/articles/setting-your-username-in-git/:
# "Tip: You don't have to use your real name--any name works. Git
# actually associates commits by email address; the username is only
# used for identification. If you use your email address associated
# with a GitHub account, we'll use your GitHub username, instead of
# this name.
- git config --global user.name "Travis"
- git checkout $TRAVIS_BRANCH
- find . -name \*.py -exec autopep8 --recursive --aggressive --aggressive --in-place {} +
- num_errors_after=`find . -name \*.py -exec pep8 --ignore=E402 {} + | wc -l`
- echo $num_errors_after
- |
if (( $num_errors_after < $num_errors_before )); then
git commit -a -m "PEP-8 Fix"
git config --global push.default simple # Push only to the current branch.
# Make sure to make the output quiet, or else the API token will
# leak! This works because the API key can replace your password.
git push --quiet
fi
- cd "$TRAVIS_BUILD_DIR"
# List the remaining errors - these will have to be fixed manually
- find . -name \*.py -exec pep8 --ignore=E402 {} +
I've so far only tested this on a repository that only I can edit. I'm not totally clear how to get this to work when other people are also making commits. The answer may have to do with these two things, however:
http://stackoverflow.com/questions/23277391/how-to-publish-to-github-pages-from-travis-ci
STEP 1. Get a Personal Access Token under https://github.com/settings/tokens
Only enable "public_repo" access for public repositories, "repo" for private.
Save the token somewhere as you can only see it once.
STEP 2. On the Travis settings for the repository https://travis-ci.org///settings create an environment variable:
GITHUB_API_KEY=<token>
and make sure to mark "Display value in build log" as "Off".
This is safe because only authorized pushes by you see such environment variables, so if a malicious user tries to make a pull request to get your string, the variable won't be there.
Just make sure that you never, ever list your environment variables on your build!
In summary, we can't control the way Travis-ci clones the repository. This means the remote isn't setup with authentication credentials, so we remove the remote, and add the remote with credentials:
cd clonedrepofolder git remote rm origin git remote add origin https://username:${GH_TOKEN}@github.com/username/repo.git
Hi,
Glad to see your travis config with pep8.
I tried your config but I found if there are errors, the travis does not show "Failed", see console log here:
Do you meet this issue? Thx
./src/base/BatmanSBApi.py:12:1: E302 expected 2 blank lines, found 1
./src/base/BatmanSBApi.py:21:1: E302 expected 2 blank lines, found 1
./src/base/BatmanSBApi.py:23:1: W293 blank line contains whitespace
2 E302 expected 2 blank lines, found 1
1 W293 blank line contains whitespace
The command "find . -name *.py -exec pep8 --statistics {} ;" exited with 0.
Done. Your build exited with 0.