parent
eee1c7391c
commit
195b17c1ad
@ -104,9 +104,12 @@ def build_osx():
|
|||||||
for d in ['dist', 'build']:
|
for d in ['dist', 'build']:
|
||||||
shutil.rmtree(d)
|
shutil.rmtree(d)
|
||||||
|
|
||||||
|
dmg_name = 'qutebrowser-{}.dmg'.format(qutebrowser.__version__)
|
||||||
|
os.rename('qutebrowser.dmg', dmg_name)
|
||||||
|
|
||||||
utils.print_title("Running smoke test")
|
utils.print_title("Running smoke test")
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
subprocess.check_call(['hdiutil', 'attach', 'qutebrowser.dmg',
|
subprocess.check_call(['hdiutil', 'attach', dmg_name,
|
||||||
'-mountpoint', tmpdir])
|
'-mountpoint', tmpdir])
|
||||||
try:
|
try:
|
||||||
binary = os.path.join(tmpdir, 'qutebrowser.app', 'Contents',
|
binary = os.path.join(tmpdir, 'qutebrowser.app', 'Contents',
|
||||||
@ -115,6 +118,8 @@ def build_osx():
|
|||||||
finally:
|
finally:
|
||||||
subprocess.check_call(['hdiutil', 'detach', tmpdir])
|
subprocess.check_call(['hdiutil', 'detach', tmpdir])
|
||||||
|
|
||||||
|
return [(dmg_name, 'application/x-apple-diskimage', 'OS X .dmg')]
|
||||||
|
|
||||||
|
|
||||||
def build_windows():
|
def build_windows():
|
||||||
"""Build windows executables/setups."""
|
"""Build windows executables/setups."""
|
||||||
@ -128,6 +133,8 @@ def build_windows():
|
|||||||
python_x86 = r'C:\Python{}_x32'.format(ver)
|
python_x86 = r'C:\Python{}_x32'.format(ver)
|
||||||
python_x64 = r'C:\Python{}'.format(ver)
|
python_x64 = r'C:\Python{}'.format(ver)
|
||||||
|
|
||||||
|
artifacts = []
|
||||||
|
|
||||||
utils.print_title("Rebuilding tox environment")
|
utils.print_title("Rebuilding tox environment")
|
||||||
call_tox('cxfreeze-windows', '-r', '--notest')
|
call_tox('cxfreeze-windows', '-r', '--notest')
|
||||||
utils.print_title("Running 32bit freeze.py build_exe")
|
utils.print_title("Running 32bit freeze.py build_exe")
|
||||||
@ -139,15 +146,21 @@ def build_windows():
|
|||||||
utils.print_title("Running 64bit freeze.py bdist_msi")
|
utils.print_title("Running 64bit freeze.py bdist_msi")
|
||||||
call_tox('cxfreeze-windows', 'bdist_msi', python=python_x64)
|
call_tox('cxfreeze-windows', 'bdist_msi', python=python_x64)
|
||||||
|
|
||||||
|
name_32 = 'qutebrowser-{}-win32.msi'.format(qutebrowser.__version__)
|
||||||
|
name_64 = 'qutebrowser-{}-amd64.msi'.format(qutebrowser.__version__)
|
||||||
|
|
||||||
|
artifacts += [
|
||||||
|
(os.path.join('dist', name_32), 'application/x-msi',
|
||||||
|
'Windows 32bit installer'),
|
||||||
|
(os.path.join('dist', name_64), 'application/x-msi',
|
||||||
|
'Windows 64bit installer'),
|
||||||
|
]
|
||||||
|
|
||||||
utils.print_title("Running 32bit smoke test")
|
utils.print_title("Running 32bit smoke test")
|
||||||
smoke_test('build/exe.win32-{}/qutebrowser.exe'.format(dotver))
|
smoke_test('build/exe.win32-{}/qutebrowser.exe'.format(dotver))
|
||||||
utils.print_title("Running 64bit smoke test")
|
utils.print_title("Running 64bit smoke test")
|
||||||
smoke_test('build/exe.win-amd64-{}/qutebrowser.exe'.format(dotver))
|
smoke_test('build/exe.win-amd64-{}/qutebrowser.exe'.format(dotver))
|
||||||
|
|
||||||
destdir = os.path.join('dist', 'zip')
|
|
||||||
_maybe_remove(destdir)
|
|
||||||
os.makedirs(destdir)
|
|
||||||
|
|
||||||
basedirname = 'qutebrowser-{}'.format(qutebrowser.__version__)
|
basedirname = 'qutebrowser-{}'.format(qutebrowser.__version__)
|
||||||
builddir = os.path.join('build', basedirname)
|
builddir = os.path.join('build', basedirname)
|
||||||
_maybe_remove(builddir)
|
_maybe_remove(builddir)
|
||||||
@ -157,26 +170,24 @@ def build_windows():
|
|||||||
qutebrowser.__version__)
|
qutebrowser.__version__)
|
||||||
origin = os.path.join('build', 'exe.win32-{}'.format(dotver))
|
origin = os.path.join('build', 'exe.win32-{}'.format(dotver))
|
||||||
os.rename(origin, builddir)
|
os.rename(origin, builddir)
|
||||||
shutil.make_archive(os.path.join(destdir, name), 'zip', 'build',
|
shutil.make_archive(name, 'zip', 'build', basedirname)
|
||||||
basedirname)
|
|
||||||
shutil.rmtree(builddir)
|
shutil.rmtree(builddir)
|
||||||
|
artifacts.append(('{}.zip'.format(name),
|
||||||
|
'application/zip',
|
||||||
|
'Windows 32bit standalone'))
|
||||||
|
|
||||||
utils.print_title("Zipping 64bit standalone...")
|
utils.print_title("Zipping 64bit standalone...")
|
||||||
name = 'qutebrowser-{}-windows-standalone-amd64'.format(
|
name = 'qutebrowser-{}-windows-standalone-amd64'.format(
|
||||||
qutebrowser.__version__)
|
qutebrowser.__version__)
|
||||||
origin = os.path.join('build', 'exe.win-amd64-{}'.format(dotver))
|
origin = os.path.join('build', 'exe.win-amd64-{}'.format(dotver))
|
||||||
os.rename(origin, builddir)
|
os.rename(origin, builddir)
|
||||||
shutil.make_archive(os.path.join(destdir, name), 'zip', 'build',
|
shutil.make_archive(name, 'zip', 'build', basedirname)
|
||||||
basedirname)
|
|
||||||
shutil.rmtree(builddir)
|
shutil.rmtree(builddir)
|
||||||
|
artifacts.append(('{}.zip'.format(name),
|
||||||
|
'application/zip',
|
||||||
|
'Windows 64bit standalone'))
|
||||||
|
|
||||||
utils.print_title("Creating final zip...")
|
return artifacts
|
||||||
shutil.move(os.path.join('dist', 'qutebrowser-{}-amd64.msi'.format(
|
|
||||||
qutebrowser.__version__)), os.path.join('dist', 'zip'))
|
|
||||||
shutil.move(os.path.join('dist', 'qutebrowser-{}-win32.msi'.format(
|
|
||||||
qutebrowser.__version__)), os.path.join('dist', 'zip'))
|
|
||||||
shutil.make_archive('qutebrowser-{}-windows'.format(
|
|
||||||
qutebrowser.__version__), 'zip', destdir)
|
|
||||||
|
|
||||||
|
|
||||||
def build_sdist():
|
def build_sdist():
|
||||||
@ -210,6 +221,51 @@ def build_sdist():
|
|||||||
utils.print_subtitle(ext)
|
utils.print_subtitle(ext)
|
||||||
print('\n'.join(files))
|
print('\n'.join(files))
|
||||||
|
|
||||||
|
filename = 'qutebrowser-{}.tar.gz'.format(qutebrowser.__version__)
|
||||||
|
artifacts = [
|
||||||
|
(os.path.join('dist', filename), 'application/gzip', 'Source release'),
|
||||||
|
(os.path.join('dist', filename + '.asc'), 'application/pgp-signature',
|
||||||
|
'Source release - PGP signature'),
|
||||||
|
]
|
||||||
|
|
||||||
|
return artifacts
|
||||||
|
|
||||||
|
|
||||||
|
def github_upload(artifacts, tag):
|
||||||
|
"""Upload the given artifacts to GitHub.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
artifacts: A list of (filename, mimetype, description) tuples
|
||||||
|
tag: The name of the release tag
|
||||||
|
"""
|
||||||
|
import github3
|
||||||
|
utils.print_title("Uploading to github...")
|
||||||
|
|
||||||
|
token_file = os.path.join(os.path.expanduser('~'), '.gh_token')
|
||||||
|
with open(token_file, encoding='ascii') as f:
|
||||||
|
token = f.read().strip()
|
||||||
|
gh = github3.login(token=token)
|
||||||
|
repo = gh.repository('The-Compiler', 'qutebrowser')
|
||||||
|
|
||||||
|
release = None # to satisfy pylint
|
||||||
|
for release in repo.iter_releases():
|
||||||
|
if release.tag_name == tag:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise Exception("No release found for {!r}!".format(tag))
|
||||||
|
|
||||||
|
for filename, mimetype, description in artifacts:
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
basename = os.path.basename(filename)
|
||||||
|
asset = release.upload_asset(mimetype, basename, f)
|
||||||
|
asset.edit(filename, description)
|
||||||
|
|
||||||
|
|
||||||
|
def pypi_upload(artifacts):
|
||||||
|
"""Upload the given artifacts to PyPI using twine."""
|
||||||
|
filenames = [a[0] for a in artifacts]
|
||||||
|
subprocess.check_call(['twine', 'upload'] + filenames)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
@ -217,9 +273,13 @@ def main():
|
|||||||
"asciidoc.py. If not given, it's searched in PATH.",
|
"asciidoc.py. If not given, it's searched in PATH.",
|
||||||
nargs=2, required=False,
|
nargs=2, required=False,
|
||||||
metavar=('PYTHON', 'ASCIIDOC'))
|
metavar=('PYTHON', 'ASCIIDOC'))
|
||||||
|
parser.add_argument('--upload', help="Tag to upload the release for",
|
||||||
|
nargs=1, required=False, metavar='TAG')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
utils.change_cwd()
|
utils.change_cwd()
|
||||||
|
|
||||||
|
upload_to_pypi = False
|
||||||
|
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
if sys.maxsize > 2**32:
|
if sys.maxsize > 2**32:
|
||||||
# WORKAROUND
|
# WORKAROUND
|
||||||
@ -230,12 +290,20 @@ def main():
|
|||||||
print("https://github.com/pypa/virtualenv/issues/774")
|
print("https://github.com/pypa/virtualenv/issues/774")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
run_asciidoc2html(args)
|
run_asciidoc2html(args)
|
||||||
build_windows()
|
artifacts = build_windows()
|
||||||
elif sys.platform == 'darwin':
|
elif sys.platform == 'darwin':
|
||||||
run_asciidoc2html(args)
|
run_asciidoc2html(args)
|
||||||
build_osx()
|
artifacts = build_osx()
|
||||||
else:
|
else:
|
||||||
build_sdist()
|
artifacts = build_sdist()
|
||||||
|
upload_to_pypi = True
|
||||||
|
|
||||||
|
if args.upload is not None:
|
||||||
|
utils.print_title("Press enter to release...")
|
||||||
|
input()
|
||||||
|
github_upload(artifacts, args.upload[0])
|
||||||
|
if upload_to_pypi:
|
||||||
|
pypi_upload(artifacts)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
Reference in New Issue
Block a user