diff options
| author | Lex Neva <lexelby@users.noreply.github.com> | 2018-01-13 20:18:50 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-13 20:18:50 -0500 |
| commit | 8bab858be6699bf393694dfe05c2c49f01e5c27a (patch) | |
| tree | 8b51736007099318b80170148a36e5c98c5f80fd /.travis.yml | |
| parent | f244f58a17c2a35a499424da4935c12b0385715b (diff) | |
pyinstaller release method (#16)
pyinstaller packages up all of a python script's dependencies and builds them into standalone executables. It can either do a directory (containing a single executable and a bunch of shared libraries) or a self-contained executable that effectively just contains a compressed version of the directory.
The problem is, if you have several scripts like we do, you get several large directories or standalone binaries, and there's a ton of duplication between them. Fortunately it looks like using the directory method and just combining the directories works fine (for this project).
This PR runs the above build on any tagged commit and publishes a release in github containing the pyinstall-ified tarball. If the tag is named like "v1.2.3" _and_ the tag is on the master branch, then the github release will be marked as "production". Otherwise, it will be marked as a "pre-release". This means that we can build testable tarballs of the extension in a pull request by tagging a commit.
Diffstat (limited to '.travis.yml')
| -rw-r--r-- | .travis.yml | 103 |
1 files changed, 88 insertions, 15 deletions
diff --git a/.travis.yml b/.travis.yml index 2a6e9669..4e8ddd04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,94 @@ language: python -cache: pip -python: - - 2.7 - - 3.6 +virtualenv: + # We need this for PyGObject. + system_site_packages: true matrix: - allow_failures: - - python: 3.6 + include: + # always lint on every commit + - python: 2.7 + env: LINT=true + sudo: false + + # only bother to build if we're going to deploy a release + - python: 2.7 + sudo: required + env: BUILD=true + if: tag is present +cache: pip install: - # - pip install -r requirements.txt - - pip install flake8 # pytest # add another testing frameworks later + - | + if [ -n "$BUILD" ]; then + # For some bizarre reason, this build has been failing due to the + # key for the mongodb repo expiring. Maybe Travis includes the + # mongodb repo by default...? + sudo rm /etc/apt/sources.list.d/mongodb*.list + + # Need inkscape >=0.92 for inkex.py and friends + sudo add-apt-repository --yes ppa:inkscape.dev/stable + sudo apt-get update + sudo apt-get install inkscape + + # for shapely + sudo apt-get install libgeos-dev + + # for wxPython + sudo apt-get install glib-networking + + # This is the same as the pypi module PyGObject. We can't just do + # "pip install PyGObject" because it depends on a version of + # libgirepository1.0-dev that doesn't exist in Trusty. + sudo apt-get install python-gi python-gi-cairo libgirepository1.0-dev + + # wxPython doen't publish linux wheels in pypi + wget https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-14.04/wxPython-4.0.0b2-cp27-cp27mu-linux_x86_64.whl + pip install wxPython-4.0.0b2-cp27-cp27mu-linux_x86_64.whl + + # We can't use the shapely wheel because it includes the geos + # library but with a weird file name. Details: + # https://github.com/pyinstaller/pyinstaller/blob/61b1c75c2b0469b32d114298a63bf60b8d597e37/PyInstaller/hooks/hook-shapely.py#L34 + pip install --no-binary shapely -r requirements.txt + + pip install pyinstaller + else + pip install flake8 + fi before_script: - # stop the build if there are Python syntax errors or undefined names - - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - "echo LINT: $LINT BUILD: $BUILD" script: - - true # pytest --capture=sys # add other tests here + - | + if [ -n "$LINT" ]; then + flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + elif [ -n "$BUILD" ]; then + make dist + else + true + fi notifications: - on_success: change - on_failure: change # `always` will be the setting once code changes slow down + on_success: never + on_failure: never +deploy: + - provider: releases + api_key: + secure: pYORXHcn0hPcMIo6+brVE+wYce272H4COp1iXmPvBUz64MAX0Bdm5UX6cTAvzwNd9Hhi2nnWebaoS5AiPelbZgQoZJXsy4whrp7+ZrkQZkhGcqsSqXN6j5k5xdGeFX4k37T7eGkFyajTAdIWB3locHcikKN6N6PnyCPxGD/xuxiD1fJSVKGqBOptBYsqFtMddKy3aT0nmRG/2pMElq2Fcxozo+rR00j2/3npVoh2VTRt2L0S/DrX3zKT4vi2+AQ1MmKEAfF/YxCPybJGPe+wHz4egs0+PIJYb7pSZL8Ja81IS4v5cmmy/r2la815amyRyXwZXbJwBX8h9wPa7dwGStMvJdUidlqaXjKMsWba3QbD6YHOi0+UOFvWeubCDqXKhqxVAvZyCvXCx2WPlBfGWsJDHK/j2pU5Iul5Jz2Zsa3PLYA3UeGWVy081SZNuklNdccKGTokntFnR3pGM/jDN/JK7RkvuPM5qQqn3gludQnrdo/Kw0I77hAEDasgUyO8cweSfyqOXBN0dkbLjfBVRslRRRuC5fV9MIqFvLclaPfMlxsSTdDO4MGJRsF7VvFySBdh0xK7Rm+Vb9jYjCR3FV+b8TRsnY0eD2eFM+rmQt/OYdNIs6emVrTXCcAIzq4JoKZdFDIDDRsiztGSjIBB0+rSXmiUMtCiUo5GS/7zxGs= + file: + - '*.tar.gz' + file_glob: true + skip_cleanup: true + on: + tag: true + branch: master + condition: "$TRAVIS_TAG =~ ^v[0-9.]+$" + - provider: releases + api_key: + secure: pYORXHcn0hPcMIo6+brVE+wYce272H4COp1iXmPvBUz64MAX0Bdm5UX6cTAvzwNd9Hhi2nnWebaoS5AiPelbZgQoZJXsy4whrp7+ZrkQZkhGcqsSqXN6j5k5xdGeFX4k37T7eGkFyajTAdIWB3locHcikKN6N6PnyCPxGD/xuxiD1fJSVKGqBOptBYsqFtMddKy3aT0nmRG/2pMElq2Fcxozo+rR00j2/3npVoh2VTRt2L0S/DrX3zKT4vi2+AQ1MmKEAfF/YxCPybJGPe+wHz4egs0+PIJYb7pSZL8Ja81IS4v5cmmy/r2la815amyRyXwZXbJwBX8h9wPa7dwGStMvJdUidlqaXjKMsWba3QbD6YHOi0+UOFvWeubCDqXKhqxVAvZyCvXCx2WPlBfGWsJDHK/j2pU5Iul5Jz2Zsa3PLYA3UeGWVy081SZNuklNdccKGTokntFnR3pGM/jDN/JK7RkvuPM5qQqn3gludQnrdo/Kw0I77hAEDasgUyO8cweSfyqOXBN0dkbLjfBVRslRRRuC5fV9MIqFvLclaPfMlxsSTdDO4MGJRsF7VvFySBdh0xK7Rm+Vb9jYjCR3FV+b8TRsnY0eD2eFM+rmQt/OYdNIs6emVrTXCcAIzq4JoKZdFDIDDRsiztGSjIBB0+rSXmiUMtCiUo5GS/7zxGs= + file: + - '*.tar.gz' + file_glob: true + skip_cleanup: true + prerelease: true + name: "development build $TRAVIS_TAG" + on: + tag: true + all_branches: true + condition: '! "$TRAVIS_TAG" =~ ^v[0-9.]+$' |
