diff --git a/.travis.yml b/.travis.yml index 71847f2982e8cd54e765f06bbbc84e76489188ae..c0bea40bfdee0f29089057c63e076b45a29ff13e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,30 @@ env: - GCC_VERSION="4.9" matrix: include: + - language: python + python: "2.7" + install: + - "pip install wheel twine" + script: + - "cd python/" + - 'VERSION="$TRAVIS_TAG" python setup.py sdist bdist_wheel' + - "cd ../" + deploy: + # Checkpointed release builds. + - provider: script + script: .travis/deploy-python.sh + skip_cleanup: true + on: + tags: true + # all_branches must be set with tags: true. See below post: + # https://stackoverflow.com/a/27775257/1076585 + all_branches: true + # Produce a new build for the cutting edge when master changes. + - provider: script + script: .travis/deploy-python.sh + skip_cleanup: true + on: + branch: master - language: cpp os: - linux diff --git a/.travis/deploy-python.sh b/.travis/deploy-python.sh new file mode 100755 index 0000000000000000000000000000000000000000..4cc03460f53654855e202185b6881bd64cab8076 --- /dev/null +++ b/.travis/deploy-python.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +PROD_REPOSITORY="https://upload.pypi.org/legacy/" +TEST_REPOSITORY="https://test.pypi.org/legacy/" + +twine upload \ + --username "$PYPI_USERNAME" \ + --password "$PYPI_PASSWORD" \ + --repository-url "$PROD_REPOSITORY" \ + "$DIR/../python/dist/"* + diff --git a/python/.gitignore b/python/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a7719469a3a24cf6a67f1721eecdb663438006af --- /dev/null +++ b/python/.gitignore @@ -0,0 +1,2 @@ +/dist/ +/*.egg-info/ diff --git a/python/setup.py b/python/setup.py index 39afef34bceb231e517175945af95793e8049b65..5aadef44a9c09f143779d01bcfa2745b0d4921a9 100644 --- a/python/setup.py +++ b/python/setup.py @@ -12,11 +12,38 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os +from datetime import datetime from setuptools import setup + +def version(): + version = os.getenv('VERSION', None) + if version: + # Most git tags are prefixed with 'v' (example: v1.2.3) this is + # never desirable for artifact repositories, so we strip the + # leading 'v' if it's present. + return version[1:] if version.startswith('v') else version + else: + # Default version is an ISO8601 compiliant datetime. PyPI doesn't allow + # the colon ':' character in its versions, and time is required to allow + # for multiple publications to master in one day. This datetime string + # uses the "basic" ISO8601 format for both its date and time components + # to avoid issues with the colon character (ISO requires that date and + # time components of a date-time string must be uniformly basic or + # extended, which is why the date component does not have dashes. + # + # Publications using datetime versions should only be made from master + # to represent the HEAD moving forward. + version = datetime.utcnow().strftime('%Y%m%d%H%M%S') + print("VERSION environment variable not set, using datetime instead: {}" + .format(version)) + + return version + setup( name='flatbuffers', - version='2015.05.14.0', + version=version(), license='Apache 2.0', author='FlatBuffers Contributors', author_email='me@rwinslow.com',