diff options
-rw-r--r-- | .github/workflows/build.yaml | 24 | ||||
-rw-r--r-- | .github/workflows/build_linux.yaml | 47 | ||||
-rw-r--r-- | autobuild.xml | 11 | ||||
-rwxr-xr-x | build.sh | 30 | ||||
-rwxr-xr-x | indra/newview/viewer_manifest.py | 50 |
5 files changed, 82 insertions, 80 deletions
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c7a758bd0f..3ac470b5ed 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -11,7 +11,7 @@ jobs: build: strategy: matrix: - runner: [windows-large, macos-12-xl] + runner: [windows-large, macos-12-xl, linux-large] configuration: [Release, ReleaseOS] python-version: ["3.11"] include: @@ -20,6 +20,8 @@ jobs: exclude: - runner: macos-12-xl configuration: ReleaseOS + - runner: linux-large + configuration: Release runs-on: ${{ matrix.runner }} outputs: viewer_channel: ${{ steps.build.outputs.viewer_channel }} @@ -95,6 +97,10 @@ jobs: ${{ runner.os }}-64-${{ matrix.configuration }}- ${{ runner.os }}-64- + - name: Install Linux dependencies + if: runner.os == 'linux' + run: sudo apt update && sudo apt install -y libfltk1.3-dev libunwind-dev libgl1-mesa-dev libglu1-mesa-dev libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev libxrender-dev libxfixes-dev libxxf86vm-dev libxss-dev libdbus-1-dev libudev-dev libssl-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libfreetype6-dev ninja-build libxft-dev + - name: Install windows dependencies if: runner.os == 'Windows' run: choco install nsis-unicode @@ -230,6 +236,16 @@ jobs: path: | ${{ steps.build.outputs.viewer_app }} + # ND: We only have ReleaseOS builds for Linux so far, thus upload what we have + # This steps can be deleted once "Release" is in place and makes "ReleaseOS" obsolete (for upload) + - name: Upload Linux ReleaseOS archive + if: matrix.configuration == 'ReleaseOS' && steps.build.outputs.viewer_app && matrix.os == 'linux' + uses: actions/upload-artifact@v3 + with: + name: "${{ steps.build.outputs.artifact }}-app" + path: | + ${{ steps.build.outputs.viewer_app }} + # The other upload of nontrivial size is the symbol file. Use a distinct # artifact for that too. - name: Upload symbol file @@ -372,7 +388,7 @@ jobs: with: name: Windows-metadata - - name: Rename windows metadata + - name: Rename windows metadata run: | mv autobuild-package.xml Windows-autobuild-package.xml mv newview/viewer_version.txt Windows-viewer_version.txt @@ -381,7 +397,7 @@ jobs: with: name: macOS-metadata - - name: Rename macOS metadata + - name: Rename macOS metadata run: | mv autobuild-package.xml macOS-autobuild-package.xml mv newview/viewer_version.txt macOS-viewer_version.txt @@ -407,7 +423,7 @@ jobs: append_body: true fail_on_unmatched_files: true files: | - *.dmg + *.dmg *.exe *-autobuild-package.xml *-viewer_version.txt diff --git a/.github/workflows/build_linux.yaml b/.github/workflows/build_linux.yaml deleted file mode 100644 index 005284e984..0000000000 --- a/.github/workflows/build_linux.yaml +++ /dev/null @@ -1,47 +0,0 @@ -name: Linux build example -on: - workflow_dispatch: - push: -jobs: - build: - runs-on: ubuntu-22.04 - env: - AUTOBUILD_ADDRSIZE: 64 - AUTOBUILD_VARIABLES_FILE: ${{ github.workspace }}/.build-variables/variables - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha || github.sha }} - - - name: Setup python - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - - name: Checkout build variables - uses: actions/checkout@v4 - with: - repository: secondlife/build-variables - ref: viewer - path: .build-variables - - - name: Checkout master-message-template - uses: actions/checkout@v4 - with: - repository: secondlife/master-message-template - path: .master-message-template - - - name: Install autobuild and python dependencies - run: pip3 install autobuild llsd - - - name: Install Linux dependencies - if: runner.os == 'linux' - run: sudo apt update && sudo apt install -y libfltk1.3-dev libunwind-dev libgl1-mesa-dev libglu1-mesa-dev libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev libxrender-dev libxfixes-dev libxxf86vm-dev libxss-dev libdbus-1-dev libudev-dev libssl-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libfreetype6-dev ninja-build libxft-dev - - - name: Build - id: build - shell: bash - run: | - autobuild configure -c ReleaseOS -A64 - cd build-linux-x86_64 && ninja -k0 diff --git a/autobuild.xml b/autobuild.xml index e95eb13a6b..ca774fc769 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -954,9 +954,13 @@ <key>archive</key> <map> <key>hash</key> - <string>00d0333936a67059a43a6ec8ac38d564</string> + <string>ebfb82b6143874e7938b9d1e8a70d0a2e28aa818</string> + <key>hash_algorithm</key> + <string>sha1</string> <key>url</key> - <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/748/1563/havok_source-2012.1-2-linux64-500739.tar.bz2</string> + <string>https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912599</string> + <key>creds</key> + <string>github</string> </map> <key>name</key> <string>linux64</string> @@ -3386,7 +3390,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <string>-G</string> <string>Ninja</string> <string>-DLL_TESTS=Off</string> -</array> + <string>-DUSE_OPENAL=On</string> + </array> </map> <key>build</key> <map> @@ -48,7 +48,7 @@ build_dir_Darwin() build_dir_Linux() { - echo build-linux-i686 + echo build-linux-x86_64 } build_dir_CYGWIN() @@ -156,6 +156,22 @@ pre_build() "-DSIGNING_IDENTITY:STRING=Developer ID Application: Linden Research, Inc.") fi + if [[ "$arch" == "Linux" ]] + then + # RELEASE_CRASH_REPORTING is tuned on unconditionaly, this is fine but not for Linux as of now (due to missing breakpad/crashpad support) + RELEASE_CRASH_REPORTING=OFF + + # Builds turn on HAVOK even when config is ReleaseOS. + # This needs AUTOBUILD_GITHUB_TOKEN to be set in the environment. But this is not set for PRs apparently. + # Still this seemlingy works on Windows and Mac, why not on the Linux runner? Mystery to be solved elsewhere. + + + if [[ "$variant" == "ReleaseOS" ]] + then + HAVOK=OFF + fi + fi + if [ "${RELEASE_CRASH_REPORTING:-}" != "OFF" ] then case "$arch" in @@ -200,14 +216,14 @@ package_llphysicsextensions_tpv() tpv_status=0 # nat 2016-12-21: without HAVOK, can't build PhysicsExtensions_TPV. if [ "$variant" = "Release" -a "${HAVOK:-}" != "OFF" ] - then + then tpvconfig="$build_dir/packages/llphysicsextensions/autobuild-tpv.xml" test -r "$tpvconfig" || fatal "No llphysicsextensions_tpv autobuild configuration found" # SL-19942: autobuild ignores -c switch if AUTOBUILD_CONFIGURATION set unset AUTOBUILD_CONFIGURATION "$autobuild" build --quiet --config-file "$(native_path "$tpvconfig")" -c Tpv \ || fatal "failed to build llphysicsextensions_tpv" - + # capture the package file name for use in upload later... PKGTMP=`mktemp -t pgktpv.XXXXXX` cleanup="$cleanup ; rm $PKGTMP* 2>/dev/null" @@ -240,7 +256,7 @@ build() || fatal "failed building $variant" echo true >"$build_dir"/build_ok end_section "autobuild $variant" - + begin_section "extensions $variant" # Run build extensions if [ -d ${build_dir}/packages/build-extensions ] @@ -313,7 +329,7 @@ begin_section "select viewer channel" # Look for a branch-specific viewer_channel setting # changeset_branch is set in the sling-buildscripts viewer_build_branch=$(echo -n "${changeset_branch:-$(repo_branch ${BUILDSCRIPTS_SRC:-$(pwd)})}" | tr -Cs 'A-Za-z0-9_' '_' | sed -E 's/^_+//; s/_+$//') -if [ -n "$viewer_build_branch" ] +if [ -n "$viewer_build_branch" ] then branch_viewer_channel_var="${viewer_build_branch}_viewer_channel" if [ -n "${!branch_viewer_channel_var}" ] @@ -435,7 +451,7 @@ do record_event "configure for $variant failed: build skipped" fi - if ! $succeeded + if ! $succeeded then record_event "remaining variants skipped due to $variant failure" break @@ -500,7 +516,7 @@ then fi done end_section "Upload Debian Repository" - + else record_event "debian build not enabled" fi diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 3de57c6bf4..c97d421504 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -59,7 +59,7 @@ class ViewerManifest(LLManifest): # files during the build (see copy_w_viewer_manifest # and copy_l_viewer_manifest targets) return 'package' in self.args['actions'] - + def construct(self): super(ViewerManifest, self).construct() self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg") @@ -87,7 +87,7 @@ class ViewerManifest(LLManifest): # ... and the entire image filters directory self.path("filters") - + # ... and the included spell checking dictionaries pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') with self.prefix(src=pkgdir): @@ -260,14 +260,14 @@ class ViewerManifest(LLManifest): def app_name_oneword(self): return ''.join(self.app_name().split()) - + def icon_path(self): return "icons/" + self.channel_type() def extract_names(self,src): """Extract contributor names from source file, returns string""" try: - with open(src, 'r') as contrib_file: + with open(src, 'r') as contrib_file: lines = contrib_file.readlines() except IOError: print("Failed to open '%s'" % src) @@ -491,7 +491,7 @@ class Windows_x86_64_Manifest(ViewerManifest): raise Exception("Directories are not supported by test_CRT_and_copy_action()") else: print("Doesn't exist:", src) - + def construct(self): super().construct() @@ -543,7 +543,7 @@ class Windows_x86_64_Manifest(ViewerManifest): self.path2basename(os.path.join(os.pardir, 'llplugin', 'slplugin', self.args['configuration']), "slplugin.exe") - + # Get shared libs from the shared libs staging directory with self.prefix(src=os.path.join(self.args['build'], os.pardir, 'sharedlibs', self.args['buildtype'])): @@ -582,7 +582,7 @@ class Windows_x86_64_Manifest(ViewerManifest): # Vivox libraries self.path("vivoxsdk_x64.dll") self.path("ortp_x64.dll") - + # OpenSSL self.path("libcrypto-1_1-x64.dll") self.path("libssl-1_1-x64.dll") @@ -709,7 +709,7 @@ class Windows_x86_64_Manifest(ViewerManifest): self.path("plugins/") if not self.is_packaging_viewer(): - self.package_file = "copied_deps" + self.package_file = "copied_deps" def nsi_file_commands(self, install=True): def INSTDIR(path): @@ -768,7 +768,7 @@ class Windows_x86_64_Manifest(ViewerManifest): installer_file = self.installer_base_name() + '_Setup.exe' substitution_strings['installer_file'] = installer_file - + version_vars = """ !define INSTEXE "SLVersionChecker.exe" !define VERSION "%(version_short)s" @@ -777,7 +777,7 @@ class Windows_x86_64_Manifest(ViewerManifest): !define VERSION_REGISTRY "%(version_registry)s" !define VIEWER_EXE "%(final_exe)s" """ % substitution_strings - + if self.channel_type() == 'release': substitution_strings['caption'] = CHANNEL_VENDOR_BASE else: @@ -908,7 +908,7 @@ class Darwin_x86_64_Manifest(ViewerManifest): # yields a slightly smaller binary but makes crash # logs mostly useless. This may be desirable for the # final release. Or not. - if ("package" in self.args['actions'] or + if ("package" in self.args['actions'] or "unpacked" in self.args['actions']): self.run_command( ['strip', '-S', executable]) @@ -933,7 +933,7 @@ class Darwin_x86_64_Manifest(ViewerManifest): with self.prefix(src=relpkgdir, dst=""): self.path("libndofdev.dylib") - self.path("libhunspell-*.dylib") + self.path("libhunspell-*.dylib") with self.prefix(src_dst="cursors_mac"): self.path("*.tif") @@ -1204,7 +1204,7 @@ class LinuxManifest(ViewerManifest): pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') if "package_dir" in self.args: pkgdir = self.args['package_dir'] - + relpkgdir = os.path.join(pkgdir, "lib", "release") debpkgdir = os.path.join(pkgdir, "lib", "debug") @@ -1343,6 +1343,9 @@ class LinuxManifest(ViewerManifest): def package_finish(self): installer_name = self.installer_base_name() + # When running as a GitHub Action job, RUNNER_TEMP is defined as the tmp dir + RUNNER_TEMP = os.getenv('RUNNER_TEMP') + self.strip_binaries() # Fix access permissions @@ -1357,21 +1360,30 @@ class LinuxManifest(ViewerManifest): # temporarily move directory tree so that it has the right # name in the tarfile realname = self.get_dst_prefix() - tempname = self.build_path_of(installer_name) - self.run_command(["mv", realname, tempname]) + versionedName = self.build_path_of(installer_name) + + tarName = versionedName + ".tar.bz2" + + # If using a github runner we divert packaging a little. Considering this wil be a VM/docker image + # we can just pack the final installer into RUNNER_TEMP and not into the usual stop we'd pick when + # not building a GHA release + if RUNNER_TEMP: + tarName = os.path.join(RUNNER_TEMP, self.package_file) + + self.run_command(["mv", realname, versionedName]) + try: # only create tarball if it's a release build. if self.args['buildtype'].lower() == 'release': - # --numeric-owner hides the username of the builder for - # security etc. self.run_command(['tar', '-C', self.get_build_prefix(), '--numeric-owner', '-cjf', - tempname + '.tar.bz2', installer_name]) + tarName, installer_name]) + self.set_github_output_path('viewer_app', tarName) else: print("Skipping %s.tar.bz2 for non-Release build (%s)" % \ (installer_name, self.args['buildtype'])) finally: - self.run_command(["mv", tempname, realname]) + self.run_command(["mv", versionedName, realname]) def strip_binaries(self): doStrip = False |