diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 1a8973ff842c93be3f4a4ac5c4825d2bff47a871..8869831635e686ad242ce93ee2a722d96252b1ce 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -499,8 +499,19 @@ def construct(self):
         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 the whole app image as one of the GitHub step outputs.
-            appbase = self.relpath(self.get_dst_prefix(), base=os.getcwd())
+            # Emit the whole app image as one of the GitHub step outputs. When
+            # we feed upload-artifact multiple absolute pathnames, even just
+            # for exclusion, it ends up creating several extraneous directory
+            # levels within the artifact -- so try using only relative paths.
+            # One problem: as of right now, our current directory os.getcwd()
+            # is not the same as the initial working directory for this job
+            # step, meaning paths relative to our os.getcwd() won't work for
+            # the subsequent upload-artifact step. We're a couple directory
+            # levels down. Try adjusting for those when specifying the base
+            # for self.relpath().
+            appbase = self.relpath(
+                self.get_dst_prefix(),
+                base=os.path.join(os.getcwd(), os.pardir, os.pardir))
             self.set_github_output('viewer_app', appbase,
                                    # except for this stuff
                                    *(('!' + os.path.join(appbase, pattern))