#!/usr/bin/env python """IPython release script. This should ONLY be run at real release time. """ from __future__ import print_function import os import sys from toollib import (get_ipdir, pjoin, cd, execfile, sh, archive, sdists, archive_user, archive_dir, buildwheels) from gh_api import post_download # Get main ipython dir, this will raise if it doesn't pass some checks ipdir = get_ipdir() tooldir = pjoin(ipdir, 'tools') distdir = pjoin(ipdir, 'dist') # Where I keep static backups of each release ipbackupdir = os.path.expanduser('~/ipython/backup') if not os.path.exists(ipbackupdir): os.makedirs(ipbackupdir) # Start in main IPython dir cd(ipdir) # Load release info version = None execfile(pjoin('IPython','core','release.py'), globals()) # Build site addresses for file uploads release_site = '%s/release/%s' % (archive, version) backup_site = '%s/backup/' % archive # Start actual release process print() print('Releasing IPython') print('=================') print() print('Version:', version) print() print('Source IPython directory:', ipdir) print() # Perform local backup, go to tools dir to run it. cd(tooldir) if 'upload' in sys.argv: cd(distdir) print( 'Uploading distribution files to GitHub...') for fname in os.listdir('.'): # TODO: update to GitHub releases API continue print('uploading %s to GitHub' % fname) desc = "IPython %s source distribution" % version post_download("ipython/ipython", fname, description=desc) # Make target dir if it doesn't exist print('Uploading IPython to backup site.') sh('ssh %s "mkdir -p %s/release/%s" ' % (archive_user, archive_dir, version)) sh('scp * %s' % release_site) print( 'Uploading backup files...') cd(ipbackupdir) sh('scp `ls -1tr *tgz | tail -1` %s' % backup_site) print('Done!') print('Use `twine upload dist/*` to upload the files to PyPI') else: sh('./make_tarball.py') sh('mv ipython-*.tgz %s' % ipbackupdir) # Build release files sh('./build_release %s' % ipdir) # Not Registering with PyPI, registering with setup.py is insecure as communication is not encrypted cd(ipdir) # Upload all files sh(sdists) buildwheels() print("`./release upload` to upload source distribution on github and ipython archive") sys.exit(0)