fix release tool, refs #947

This commit is contained in:
Maximilian Hils 2016-02-16 00:22:38 +01:00
parent f864266ccc
commit 10f9b6faa7
11 changed files with 84 additions and 101 deletions

View File

@ -1,27 +1,30 @@
1126 Aldo Cortesi
881 Maximilian Hils
109 Thomas Kriechbaumer
1813 Aldo Cortesi
1228 Maximilian Hils
282 Thomas Kriechbaumer
83 Marcelo Glezer
28 Jim Shaver
18 Henrik Nordstrom
17 Shadab Zafar
14 David Weinstein
14 Pedro Worcel
13 Thomas Roth
12 Pedro Worcel
11 Jake Drahos
11 Justus Wingert
11 Stephen Altamirano
10 András Veres-Szentkirályi
10 Chris Czub
10 Sandor Nemes
9 Kyle Morton
9 Legend Tang
9 Matthew Shao
9 Rouli
8 Chandler Abraham
8 Jason A. Novak
8 Rouli
7 Alexis Hildebrandt
7 Sandor Nemes
5 Brad Peabody
7 Brad Peabody
7 Matthias Urlichs
5 Choongwoo Han
5 Matthias Urlichs
5 Sam Cleveland
5 Tomaz Muraus
5 elitest
5 iroiro123
@ -32,8 +35,10 @@
4 Wade 524
4 Youhei Sakurai
4 root
3 Benjamin Lee
3 Chris Neasbitt
3 Eli Shvartsman
3 Felix Yan
3 Guillem Anguera
3 Kyle Manna
3 MatthewShao
@ -43,6 +48,7 @@
2 Bennett Blodinger
2 Colin Bendell
2 Heikki Hannikainen
2 Israel Nir
2 Jaime Soriano Pastor
2 Jim Lloyd
2 Krzysztof Bielicki
@ -50,14 +56,19 @@
2 Michael Frister
2 Nick Badger
2 Niko Kommenda
2 Paul
2 Rob Wills
2 Sean Coates
2 Terry Long
2 Wade Catron
2 alts
2 isra17
2 israel
2 requires.io
1 Andrey Plotnikov
1 Andy Smith
1 Ben Lerner
1 Bradley Baetz
1 Chris Hamant
1 Dan Wilbraham
1 David Dworken
@ -65,7 +76,6 @@
1 Doug Lethin
1 Eric Entzel
1 Felix Wolfsteller
1 Felix Yan
1 FreeArtMan
1 Gabriel Kirkpatrick
1 Henrik Nordström
@ -77,8 +87,8 @@
1 Jean Regisser
1 Jorge Villacorta
1 Kit Randel
1 Kyle Morton
1 Lucas Cimon
1 M. Utku Altinkaya
1 Mathieu Mitchell
1 Michael Bisbjerg
1 Mike C
@ -88,7 +98,7 @@
1 Nick Raptis
1 Nicolas Esteves
1 Oleksandr Sheremet
1 Paul
1 Pritam Baral
1 Rich Somerfield
1 Rory McCann
1 Rune Halvorsen
@ -102,6 +112,7 @@
1 Suyash
1 Tarashish Mishra
1 TearsDontFalls
1 Tim Becker
1 Timothy Elliott
1 Ulrich Petri
1 Vyacheslav Bakhmutov
@ -113,11 +124,13 @@
1 gecko655
1 jlhonora
1 joebowbeer
1 kronick
1 meeee
1 michaeljau
1 peralta
1 phil plante
1 sentient07
1 sethp-jive
1 starenka
1 vzvu3k6k
1 依云

View File

@ -12,3 +12,4 @@ echo.
echo * Created virtualenv environment in %VENV%.
echo * Installed all dependencies into the virtualenv.
echo * Activated virtualenv environment.
pause

View File

@ -53,7 +53,7 @@ setup(
# https://packaging.python.org/en/latest/requirements/#install-requires
# It is not considered best practice to use install_requires to pin dependencies to specific versions.
install_requires=[
"netlib>={}, <{}".format(version.MINORVERSION, version.NEXT_MINORVERSION),
"netlib=={}".format(version.VERSION),
"h2>=2.1.0, <2.2",
"tornado>=4.3, <4.4",
"configargparse>=0.10, <0.11",
@ -88,9 +88,9 @@ setup(
"pytest-cov>=2.2.1, <2.3",
"pytest-timeout>=1.0.0, <1.1",
"coveralls>=1.1, <1.2",
"pathod>={}, <{}".format(version.MINORVERSION, version.NEXT_MINORVERSION),
"pathod=={}".format(version.VERSION),
"sphinx>=1.3.5, <1.4",
"sphinx-autobuild>=0.5.2, <0.6",
"sphinx-autobuild>=0.5.2, <0.7",
"sphinxcontrib-documentedlist>=0.3.0, <0.4"
],
'contentviews': [

View File

@ -2,10 +2,5 @@ from __future__ import (absolute_import, print_function, division)
IVERSION = (0, 17)
VERSION = ".".join(str(i) for i in IVERSION)
MINORVERSION = ".".join(str(i) for i in IVERSION[:2])
NAME = "netlib"
NAMEVERSION = NAME + " " + VERSION
NEXT_MINORVERSION = list(IVERSION)
NEXT_MINORVERSION[1] += 1
NEXT_MINORVERSION = ".".join(str(i) for i in NEXT_MINORVERSION[:2])

View File

@ -48,7 +48,7 @@ setup(
]
},
install_requires=[
"netlib>=%s, <%s" % (version.MINORVERSION, version.NEXT_MINORVERSION),
"netlib=={}".format(version.VERSION),
"requests>=2.9.1, <2.10",
"Flask>=0.10.1, <0.11",
"pyparsing>=2.1,<2.2"

View File

@ -2,7 +2,7 @@
from PyInstaller.utils.hooks import collect_data_files
a = Analysis(['../mitmdump'],
a = Analysis(['../mitmproxy/mitmdump'],
binaries=None,
datas=collect_data_files("libmproxy.onboarding"),
hiddenimports=[],

View File

@ -2,7 +2,7 @@
from PyInstaller.utils.hooks import collect_data_files
a = Analysis(['../mitmproxy'],
a = Analysis(['../mitmproxy/mitmproxy'],
binaries=None,
datas=collect_data_files("libmproxy.onboarding"),
hiddenimports=[],

View File

@ -2,7 +2,7 @@
from PyInstaller.utils.hooks import collect_data_files
a = Analysis(['../mitmweb'],
a = Analysis(['../mitmproxy/mitmweb'],
binaries=None,
datas=collect_data_files("libmproxy"),
hiddenimports=[],

View File

@ -2,7 +2,7 @@
from PyInstaller.utils.hooks import collect_data_files
a = Analysis(['../pathoc'],
a = Analysis(['../pathod/pathoc'],
binaries=None,
datas=None,
hiddenimports=['_cffi_backend'],

View File

@ -2,7 +2,7 @@
from PyInstaller.utils.hooks import collect_data_files
a = Analysis(['../pathod'],
a = Analysis(['../pathod/pathod'],
binaries=None,
datas=collect_data_files("libpathod"),
hiddenimports=['_cffi_backend'],

View File

@ -14,7 +14,6 @@ import platform
import click
import pysftp
import fnmatch
from six.moves import shlex_quote
# https://virtualenv.pypa.io/en/latest/userguide.html#windows-notes
# scripts and executables on Windows go in ENV\Scripts\ instead of ENV/bin/
@ -34,7 +33,8 @@ else:
RELEASE_DIR = join(os.path.dirname(os.path.realpath(__file__)))
DIST_DIR = join(RELEASE_DIR, "dist")
ROOT_DIR = join(RELEASE_DIR, "..")
ROOT_DIR = os.path.normpath(join(RELEASE_DIR, ".."))
VERSION_FILE = join(ROOT_DIR, "netlib/netlib/version.py")
BUILD_DIR = join(RELEASE_DIR, "build")
PYINSTALLER_TEMP = join(BUILD_DIR, "pyinstaller")
@ -47,19 +47,16 @@ VENV_PYINSTALLER = join(VENV_DIR, VENV_BIN, "pyinstaller")
ALL_PROJECTS = {
"netlib": {
"tools": [],
"vfile": join(ROOT_DIR, "netlib/netlib/version.py"),
"dir": join(ROOT_DIR, "netlib"),
"python_version": "py2.py3" # this is the format in wheel filenames
},
"pathod": {
"tools": ["pathod", "pathoc"],
"vfile": join(ROOT_DIR, "pathod/libpathod/version.py"),
"dir": join(ROOT_DIR, "pathod"),
"python_version": "py2"
},
"mitmproxy": {
"tools": ["mitmproxy", "mitmdump", "mitmweb"],
"vfile": join(ROOT_DIR, "mitmproxy/libmproxy/version.py"),
"dir": join(ROOT_DIR, "mitmproxy"),
"python_version": "py2"
}
@ -70,21 +67,18 @@ if platform.system() == "Windows":
projects = {}
def get_version(project):
return runpy.run_path(projects[project]["vfile"])["VERSION"]
def get_version():
return runpy.run_path(VERSION_FILE)["VERSION"]
def get_snapshot_version(project):
last_tag, tag_dist, commit = subprocess.check_output(
["git", "describe", "--tags", "--long"],
cwd=projects[project]["dir"]
).strip().rsplit("-", 2)
def get_snapshot_version():
last_tag, tag_dist, commit = git("describe --tags --long").strip().rsplit(b"-", 2)
tag_dist = int(tag_dist)
if tag_dist == 0:
return get_version(project)
return get_version()
else:
return "{version}dev{tag_dist:04}-{commit}".format(
version=get_version(project), # this should already be the next version
version=get_version(), # this should already be the next version
tag_dist=tag_dist,
commit=commit
)
@ -102,7 +96,7 @@ def archive_name(project):
ext = "tar.gz"
return "{project}-{version}-{platform}.{ext}".format(
project=project,
version=get_version(project),
version=get_version(),
platform=platform_tag,
ext=ext
)
@ -111,14 +105,14 @@ def archive_name(project):
def sdist_name(project):
return "{project}-{version}.tar.gz".format(
project=project,
version=get_version(project)
version=get_version()
)
def wheel_name(project):
return "{project}-{version}-{py_version}-none-any.whl".format(
project=project,
version=get_version(project),
version=get_version(),
py_version=projects[project]["python_version"]
)
@ -143,6 +137,11 @@ def chdir(path):
os.chdir(old_dir)
def git(args):
with chdir(ROOT_DIR):
return subprocess.check_output(["git"] + shlex.split(args))
@click.group(chain=True)
@click.option(
'--project', '-p',
@ -161,14 +160,11 @@ def contributors():
"""
Update CONTRIBUTORS.md
"""
for project, conf in projects.items():
with chdir(conf["dir"]):
print("Updating %s/CONTRIBUTORS..." % project)
contributors_data = subprocess.check_output(
shlex.split("git shortlog -n -s")
)
with open("CONTRIBUTORS", "w") as f:
f.write(contributors_data)
with chdir(ROOT_DIR):
print("Updating CONTRIBUTORS...")
contributors_data = git("shortlog -n -s")
with open("CONTRIBUTORS", "w") as f:
f.write(contributors_data)
@cli.command("set-version")
@ -179,35 +175,15 @@ def set_version(version):
"""
print("Update versions...")
version = ", ".join(version.split("."))
for p, conf in projects.items():
print("Update %s..." % os.path.normpath(conf["vfile"]))
with open(conf["vfile"], "rb") as f:
content = f.read()
new_content = re.sub(
r"IVERSION\s*=\s*\([\d,\s]+\)", "IVERSION = (%s)" % version,
content
)
with open(conf["vfile"], "wb") as f:
f.write(new_content)
def _git(project, args):
print("%s> %s..." % (project, " ".join(shlex_quote(a) for a in args)))
subprocess.check_call(
["git"] + list(args),
cwd=projects[project]["dir"]
print("Update %s..." % VERSION_FILE)
with open(VERSION_FILE, "rb") as f:
content = f.read()
new_content = re.sub(
r"IVERSION\s*=\s*\([\d,\s]+\)", "IVERSION = (%s)" % version,
content
)
@cli.command("git")
@click.argument('args', nargs=-1, required=True)
def git(args):
"""
Run a git command on every project
"""
for project, conf in projects.items():
_git(project, args)
print("")
with open(VERSION_FILE, "wb") as f:
f.write(new_content)
@cli.command("sdist")
@ -274,7 +250,7 @@ def bdist(ctx, use_existing_sdist, pyinstaller_version):
if conf["tools"]:
with Archive(join(DIST_DIR, archive_name(p))) as archive:
for tool in conf["tools"]:
spec = join(conf["dir"], "release", "%s.spec" % tool)
spec = join(RELEASE_DIR, "%s.spec" % tool)
print("Building %s binary..." % tool)
subprocess.check_call(
[
@ -347,7 +323,7 @@ def upload_snapshot(host, port, user, private_key, private_key_password, sdist,
private_key=private_key,
private_key_pass=private_key_password) as sftp:
for project, conf in projects.items():
dir_name = "snapshots/v{}".format(get_version(project))
dir_name = "snapshots/v{}".format(get_version())
sftp.makedirs(dir_name)
with sftp.cd(dir_name):
files = []
@ -360,15 +336,17 @@ def upload_snapshot(host, port, user, private_key, private_key_password, sdist,
for f in files:
local_path = join(DIST_DIR, f)
remote_filename = f.replace(get_version(project), get_snapshot_version(project))
symlink_path = "../{}".format(f.replace(get_version(project), "latest"))
remote_filename = f.replace(get_version(), get_snapshot_version())
symlink_path = "../{}".format(f.replace(get_version(), "latest"))
old_version = f.replace(get_version(project), "*")
for f in sftp.listdir():
if fnmatch.fnmatch(f, old_version):
print("Removing {}...".format(f))
sftp.remove(f)
# Delete old versions
old_version = f.replace(get_version(), "*")
for f_old in sftp.listdir():
if fnmatch.fnmatch(f_old, old_version):
print("Removing {}...".format(f_old))
sftp.remove(f_old)
# Upload new version
print("Uploading {} as {}...".format(f, remote_filename))
with click.progressbar(length=os.stat(local_path).st_size) as bar:
sftp.put(
@ -379,11 +357,11 @@ def upload_snapshot(host, port, user, private_key, private_key_password, sdist,
# We hide the file during upload.
sftp.rename("." + remote_filename, remote_filename)
# add symlink
# update symlink for the latest release
if sftp.lexists(symlink_path):
print("Removing {}...".format(symlink_path))
sftp.remove(symlink_path)
sftp.symlink("v{}/{}".format(get_version(project), remote_filename), symlink_path)
sftp.symlink("v{}/{}".format(get_version(), remote_filename), symlink_path)
@cli.command("wizard")
@ -396,10 +374,9 @@ def wizard(ctx, next_version, username, password, repository):
"""
Interactive Release Wizard
"""
for project, conf in projects.items():
is_dirty = subprocess.check_output(["git", "status", "--porcelain"], cwd=conf["dir"])
if is_dirty:
raise RuntimeError("%s repository is not clean." % project)
is_dirty = git("status --porcelain")
if is_dirty:
raise RuntimeError("Repository is not clean.")
# update contributors file
ctx.invoke(contributors)
@ -411,13 +388,12 @@ def wizard(ctx, next_version, username, password, repository):
click.confirm("Please test the release now. Is it ok?", abort=True)
except click.Abort:
# undo changes
ctx.invoke(git, args=["checkout", "CONTRIBUTORS"])
git("checkout CONTRIBUTORS")
raise
# Everything ok - let's ship it!
for p in projects.keys():
_git(p, ["tag", "v" + get_version(p)])
ctx.invoke(git, args=["push", "--tags"])
git("tag v{}".format(get_version()))
git("push --tags")
ctx.invoke(
upload_release,
username=username, password=password, repository=repository
@ -427,10 +403,8 @@ def wizard(ctx, next_version, username, password, repository):
# version bump commit
ctx.invoke(set_version, version=next_version)
ctx.invoke(
git, args=["commit", "-a", "-m", "bump version"]
)
ctx.invoke(git, args=["push"])
git("commit -a -m \"bump version\"")
git("push")
click.echo("All done!")