-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #381 from madig/switch-to-setuptools_scm
Switch from bump_version to setuptools_scm
- Loading branch information
Showing
3 changed files
with
8 additions
and
142 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,7 @@ __pycache__/ | |
*.eggs | ||
build | ||
dist | ||
_version.py | ||
|
||
# Unit test | ||
.cache/ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,147 +13,13 @@ | |
# limitations under the License. | ||
|
||
import sys | ||
from setuptools import setup, find_packages, Command | ||
from distutils import log | ||
|
||
|
||
class bump_version(Command): | ||
|
||
description = "increment the package version and commit the changes" | ||
|
||
user_options = [ | ||
("major", None, "bump the first digit, for incompatible API changes"), | ||
("minor", None, "bump the second digit, for new backward-compatible features"), | ||
("patch", None, "bump the third digit, for bug fixes (default)"), | ||
] | ||
|
||
def initialize_options(self): | ||
self.minor = False | ||
self.major = False | ||
self.patch = False | ||
|
||
def finalize_options(self): | ||
part = None | ||
for attr in ("major", "minor", "patch"): | ||
if getattr(self, attr, False): | ||
if part is None: | ||
part = attr | ||
else: | ||
from distutils.errors import DistutilsOptionError | ||
raise DistutilsOptionError( | ||
"version part options are mutually exclusive") | ||
self.part = part or "patch" | ||
|
||
def bumpversion(self, part, **kwargs): | ||
""" Run bumpversion.main() with the specified arguments. | ||
""" | ||
import bumpversion | ||
|
||
args = ['--verbose'] if self.verbose > 1 else [] | ||
for k, v in kwargs.items(): | ||
k = "--{}".format(k.replace("_", "-")) | ||
is_bool = isinstance(v, bool) and v is True | ||
args.extend([k] if is_bool else [k, str(v)]) | ||
args.append(part) | ||
|
||
log.debug( | ||
"$ bumpversion %s" % " ".join(a.replace(" ", "\\ ") for a in args)) | ||
|
||
bumpversion.main(args) | ||
|
||
def run(self): | ||
log.info("bumping '%s' version" % self.part) | ||
self.bumpversion(self.part) | ||
|
||
|
||
class release(bump_version): | ||
"""Drop the developmental release '.devN' suffix from the package version, | ||
open the default text $EDITOR to write release notes, commit the changes | ||
and generate a git tag. | ||
Release notes can also be set with the -m/--message option, or by reading | ||
from standard input. | ||
""" | ||
|
||
description = "tag a new release" | ||
|
||
user_options = [ | ||
("message=", 'm', "message containing the release notes"), | ||
("sign", "s", "make a GPG-signed tag, using the default key"), | ||
] | ||
|
||
def initialize_options(self): | ||
self.message = None | ||
self.sign = False | ||
|
||
def finalize_options(self): | ||
import re | ||
|
||
current_version = self.distribution.metadata.get_version() | ||
if not re.search(r"\.dev[0-9]+", current_version): | ||
from distutils.errors import DistutilsSetupError | ||
raise DistutilsSetupError( | ||
"current version (%s) has no '.devN' suffix.\n " | ||
"Run 'setup.py bump_version' with any of " | ||
"--major, --minor, --patch options" % current_version) | ||
|
||
message = self.message | ||
if message is None: | ||
if sys.stdin.isatty(): | ||
# stdin is interactive, use editor to write release notes | ||
message = self.edit_release_notes() | ||
else: | ||
# read release notes from stdin pipe | ||
message = sys.stdin.read() | ||
|
||
if not message.strip(): | ||
from distutils.errors import DistutilsSetupError | ||
raise DistutilsSetupError("release notes message is empty") | ||
|
||
self.message = "v{new_version}\n\n%s" % message | ||
self.sign = bool(self.sign) | ||
|
||
@staticmethod | ||
def edit_release_notes(): | ||
"""Use the default text $EDITOR to write release notes. | ||
If $EDITOR is not set, use 'nano'.""" | ||
from tempfile import mkstemp | ||
import os | ||
import shlex | ||
import subprocess | ||
|
||
text_editor = shlex.split(os.environ.get('EDITOR', 'nano')) | ||
|
||
fd, tmp = mkstemp(prefix='bumpversion-') | ||
try: | ||
os.close(fd) | ||
with open(tmp, 'w') as f: | ||
f.write("\n\n# Write release notes.\n" | ||
"# Lines starting with '#' will be ignored.") | ||
subprocess.check_call(text_editor + [tmp]) | ||
with open(tmp, 'r') as f: | ||
changes = "".join( | ||
l for l in f.readlines() if not l.startswith('#')) | ||
finally: | ||
os.remove(tmp) | ||
return changes | ||
|
||
def run(self): | ||
log.info("stripping developmental release suffix") | ||
# drop '.dev0' suffix, commit with given message and create git tag | ||
self.bumpversion("release", | ||
tag=True, | ||
message="Release {new_version}", | ||
tag_message=self.message, | ||
sign_tags=self.sign) | ||
from setuptools import setup, find_packages | ||
|
||
|
||
needs_pytest = {'pytest', 'test'}.intersection(sys.argv) | ||
pytest_runner = ['pytest_runner'] if needs_pytest else [] | ||
needs_wheel = {'bdist_wheel'}.intersection(sys.argv) | ||
wheel = ['wheel'] if needs_wheel else [] | ||
needs_bump2version = {'release', 'bump_version'}.intersection(sys.argv) | ||
bump2version = ['bump2version >= 0.5.7'] if needs_bump2version else [] | ||
|
||
with open('README.rst', 'r') as f: | ||
long_description = f.read() | ||
|
@@ -167,7 +33,7 @@ def run(self): | |
|
||
setup( | ||
name='glyphsLib', | ||
version='2.4.1.dev0', | ||
use_scm_version={"write_to": "Lib/glyphsLib/_version.py"}, | ||
author="James Godfrey-Kittle", | ||
author_email="[email protected]", | ||
description="A bridge from Glyphs source files (.glyphs) to UFOs", | ||
|
@@ -182,16 +48,12 @@ def run(self): | |
"glyphs2ufo = glyphsLib.cli:_glyphs2ufo_entry_point", | ||
], | ||
}, | ||
setup_requires=pytest_runner + wheel + bump2version, | ||
setup_requires=pytest_runner + wheel + ["setuptools_scm"], | ||
tests_require=test_requires, | ||
install_requires=[ | ||
"fonttools>=3.24.0", | ||
"defcon>=0.3.0", | ||
], | ||
cmdclass={ | ||
"release": release, | ||
"bump_version": bump_version, | ||
}, | ||
classifiers=[ | ||
'Development Status :: 4 - Beta', | ||
"Environment :: Console", | ||
|