mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
New fosshub upload API
This commit is contained in:
parent
4eb45e1816
commit
1ead1415e3
@ -7,10 +7,10 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, time, sys, shutil, glob, json, mimetypes
|
import os, time, sys, shutil, json, mimetypes
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from argparse import ArgumentParser, FileType
|
from argparse import ArgumentParser, FileType
|
||||||
from subprocess import check_call, CalledProcessError, check_output
|
from subprocess import check_call
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
class ReadFileWithProgressReporting(file): # {{{
|
class ReadFileWithProgressReporting(file): # {{{
|
||||||
@ -339,55 +339,6 @@ def upload_to_servers(files, version): # {{{
|
|||||||
#
|
#
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
def upload_to_dbs(files, version): # {{{
|
|
||||||
print('Uploading to fosshub.com')
|
|
||||||
sys.stdout.flush()
|
|
||||||
server = 'mirror10.fosshub.com'
|
|
||||||
rdir = 'release/'
|
|
||||||
def run_ssh(command, func=check_call):
|
|
||||||
cmd = ['ssh', '-x', 'kovid@%s' % server, command]
|
|
||||||
try:
|
|
||||||
return func(cmd)
|
|
||||||
except CalledProcessError as err:
|
|
||||||
# fosshub is being a little flaky sshing into it is failing the first
|
|
||||||
# time, needing a retry
|
|
||||||
if err.returncode != 255:
|
|
||||||
raise
|
|
||||||
return func(cmd)
|
|
||||||
|
|
||||||
old_files = set(run_ssh('ls ' + rdir, func=check_output).decode('utf-8').split())
|
|
||||||
if len(files) < 7:
|
|
||||||
existing = set(map(os.path.basename, files))
|
|
||||||
# fosshub does not support partial re-uploads
|
|
||||||
for f in glob.glob('%s/%s/calibre-*' % (SERVER_BASE, version)):
|
|
||||||
if os.path.basename(f) not in existing:
|
|
||||||
files[f] = None
|
|
||||||
|
|
||||||
for x in files:
|
|
||||||
start = time.time()
|
|
||||||
print ('Uploading', x)
|
|
||||||
sys.stdout.flush()
|
|
||||||
old_files.discard(os.path.basename(x))
|
|
||||||
for i in range(5):
|
|
||||||
try:
|
|
||||||
check_call(['rsync', '-h', '-z', '--progress', '-e', 'ssh -x', x,
|
|
||||||
'kovid@%s:%s'%(server, rdir)])
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
raise SystemExit(1)
|
|
||||||
except:
|
|
||||||
print ('\nUpload failed, trying again in 30 seconds')
|
|
||||||
sys.stdout.flush()
|
|
||||||
time.sleep(30)
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
print ('Uploaded in', int(time.time() - start), 'seconds\n\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
if old_files:
|
|
||||||
run_ssh('rm -f %s' % (' '.join(rdir + x for x in old_files)))
|
|
||||||
run_ssh('/home/kovid/uploadFiles')
|
|
||||||
# }}}
|
|
||||||
|
|
||||||
# CLI {{{
|
# CLI {{{
|
||||||
def cli_parser():
|
def cli_parser():
|
||||||
epilog='Copyright Kovid Goyal 2012'
|
epilog='Copyright Kovid Goyal 2012'
|
||||||
@ -419,7 +370,6 @@ def cli_parser():
|
|||||||
gh = subparsers.add_parser('github', help='Upload to GitHub',
|
gh = subparsers.add_parser('github', help='Upload to GitHub',
|
||||||
epilog=epilog)
|
epilog=epilog)
|
||||||
subparsers.add_parser('calibre', help='Upload to calibre file servers')
|
subparsers.add_parser('calibre', help='Upload to calibre file servers')
|
||||||
subparsers.add_parser('dbs', help='Upload to fosshub.com')
|
|
||||||
|
|
||||||
a = sf.add_argument
|
a = sf.add_argument
|
||||||
a('project',
|
a('project',
|
||||||
@ -462,8 +412,6 @@ def main(args=None):
|
|||||||
gh()
|
gh()
|
||||||
elif args.service == 'calibre':
|
elif args.service == 'calibre':
|
||||||
upload_to_servers(ofiles, args.version)
|
upload_to_servers(ofiles, args.version)
|
||||||
elif args.service == 'dbs':
|
|
||||||
upload_to_dbs(ofiles, args.version)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
@ -5,7 +5,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, subprocess, hashlib, shutil, glob, stat, sys, time
|
import os, subprocess, hashlib, shutil, glob, stat, sys, time, urllib2, urllib
|
||||||
from subprocess import check_call
|
from subprocess import check_call
|
||||||
from tempfile import NamedTemporaryFile, mkdtemp, gettempdir
|
from tempfile import NamedTemporaryFile, mkdtemp, gettempdir
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
@ -99,6 +99,10 @@ def get_github_data():
|
|||||||
def get_sourceforge_data():
|
def get_sourceforge_data():
|
||||||
return {'username':'kovidgoyal', 'project':'calibre'}
|
return {'username':'kovidgoyal', 'project':'calibre'}
|
||||||
|
|
||||||
|
def get_fosshub_data():
|
||||||
|
with open(os.path.expanduser('~/work/env/private/fosshub'), 'rb') as f:
|
||||||
|
return f.read().decode('utf-8')
|
||||||
|
|
||||||
def send_data(loc):
|
def send_data(loc):
|
||||||
subprocess.check_call(['rsync', '--inplace', '--delete', '-r', '-z', '-h', '--progress', '-e', 'ssh -x',
|
subprocess.check_call(['rsync', '--inplace', '--delete', '-r', '-z', '-h', '--progress', '-e', 'ssh -x',
|
||||||
loc+'/', '%s@%s:%s'%(STAGING_USER, STAGING_HOST, STAGING_DIR)])
|
loc+'/', '%s@%s:%s'%(STAGING_USER, STAGING_HOST, STAGING_DIR)])
|
||||||
@ -113,9 +117,6 @@ def sf_cmdline(ver, sdata):
|
|||||||
def calibre_cmdline(ver):
|
def calibre_cmdline(ver):
|
||||||
return [__appname__, ver, 'fmap', 'calibre']
|
return [__appname__, ver, 'fmap', 'calibre']
|
||||||
|
|
||||||
def dbs_cmdline(ver):
|
|
||||||
return [__appname__, ver, 'fmap', 'dbs']
|
|
||||||
|
|
||||||
def run_remote_upload(args):
|
def run_remote_upload(args):
|
||||||
print 'Running remotely:', ' '.join(args)
|
print 'Running remotely:', ' '.join(args)
|
||||||
subprocess.check_call(['ssh', '-x', '%s@%s'%(STAGING_USER, STAGING_HOST),
|
subprocess.check_call(['ssh', '-x', '%s@%s'%(STAGING_USER, STAGING_HOST),
|
||||||
@ -123,6 +124,24 @@ def run_remote_upload(args):
|
|||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
def upload_to_fosshub(files=None):
|
||||||
|
if files is None:
|
||||||
|
files = set(installers())
|
||||||
|
entries = []
|
||||||
|
for fname in files:
|
||||||
|
desc = installer_description(fname)
|
||||||
|
url = 'https://download.calibre-ebook.com/%s/%s' % (__version__, os.path.basename(fname))
|
||||||
|
entries.append({
|
||||||
|
'url':url,
|
||||||
|
'type': desc,
|
||||||
|
'version': __version__,
|
||||||
|
})
|
||||||
|
jq = {'software': 'Calibre', 'apiKey':get_fosshub_data(), 'upload':entries}
|
||||||
|
rq = urllib2.urlopen('https://www.fosshub.com/JSTools/uploadJson', urllib.urlencode(jq))
|
||||||
|
if rq.getcode() != 200:
|
||||||
|
raise SystemExit('Failed to upload to fosshub, with HTTP error code: %d' % rq.getcode())
|
||||||
|
|
||||||
|
|
||||||
class UploadInstallers(Command): # {{{
|
class UploadInstallers(Command): # {{{
|
||||||
|
|
||||||
def add_options(self, parser):
|
def add_options(self, parser):
|
||||||
@ -148,7 +167,7 @@ class UploadInstallers(Command): # {{{
|
|||||||
upload_signatures()
|
upload_signatures()
|
||||||
check_call('ssh code /apps/update-calibre-version.py'.split())
|
check_call('ssh code /apps/update-calibre-version.py'.split())
|
||||||
# self.upload_to_sourceforge()
|
# self.upload_to_sourceforge()
|
||||||
# self.upload_to_dbs()
|
upload_to_fosshub(files)
|
||||||
self.upload_to_github(opts.replace)
|
self.upload_to_github(opts.replace)
|
||||||
finally:
|
finally:
|
||||||
shutil.rmtree(tdir, ignore_errors=True)
|
shutil.rmtree(tdir, ignore_errors=True)
|
||||||
@ -198,8 +217,6 @@ class UploadInstallers(Command): # {{{
|
|||||||
def upload_to_calibre(self):
|
def upload_to_calibre(self):
|
||||||
run_remote_upload(calibre_cmdline(__version__))
|
run_remote_upload(calibre_cmdline(__version__))
|
||||||
|
|
||||||
def upload_to_dbs(self):
|
|
||||||
run_remote_upload(dbs_cmdline(__version__))
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
class UploadUserManual(Command): # {{{
|
class UploadUserManual(Command): # {{{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user