mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Only keep the most recent release on GitHub
GitHub claims they have no disk quotas for releases, but I dont want to rely on that.
This commit is contained in:
parent
dd3e52df27
commit
b6bbf61efd
@ -387,13 +387,16 @@ class GitHub(Base): # {{{
|
||||
def __init__(self, files, reponame, version, username, password, replace=False):
|
||||
self.files, self.reponame, self.version, self.username, self.password, self.replace = (
|
||||
files, reponame, version, username, password, replace)
|
||||
self.current_tag_name = 'v' + self.version
|
||||
import requests
|
||||
self.requests = s = requests.Session()
|
||||
s.auth = (self.username, self.password)
|
||||
s.headers.update({'Accept': 'application/vnd.github.v3+json'})
|
||||
|
||||
def __call__(self):
|
||||
release = self.create_release()
|
||||
releases = self.releases()
|
||||
self.clean_older_releases(releases)
|
||||
release = self.create_release(releases)
|
||||
upload_url = release['upload_url'].partition('{')[0]
|
||||
existing_assets = self.existing_assets(release['id'])
|
||||
for path, desc in self.files.iteritems():
|
||||
@ -413,6 +416,16 @@ class GitHub(Base): # {{{
|
||||
if r.status_code != 200:
|
||||
self.fail(r, 'Failed to set label for %s' % fname)
|
||||
|
||||
def clean_older_releases(self, releases):
|
||||
for release in releases:
|
||||
if release.get('assets', None) and release['tag_name'] != self.current_tag_name:
|
||||
self.info('\nDeleting old released installers from: %s' % release['tag_name'])
|
||||
for asset in release['assets']:
|
||||
r = self.requests.delete(self.API + 'repos/%s/%s/releases/assets/%s' % (self.username, self.reponame, asset['id']))
|
||||
if r.status_code != 204:
|
||||
self.fail(r, 'Failed to delete obsolete asset: %s for release: %s' % (
|
||||
asset['name'], release['tag_name']))
|
||||
|
||||
def do_upload(self, url, path, desc, fname):
|
||||
mime_type = mimetypes.guess_type(fname)[0]
|
||||
self.info('Uploading to GitHub: %s (%s)' % (fname, mime_type))
|
||||
@ -438,26 +451,29 @@ class GitHub(Base): # {{{
|
||||
self.fail('Failed to get assets for release')
|
||||
return {asset['name']:asset['id'] for asset in r.json()}
|
||||
|
||||
def create_release(self):
|
||||
def releases(self):
|
||||
url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame)
|
||||
r = self.requests.get(url)
|
||||
if r.status_code != 200:
|
||||
self.fail(r, 'Failed to list releases')
|
||||
return r.json()
|
||||
|
||||
def create_release(self, releases):
|
||||
' Create a release on GitHub or if it already exists, return the existing release '
|
||||
for release in releases:
|
||||
# Check for existing release
|
||||
if release['tag_name'] == self.current_tag_name:
|
||||
return release
|
||||
url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame)
|
||||
r = self.requests.post(url, data=json.dumps({
|
||||
'tag_name':'v%s' % self.version,
|
||||
'tag_name': self.current_tag_name,
|
||||
'target_commitish': 'master',
|
||||
'name': 'version %s' % self.version,
|
||||
'body': 'Release version %s' % self.version,
|
||||
'draft': False, 'prerelease':False
|
||||
}))
|
||||
if r.status_code != 201:
|
||||
if not self.already_exists(r):
|
||||
self.fail(r, 'Failed to create release for version: %s' % self.version)
|
||||
# Find existing release
|
||||
r = self.requests.get(url)
|
||||
if r.status_code != 200:
|
||||
self.fail(r, 'Failed to list releases')
|
||||
for release in reversed(r.json()):
|
||||
if release.get('tag_name', None) == 'v' + self.version:
|
||||
return release
|
||||
self.fail(r, 'Failed to create release for version: %s' % self.version)
|
||||
return r.json()
|
||||
|
||||
# }}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user