Skip to content

Commit e90e9de

Browse files
authored
Quick fix to support date format of pre-release tags
Quick fix to support date format of pre-release tags. Removes hyphens from date to create float that always trumps stable version number.
1 parent 58c20d5 commit e90e9de

1 file changed

Lines changed: 74 additions & 107 deletions

File tree

ReleaseManager/releaseManager.py

Lines changed: 74 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from github import Github
1010
import wget
1111
import subprocess
12-
import shutil
12+
from shutil import copyfile
1313

1414

1515
class ReleaseManager(MakesmithInitFuncs):
@@ -24,66 +24,75 @@ def getReleases(self):
2424
tempReleases = []
2525
enableExperimental = self.data.config.getValue("WebControl Settings", "experimentalReleases")
2626
for release in self.releases:
27-
if not enableExperimental:
28-
if not self.isExperimental(re.sub(r'[v]', r'', release.tag_name)):
27+
if self.isExperimental(release):
28+
if enableExperimental:
29+
# Add experimental releases is setting enabled.
2930
tempReleases.append(release)
3031
else:
32+
# Add stable releases.
3133
tempReleases.append(release)
3234
return tempReleases
3335

34-
3536
def getLatestRelease(self):
3637
return self.latestRelease
3738

3839
def checkForLatestPyRelease(self):
39-
if True: # self.data.platform=="PYINSTALLER":
40-
print("Checking latest pyrelease.")
41-
try:
42-
enableExperimental = self.data.config.getValue("WebControl Settings", "experimentalReleases")
43-
g = Github()
44-
repo = g.get_repo("WebControlCNC/WebControl")
45-
self.releases = repo.get_releases()
46-
latestVersionGithub = 0
47-
self.latestRelease = None
48-
for release in self.releases:
40+
print("Checking latest pyrelease.")
41+
try:
42+
enableExperimental = self.data.config.getValue("WebControl Settings", "experimentalReleases")
43+
g = Github()
44+
repo = g.get_repo("WebControlCNC/WebControl")
45+
self.releases = repo.get_releases()
46+
latestVersionGithub = 0
47+
self.latestRelease = None
48+
for release in self.releases:
49+
isExperimental = self.isExperimental(release)
50+
eligible = False
51+
if isExperimental:
52+
if enableExperimental:
53+
# Add experimental releases is setting enabled.
54+
eligible = True
55+
tag_name = release.tag_name
56+
tag_float = float(re.sub("-", "", tag_name))
57+
else:
58+
# Add stable releases.
4959
tag_name = re.sub(r'[v]', r'', release.tag_name)
5060
tag_float = float(tag_name)
51-
eligible = False
52-
if not enableExperimental:
53-
if not self.isExperimental(release):
54-
eligible = True
55-
else:
56-
eligible = True
57-
#print("tag:"+tag_name+", eligible:"+str(eligible))
58-
if eligible and tag_float > latestVersionGithub:
59-
latestVersionGithub = tag_float
60-
self.latestRelease = release
61-
62-
print("Latest pyrelease: " + str(latestVersionGithub))
63-
if self.latestRelease is not None and latestVersionGithub > self.data.pyInstallCurrentVersion:
64-
print("Latest release tag: " + self.latestRelease.tag_name)
65-
assets = self.latestRelease.get_assets()
66-
for asset in assets:
67-
if asset.name.find(self.data.pyInstallType) != -1 and asset.name.find(self.data.pyInstallPlatform) != -1:
68-
print(asset.name)
69-
print(asset.url)
70-
self.data.ui_queue1.put("Action", "pyinstallUpdate", "on")
71-
self.data.pyInstallUpdateAvailable = True
72-
self.data.pyInstallUpdateBrowserUrl = asset.browser_download_url
73-
self.data.pyInstallUpdateVersion = self.latestRelease
74-
except Exception as e:
75-
print("Error checking pyrelease: " + str(e))
76-
77-
def isExperimental(self, release):
61+
eligible = True
62+
63+
#print("tag:"+tag_name+", eligible:"+str(eligible))
64+
if eligible and tag_float > latestVersionGithub:
65+
latestVersionGithub = tag_float
66+
self.latestRelease = release
67+
68+
print("Latest pyrelease: " + str(latestVersionGithub))
69+
if self.latestRelease is not None and latestVersionGithub > self.data.pyInstallCurrentVersion:
70+
print("Latest release tag: " + self.latestRelease.tag_name)
71+
assets = self.latestRelease.get_assets()
72+
for asset in assets:
73+
if asset.name.find(self.data.pyInstallType) != -1 and asset.name.find(self.data.pyInstallPlatform) != -1:
74+
print(asset.name)
75+
print(asset.url)
76+
self.data.ui_queue1.put("Action", "pyinstallUpdate", "on")
77+
self.data.pyInstallUpdateAvailable = True
78+
self.data.pyInstallUpdateBrowserUrl = asset.browser_download_url
79+
self.data.pyInstallUpdateVersion = self.latestRelease
80+
except Exception as e:
81+
print("Error checking pyrelease: " + str(e))
82+
83+
def isExperimental(self, tag):
7884
'''
79-
Deternmines if release is experimental. Pre-Releases are experimental.
85+
Deternmines if release is experimental. All even releases are stable, odd releases are experimental
8086
:param tag:
8187
:return:
8288
'''
83-
if release.prerelease:
84-
return True
85-
else:
89+
if float(tag) <= 0.931: # all releases before now are 'stable'
90+
return False
91+
lastDigit = tag[-1]
92+
if (int(lastDigit) % 2) == 0: # only even releases are 'stable'
8693
return False
94+
else:
95+
return True
8796

8897
def processAbsolutePath(self, path):
8998
index = path.find("main.py")
@@ -103,78 +112,36 @@ def updatePyInstaller(self, bypassCheck = False):
103112
except:
104113
print("error cleaning download directory: ", filePath)
105114
print("---")
106-
print("Downloading new WebControl release...")
107115
if self.data.pyInstallPlatform == "win32" or self.data.pyInstallPlatform == "win64":
108116
filename = wget.download(self.data.pyInstallUpdateBrowserUrl, out=home + "\\.WebControl\\downloads")
109117
else:
110118
filename = wget.download(self.data.pyInstallUpdateBrowserUrl, out=home + "/.WebControl/downloads")
111-
print("Successfully downloaded new release to:" + filename)
119+
print(filename)
112120

113121
if self.data.platform == "PYINSTALLER":
114122
lhome = os.path.join(self.data.platformHome)
115123
else:
116124
lhome = "."
117-
118-
print("Creating target version directory...")
119-
target_dir = self.data.pyInstallInstalledPath + '_next'
120-
if os.path.exists(target_dir):
121-
print("New release directory already exists, removing it")
122-
shutil.rmtree(target_dir)
123-
os.mkdir(target_dir)
124-
print("Creating target version directory DONE")
125-
126-
print("Unzipping new release...")
127-
if self.data.pyInstallPlatform == "win32" or self.data.pyInstallPlatform == "win64":
128-
command = [
129-
lhome + "/tools/7za.exe",
130-
"x",
131-
"-y",
132-
filename,
133-
"-o",
134-
target_dir
135-
]
136-
print(command)
137-
subprocess.run(command)
138-
else:
139-
command = [
140-
"tar",
141-
"-zxf",
142-
filename,
143-
"-C",
144-
target_dir
145-
]
146-
print(command)
147-
subprocess.run(command)
148-
print("Unzipping new release DONE")
149-
150-
print("Upgrade script...")
151-
print("Checking if it needs to be run for platform: " + self.data.pyInstallPlatform)
152125
if self.data.pyInstallPlatform == "win32" or self.data.pyInstallPlatform == "win64":
153-
upgrade_script_path = target_dir + "\\tools\\upgrade_" + self.data.pyInstallPlatform + ".bat"
154-
else:
155-
upgrade_script_path = target_dir + "/tools/upgrade_" + self.data.pyInstallPlatform + ".sh"
156-
if os.path.exists(upgrade_script_path):
157-
print("Yes, running it")
158-
self.make_executable(upgrade_script_path)
159-
subprocess.run([upgrade_script_path])
126+
path = lhome + "/tools/upgrade_webcontrol_win.bat"
127+
copyfile(path, home + "/.WebControl/downloads/upgrade_webcontrol_win.bat")
128+
path = lhome + "/tools/7za.exe"
129+
copyfile(path, home + "/.WebControl/downloads/7za.exe")
130+
self.data.pyInstallInstalledPath = self.data.pyInstallInstalledPath.replace('/', '\\')
131+
program_name = home + "\\.WebControl\\downloads\\upgrade_webcontrol_win.bat"
132+
160133
else:
161-
print("No upgrade script needed.")
162-
print("Upgrade script DONE")
163-
164-
print("Backing up the current install...")
165-
backup_path = self.data.pyInstallInstalledPath + '_old'
166-
print("Backup location: " + backup_path)
167-
if os.path.exists(backup_path):
168-
print("Old backup found, removing it")
169-
shutil.rmtree(backup_path)
170-
os.rename(self.data.pyInstallInstalledPath, self.data.pyInstallInstalledPath + '_old')
171-
print("Backing up the current install DONE")
172-
173-
print("Moving the target version in place...")
174-
os.rename(target_dir, self.data.pyInstallInstalledPath)
175-
print("Moving the target version in place DONE")
176-
177-
print("WebControl upgrade complete, shutting down to make way to the target version")
134+
path = lhome + "/tools/upgrade_webcontrol.sh"
135+
copyfile(path, home + "/.WebControl/downloads/upgrade_webcontrol.sh")
136+
program_name = home + "/.WebControl/downloads/upgrade_webcontrol.sh"
137+
self.make_executable(home + "/.WebControl/downloads/upgrade_webcontrol.sh")
138+
tool_path = home + "\\.WebControl\\downloads\\7za.exe"
139+
arguments = [filename, self.data.pyInstallInstalledPath, tool_path]
140+
command = [program_name]
141+
command.extend(arguments)
142+
print("popening")
143+
print(command)
144+
subprocess.Popen(command)
178145
return True
179146
return False
180147

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

210177

0 commit comments

Comments
 (0)