From c0397c1489522eb4daf31b4b6d9e6bb1b9ef79e1 Mon Sep 17 00:00:00 2001 From: Kristof Daja Date: Sat, 12 Dec 2020 00:46:22 +0100 Subject: [PATCH] Removed travis.yml in favor of GitHub Workflows Configuring GitHub Workflows --- .github/workflows/publish-to-test-pypi.yml | 6 +- .gitignore | 1 + .travis.yml | 31 ----- MANIFEST.in | 2 + setup.py | 13 +-- version.py | 126 +++++++++++++++++++++ 6 files changed, 139 insertions(+), 40 deletions(-) delete mode 100644 .travis.yml create mode 100644 version.py diff --git a/.github/workflows/publish-to-test-pypi.yml b/.github/workflows/publish-to-test-pypi.yml index 3619399..e9a5c9f 100644 --- a/.github/workflows/publish-to-test-pypi.yml +++ b/.github/workflows/publish-to-test-pypi.yml @@ -8,10 +8,10 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@master - - name: Set up Python 3.7 + - name: Set up Python 3.8 uses: actions/setup-python@v1 with: - python-version: 3.7 + python-version: 3.8 - name: Install pypa/build run: >- python -m @@ -23,6 +23,8 @@ jobs: python setup.py bdist_wheel + sdist + --formats=gztar,zip - name: Publish distribution 📦 to Test PyPI if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@master diff --git a/.gitignore b/.gitignore index 70d4aa2..96c5dbc 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ wheels/ .installed.cfg *.egg MANIFEST +RELEASE-VERSION # PyInstaller # Usually these files are written by a python script from a template diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9928815..0000000 --- a/.travis.yml +++ /dev/null @@ -1,31 +0,0 @@ -# language -language: python -cache: pip -python: - - "3.8" - - "3.9-dev" - -# host environment -os: linux -dist: bionic - -# command to install dependencies -install: - - pip install -r requirements.txt - -# command to run tests -script: - - python manage.py test # Execute Django tests - -# Deploy to PyPI (on tag) -deploy: - before_script: python freeze_git_tag.py --skip-confirm - skip_cleanup: true # The git tag gets written to setup.py just before PyPI deployment - provider: pypi - username: __token__ - password: - secure: r8e1zT7bJUitQ1fj7vw+WpuijhcByCA1NkLsDEudf6ZyAmRLQuEB0QuigBM4SvpE7xycR7CWI9UAa+yyxWVmSp9qZyCPL6rwSFmKgOmFHMIwywisK4XhyqIyM+4eY21FKqm8pUm0X8W2u/TbIvZITkp0/tl1ICvB+QSTCPWKnp3/AhVcP2ge0YEQIdOBO9OvcU9eyDy/8WYJKgmbpJxAM8Bsnn5+sGJOk6PUW2+yQpgOYkkHGSXxpGvlJmlRzJlYjj1X/kFqEJ3Qutm0pVmO+aygCMC7ZByFJ6CyD7JHIXIADAihLfX7j3do/MNZRBIfCSPIfPDvkAbzNOZ7jQ+tVptEqAT6YMBLpSbSY+kBvdRSmGSGDC0fyTaThVcnm6RuWlqCM6Pedo6Cnt5b2cqdOQRvHHK5K4KOCWucqVH/zsCtjIltEMU2ATReuLj0KB9dxoCQarFmqDIVc8B3kLVInEPWblO3ayf9LJUtAGOt4Vx203muQG7iSS9QviHpfIVg42j9eA9GcHXlPCJumbdkcV4atn6KEreF/Yqar8xo6G2Nrx/xC7fF+wtAQrTHMwS1i9bVKFODT8ULD1k/3s64F4wyDcINY7gphh7/H9EHiViNjpQXeHKWfVbM+vg1ydxmuGJGYOmB2OuzI6KBO949JUrsGc85p8ft5GWWQnMBScM= - on: - tags: true - python: '3.8' - distributions: "sdist" diff --git a/MANIFEST.in b/MANIFEST.in index 8317a75..bbb4b32 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,6 @@ include LICENSE include README.md +include RELEASE-VERSION +include version.py # recursive-include docs * recursive-include django_minio_backend/management * diff --git a/setup.py b/setup.py index 728593f..e7b7750 100644 --- a/setup.py +++ b/setup.py @@ -1,24 +1,22 @@ import os -import datetime +from datetime import datetime from setuptools import find_packages, setup +from version import get_git_version + with open("README.md", "r") as readme_file: long_description = readme_file.read() # allow setup.py to be run from any path os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) -CURRENT_GIT_TAG = 'v2.5.0' -year = datetime.datetime.now().year - -print(f'setup.py :: Using git tag {CURRENT_GIT_TAG}') setup( name='django-minio-backend', - version=CURRENT_GIT_TAG, + version=get_git_version(), packages=find_packages(), include_package_data=True, - license=f'MIT License | Copyright (c) {year} Kristof Daja', + license=f'MIT License | Copyright (c) {datetime.now().year} Kristof Daja', description='The django-minio-backend provides a wrapper around the MinIO Python Library.', long_description=long_description, long_description_content_type="text/markdown", @@ -36,6 +34,7 @@ 'Framework :: Django :: 2.1', 'Framework :: Django :: 2.2', 'Framework :: Django :: 3.0', + 'Framework :: Django :: 3.1', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', diff --git a/version.py b/version.py new file mode 100644 index 0000000..e3ce89e --- /dev/null +++ b/version.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +# Author: Douglas Creager +# Modifier: Kristof Daja +# This file is placed into the public domain. + +# Calculates the current version number. If possible, this is the +# output of “git describe”, modified to conform to the versioning +# scheme that setuptools uses. If “git describe” returns an error +# (most likely because we're in an unpacked copy of a release tarball, +# rather than in a git working copy), then we fall back on reading the +# contents of the RELEASE-VERSION file. +# +# To use this script, simply import it your setup.py file, and use the +# results of get_git_version() as your package version: +# +# from version import * +# +# setup( +# version=get_git_version(), +# . +# . +# . +# ) +# +# +# This will automatically update the RELEASE-VERSION file, if +# necessary. Note that the RELEASE-VERSION file should *not* be +# checked into git; please add it to your top-level .gitignore file. +# +# You'll probably want to distribute the RELEASE-VERSION file in your +# sdist tarballs; to do this, just create a MANIFEST.in file that +# contains the following line: +# +# include RELEASE-VERSION +# +# Change History: +# 2020-12-12 - Updated for Python 3. Changed git describe --abbrev=7 to git describe --tags +# + +__all__ = ["get_git_version"] + +from subprocess import Popen, PIPE + + +def call_git_describe(): + # noinspection PyBroadException + try: + p = Popen(['git', 'describe', '--tags'], + stdout=PIPE, stderr=PIPE) + p.stderr.close() + line = p.stdout.readlines()[0] + return line.strip().decode('utf-8') + + except Exception: + return None + + +def is_dirty(): + # noinspection PyBroadException + try: + p = Popen(["git", "diff-index", "--name-only", "HEAD"], + stdout=PIPE, stderr=PIPE) + p.stderr.close() + lines = p.stdout.readlines() + return len(lines) > 0 + except Exception: + return False + + +def read_release_version(): + # noinspection PyBroadException + try: + f = open("RELEASE-VERSION", "r") + + try: + version = f.readlines()[0] + return version.strip() + + finally: + f.close() + + except Exception: + return None + + +def write_release_version(version): + f = open("RELEASE-VERSION", "w") + f.write("%s\n" % version) + f.close() + + +def get_git_version(): + # Read in the version that's currently in RELEASE-VERSION. + + release_version = read_release_version() + + # First try to get the current version using “git describe”. + + version = call_git_describe() + if is_dirty(): + version += "-dirty" + + # If that doesn't work, fall back on the value that's in + # RELEASE-VERSION. + + if version is None: + version = release_version + + # If we still don't have anything, that's an error. + + if version is None: + raise ValueError("Cannot find the version number!") + + # If the current version is different from what's in the + # RELEASE-VERSION file, update the file to be current. + + if version != release_version: + write_release_version(version) + + # Finally, return the current version. + + return version + + +if __name__ == "__main__": + print(get_git_version())