summaryrefslogtreecommitdiff
path: root/indra/newview/viewer_manifest.py
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/viewer_manifest.py')
-rwxr-xr-xindra/newview/viewer_manifest.py52
1 files changed, 43 insertions, 9 deletions
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 3a7c7d7f46..f6282743bb 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -28,7 +28,6 @@ $/LicenseInfo$
"""
import errno
import glob
-import itertools
import json
import os
import os.path
@@ -36,12 +35,9 @@ import plistlib
import random
import re
import shutil
-import stat
import subprocess
import sys
-import tarfile
import time
-import zipfile
viewer_dir = os.path.dirname(__file__)
# Add indra/lib/python to our path so we don't have to muck with PYTHONPATH.
@@ -410,6 +406,15 @@ class ViewerManifest(LLManifest):
return os.path.relpath(abspath(path), abspath(base))
+ def set_github_output_path(self, variable, path):
+ self.set_github_output(variable, os.path.join(self.get_dst_prefix(), path))
+
+ def set_github_output(self, variable, value):
+ GITHUB_OUTPUT = os.getenv('GITHUB_OUTPUT')
+ if GITHUB_OUTPUT:
+ with open(GITHUB_OUTPUT, 'a') as outf:
+ print('='.join((variable, value)), file=outf)
+
class WindowsManifest(ViewerManifest):
# We want the platform, per se, for every Windows build to be 'win'. The
@@ -484,6 +489,8 @@ class WindowsManifest(ViewerManifest):
if self.is_packaging_viewer():
# Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
+ # emit that as one of the GitHub step outputs
+ self.set_github_output_path('viewer_exe', self.final_exe())
with self.prefix(src=os.path.join(pkgdir, "VMP")):
# include the compiled launcher scripts so that it gets included in the file_list
@@ -846,6 +853,8 @@ class DarwinManifest(ViewerManifest):
def construct(self):
# copy over the build result (this is a no-op if run within the xcode script)
self.path(os.path.join(self.args['configuration'], self.channel()+".app"), dst="")
+ # capture the entire destination app bundle
+ self.set_github_output_path('viewer_exe', '')
pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
relpkgdir = os.path.join(pkgdir, "lib", "release")
@@ -1286,6 +1295,7 @@ class DarwinManifest(ViewerManifest):
'Keychains', 'viewer.keychain')
self.run_command(['security', 'unlock-keychain',
'-p', keychain_pwd, viewer_keychain])
+ sign_retries=3
sign_retry_wait=15
resources = app_in_dmg + "/Contents/Resources/"
plain_sign = glob.glob(resources + "llplugin/*.dylib")
@@ -1294,9 +1304,10 @@ class DarwinManifest(ViewerManifest):
resources + "SLPlugin.app/Contents/MacOS/SLPlugin",
app_in_dmg,
]
- for attempt in range(3):
+ for attempt in range(sign_retries):
if attempt: # second or subsequent iteration
- print("codesign failed, waiting {:d} seconds before retrying".format(sign_retry_wait),
+ print(f"codesign attempt {attempt+1} failed, "
+ f"waiting {sign_retry_wait:d} seconds before retrying",
file=sys.stderr)
time.sleep(sign_retry_wait)
sign_retry_wait*=2
@@ -1327,14 +1338,37 @@ class DarwinManifest(ViewerManifest):
# 'err' goes out of scope
sign_failed = err
else:
- print("Maximum codesign attempts exceeded; giving up", file=sys.stderr)
+ print(f"{sign_retries} codesign attempts failed; giving up",
+ file=sys.stderr)
raise sign_failed
self.run_command(['spctl', '-a', '-texec', '-vvvv', app_in_dmg])
- self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"), app_in_dmg])
+ self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"),
+ app_in_dmg])
finally:
# Unmount the image even if exceptions from any of the above
- self.run_command(['hdiutil', 'detach', '-force', devfile])
+ detach_retries = 3
+ detach_retry_wait = 2
+ # Empirically, on GitHub we've hit errors like:
+ # hdiutil: couldn't eject "disk10" - Resource busy
+ for attempt in range(detach_retries):
+ if attempt: # second or subsequent iteration
+ print(f'detach failed, waiting {detach_retry_wait} seconds before retrying',
+ file=sys.stderr)
+ # Try waiting a bit to see if that improves reliability.
+ time.sleep(detach_retry_wait)
+ detach_retry_wait *= 2
+
+ try:
+ self.run_command(['hdiutil', 'detach', '-force', devfile])
+ # if no exception, the detach worked
+ break
+ except ManifestError as err:
+ detach_failed = err
+ else:
+ print(f'{detach_retries} detach attempts failed', file=sys.stderr)
+ ## can we carry on anyway??
+ ## raise detach_failed
print("Converting temp disk image to final disk image")
self.run_command(['hdiutil', 'convert', sparsename, '-format', 'UDZO',