Skip to content

Commit

Permalink
Quick fix to support date format of pre-release tags
Browse files Browse the repository at this point in the history
Quick fix to support date format of pre-release tags. Removes hyphens from date to create float that always trumps stable version number.
  • Loading branch information
gb0101010101 authored May 29, 2020
1 parent 58c20d5 commit e90e9de
Showing 1 changed file with 74 additions and 107 deletions.
181 changes: 74 additions & 107 deletions ReleaseManager/releaseManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from github import Github
import wget
import subprocess
import shutil
from shutil import copyfile


class ReleaseManager(MakesmithInitFuncs):
Expand All @@ -24,66 +24,75 @@ def getReleases(self):
tempReleases = []
enableExperimental = self.data.config.getValue("WebControl Settings", "experimentalReleases")
for release in self.releases:
if not enableExperimental:
if not self.isExperimental(re.sub(r'[v]', r'', release.tag_name)):
if self.isExperimental(release):
if enableExperimental:
# Add experimental releases is setting enabled.
tempReleases.append(release)
else:
# Add stable releases.
tempReleases.append(release)
return tempReleases


def getLatestRelease(self):
return self.latestRelease

def checkForLatestPyRelease(self):
if True: # self.data.platform=="PYINSTALLER":
print("Checking latest pyrelease.")
try:
enableExperimental = self.data.config.getValue("WebControl Settings", "experimentalReleases")
g = Github()
repo = g.get_repo("WebControlCNC/WebControl")
self.releases = repo.get_releases()
latestVersionGithub = 0
self.latestRelease = None
for release in self.releases:
print("Checking latest pyrelease.")
try:
enableExperimental = self.data.config.getValue("WebControl Settings", "experimentalReleases")
g = Github()
repo = g.get_repo("WebControlCNC/WebControl")
self.releases = repo.get_releases()
latestVersionGithub = 0
self.latestRelease = None
for release in self.releases:
isExperimental = self.isExperimental(release)
eligible = False
if isExperimental:
if enableExperimental:
# Add experimental releases is setting enabled.
eligible = True
tag_name = release.tag_name
tag_float = float(re.sub("-", "", tag_name))
else:
# Add stable releases.
tag_name = re.sub(r'[v]', r'', release.tag_name)
tag_float = float(tag_name)
eligible = False
if not enableExperimental:
if not self.isExperimental(release):
eligible = True
else:
eligible = True
#print("tag:"+tag_name+", eligible:"+str(eligible))
if eligible and tag_float > latestVersionGithub:
latestVersionGithub = tag_float
self.latestRelease = release

print("Latest pyrelease: " + str(latestVersionGithub))
if self.latestRelease is not None and latestVersionGithub > self.data.pyInstallCurrentVersion:
print("Latest release tag: " + self.latestRelease.tag_name)
assets = self.latestRelease.get_assets()
for asset in assets:
if asset.name.find(self.data.pyInstallType) != -1 and asset.name.find(self.data.pyInstallPlatform) != -1:
print(asset.name)
print(asset.url)
self.data.ui_queue1.put("Action", "pyinstallUpdate", "on")
self.data.pyInstallUpdateAvailable = True
self.data.pyInstallUpdateBrowserUrl = asset.browser_download_url
self.data.pyInstallUpdateVersion = self.latestRelease
except Exception as e:
print("Error checking pyrelease: " + str(e))

def isExperimental(self, release):
eligible = True

#print("tag:"+tag_name+", eligible:"+str(eligible))
if eligible and tag_float > latestVersionGithub:
latestVersionGithub = tag_float
self.latestRelease = release

print("Latest pyrelease: " + str(latestVersionGithub))
if self.latestRelease is not None and latestVersionGithub > self.data.pyInstallCurrentVersion:
print("Latest release tag: " + self.latestRelease.tag_name)
assets = self.latestRelease.get_assets()
for asset in assets:
if asset.name.find(self.data.pyInstallType) != -1 and asset.name.find(self.data.pyInstallPlatform) != -1:
print(asset.name)
print(asset.url)
self.data.ui_queue1.put("Action", "pyinstallUpdate", "on")
self.data.pyInstallUpdateAvailable = True
self.data.pyInstallUpdateBrowserUrl = asset.browser_download_url
self.data.pyInstallUpdateVersion = self.latestRelease
except Exception as e:
print("Error checking pyrelease: " + str(e))

def isExperimental(self, tag):
'''
Deternmines if release is experimental. Pre-Releases are experimental.
Deternmines if release is experimental. All even releases are stable, odd releases are experimental
:param tag:
:return:
'''
if release.prerelease:
return True
else:
if float(tag) <= 0.931: # all releases before now are 'stable'
return False
lastDigit = tag[-1]
if (int(lastDigit) % 2) == 0: # only even releases are 'stable'
return False
else:
return True

def processAbsolutePath(self, path):
index = path.find("main.py")
Expand All @@ -103,78 +112,36 @@ def updatePyInstaller(self, bypassCheck = False):
except:
print("error cleaning download directory: ", filePath)
print("---")
print("Downloading new WebControl release...")
if self.data.pyInstallPlatform == "win32" or self.data.pyInstallPlatform == "win64":
filename = wget.download(self.data.pyInstallUpdateBrowserUrl, out=home + "\\.WebControl\\downloads")
else:
filename = wget.download(self.data.pyInstallUpdateBrowserUrl, out=home + "/.WebControl/downloads")
print("Successfully downloaded new release to:" + filename)
print(filename)

if self.data.platform == "PYINSTALLER":
lhome = os.path.join(self.data.platformHome)
else:
lhome = "."

print("Creating target version directory...")
target_dir = self.data.pyInstallInstalledPath + '_next'
if os.path.exists(target_dir):
print("New release directory already exists, removing it")
shutil.rmtree(target_dir)
os.mkdir(target_dir)
print("Creating target version directory DONE")

print("Unzipping new release...")
if self.data.pyInstallPlatform == "win32" or self.data.pyInstallPlatform == "win64":
command = [
lhome + "/tools/7za.exe",
"x",
"-y",
filename,
"-o",
target_dir
]
print(command)
subprocess.run(command)
else:
command = [
"tar",
"-zxf",
filename,
"-C",
target_dir
]
print(command)
subprocess.run(command)
print("Unzipping new release DONE")

print("Upgrade script...")
print("Checking if it needs to be run for platform: " + self.data.pyInstallPlatform)
if self.data.pyInstallPlatform == "win32" or self.data.pyInstallPlatform == "win64":
upgrade_script_path = target_dir + "\\tools\\upgrade_" + self.data.pyInstallPlatform + ".bat"
else:
upgrade_script_path = target_dir + "/tools/upgrade_" + self.data.pyInstallPlatform + ".sh"
if os.path.exists(upgrade_script_path):
print("Yes, running it")
self.make_executable(upgrade_script_path)
subprocess.run([upgrade_script_path])
path = lhome + "/tools/upgrade_webcontrol_win.bat"
copyfile(path, home + "/.WebControl/downloads/upgrade_webcontrol_win.bat")
path = lhome + "/tools/7za.exe"
copyfile(path, home + "/.WebControl/downloads/7za.exe")
self.data.pyInstallInstalledPath = self.data.pyInstallInstalledPath.replace('/', '\\')
program_name = home + "\\.WebControl\\downloads\\upgrade_webcontrol_win.bat"

else:
print("No upgrade script needed.")
print("Upgrade script DONE")

print("Backing up the current install...")
backup_path = self.data.pyInstallInstalledPath + '_old'
print("Backup location: " + backup_path)
if os.path.exists(backup_path):
print("Old backup found, removing it")
shutil.rmtree(backup_path)
os.rename(self.data.pyInstallInstalledPath, self.data.pyInstallInstalledPath + '_old')
print("Backing up the current install DONE")

print("Moving the target version in place...")
os.rename(target_dir, self.data.pyInstallInstalledPath)
print("Moving the target version in place DONE")

print("WebControl upgrade complete, shutting down to make way to the target version")
path = lhome + "/tools/upgrade_webcontrol.sh"
copyfile(path, home + "/.WebControl/downloads/upgrade_webcontrol.sh")
program_name = home + "/.WebControl/downloads/upgrade_webcontrol.sh"
self.make_executable(home + "/.WebControl/downloads/upgrade_webcontrol.sh")
tool_path = home + "\\.WebControl\\downloads\\7za.exe"
arguments = [filename, self.data.pyInstallInstalledPath, tool_path]
command = [program_name]
command.extend(arguments)
print("popening")
print(command)
subprocess.Popen(command)
return True
return False

Expand Down Expand Up @@ -204,7 +171,7 @@ def update(self, version):
self.data.pyInstallUpdateBrowserUrl = asset.browser_download_url
print(self.data.pyInstallUpdateBrowserUrl)
return self.updatePyInstaller(True)
print("Couldn't find a suitable file for the current platform and target version: " + version)
print("hmmm.. issue")
return False


0 comments on commit e90e9de

Please sign in to comment.