Skip to content

Commit

Permalink
Updates the deployment process and the version check associated with it
Browse files Browse the repository at this point in the history
This commit supports steps 1 and 2 in the new workflow:
1. Change the logic in the daemon to check the github api for the latest release that is not a pre release
2. Change travis to mark all releases as pre release
3. When we are ready to stage a release we push a tag to master. Travis builds the packages and releases them
4. We manually check them
5. Remove the pre release mark when we are happy
  • Loading branch information
jobevers committed Jul 20, 2016
1 parent 1d01853 commit 6a67a34
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 8 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ deploy:
- provider: releases
file: "${TRAVIS_BUILD_DIR}/`python setup.py --name`_`python setup.py -V`_amd64.deb"
skip_cleanup: true
prerelease: true
on:
tags: true
condition: "$TRAVIS_OS_NAME = linux"
Expand All @@ -54,6 +55,7 @@ deploy:
- provider: releases
file: "${TRAVIS_BUILD_DIR}/packaging/osx/lbry-osx-app/`python setup.py --name`.`python setup.py -V`.dmg"
skip_cleanup: true
prerelease: true
on:
tags: true
condition: "$TRAVIS_OS_NAME = osx"
Expand Down
29 changes: 21 additions & 8 deletions lbrynet/lbrynet_daemon/LBRYDaemon.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import locale
import mimetypes
import os
import re
import subprocess
import sys
import random
Expand Down Expand Up @@ -584,13 +585,7 @@ def _get_lbryum_version():

def _get_lbrynet_version():
try:
r = urlopen("https://raw.githubusercontent.com/lbryio/lbry/master/lbrynet/__init__.py").read().split('\n')
vs = next(i for i in r if '__version__ =' in i).split("=")[1].replace(" ", "")
vt = tuple(int(x) for x in vs[1:-1].split('.'))
vr = ".".join([str(x) for x in vt])
log.info("remote lbrynet " + str(vr) + " > local lbrynet " + str(lbrynet_version) + " = " + str(
vr > lbrynet_version))
self.git_lbrynet_version = vr
self.git_lbrynet_version = get_lbrynet_version_from_github()
return defer.succeed(None)
except:
log.info("[" + str(datetime.now()) + "] Failed to get lbrynet version from git")
Expand Down Expand Up @@ -2181,7 +2176,6 @@ def jsonrpc_reveal(self, p):
Returns:
True, opens file browser
"""

path = p['path']
if sys.platform == "darwin":
d = threads.deferToThread(subprocess.Popen, ['open', '-R', path])
Expand Down Expand Up @@ -2345,3 +2339,22 @@ def is_in_cache(self):
def is_cached_name_expired(self):
time_in_cache = self.now() - self.name_data['timestamp']
return time_in_cache >= self.daemon.cache_time


def get_lbrynet_version_from_github():
"""Return the latest released version from github."""
response = requests.get('https://api.github.com/repos/lbryio/lbry/releases/latest')
release = response.json()
tag = release['tag_name']
# githubs documentation claims this should never happen, but we'll check just in case
if release['prerelease']:
raise Exception('Release {} is a pre-release'.format(tag))
return get_version_from_tag(tag)


def get_version_from_tag(tag):
match = re.match('v([\d.]+)', tag)
if match:
return match.group(1)
else:
raise Exception('Failed to parse version from tag {}'.format(tag))
Empty file.
38 changes: 38 additions & 0 deletions tests/lbrynet/lbrynet_daemon/test_LBRYDaemon.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import mock
import requests
from twisted.trial import unittest

from lbrynet.lbrynet_daemon import LBRYDaemon


class MiscTests(unittest.TestCase):
def test_get_lbrynet_version_from_github(self):
response = mock.create_autospec(requests.Response)
# don't need to mock out the entire response from the api
# but at least need 'tag_name'
response.json.return_value = {
"url": "https://api.github.com/repos/lbryio/lbry/releases/3685199",
"assets_url": "https://api.github.com/repos/lbryio/lbry/releases/3685199/assets",
"html_url": "https://github.com/lbryio/lbry/releases/tag/v0.3.8",
"id": 3685199,
"tag_name": "v0.3.8",
"prerelease": False
}
with mock.patch('lbrynet.lbrynet_daemon.LBRYDaemon.requests') as req:
req.get.return_value = response
self.assertEqual('0.3.8', LBRYDaemon.get_lbrynet_version_from_github())

def test_error_is_thrown_if_prerelease(self):
response = mock.create_autospec(requests.Response)
response.json.return_value = {
"tag_name": "v0.3.8",
"prerelease": True
}
with mock.patch('lbrynet.lbrynet_daemon.LBRYDaemon.requests') as req:
req.get.return_value = response
with self.assertRaises(Exception):
LBRYDaemon.get_lbrynet_version_from_github()

def test_error_is_thrown_when_version_cant_be_parsed(self):
with self.assertRaises(Exception):
LBRYDaemon.get_version_from_tag('garbage')

0 comments on commit 6a67a34

Please sign in to comment.