From 0c8b4c7614db57a5f2f56b72f79d7dedd787a006 Mon Sep 17 00:00:00 2001 From: Michael Holler Date: Wed, 22 Nov 2017 16:46:00 -0600 Subject: Add support for Python lib continuous deployment. Use a combination of travis and twine to publish to PyPI. New publications will be made: * When `master` is updated. This will trigger the publication of a the Python artifact versioned an iso-compliant build datetime. In this way, the cutting edge version will always be available via PyPI. * When a new git tag is pushed. Tag pushes trigger the publication of a python artifact with the same version as the git tag, with the leading `v` stripped if present (`v1.2.3` becomes `1.2.3`). Publications rely on Travis having a PYPI_PASSWORD environment set in the project settings. See the Travis CI documentation for information on [setting environment variables which containing sensitive data][1]. Make extra sure the "Display value in build log" switch is OFF. In addition to setting the previously mentioned `PYPI_PASSWORD` environment variable, the owner of the PyPI `flatbuffers` repository should, after merging this commit into master, add his own commit to change `mikeholler` in `.travis/deploy-python.sh` to his username. It's also recommended that the owner of `flatbuffers` use a separate account in the unlikely event that the environment variable somehow becomes compromised. Again, this is very unlikely, since the environment variable is only set for "safe" builds approved by maintainers (not on random pull requests). [1]: https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings --- python/.gitignore | 2 ++ python/setup.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 python/.gitignore (limited to 'python') diff --git a/python/.gitignore b/python/.gitignore new file mode 100644 index 00000000..a7719469 --- /dev/null +++ b/python/.gitignore @@ -0,0 +1,2 @@ +/dist/ +/*.egg-info/ diff --git a/python/setup.py b/python/setup.py index 39afef34..5aadef44 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', -- cgit v1.2.3