From fd1c0bc8bca40251c718fecd53d239b1e409a832 Mon Sep 17 00:00:00 2001 From: Beq Date: Thu, 8 Dec 2022 23:59:51 +0000 Subject: [PATCH] Extend GHA for Release builds (with Mac Codesigning) add KDU from private repo kdu is arch agnostic modify for rclone Add the fmodstudio Switch to requirements.txt for python deps workaround bad python in windows runner images. Need to fetch full depth or we do not get our computed revision num Try up to 10 times to detach HDI on Mac cos 5 was not always enough! Fix bug on windows as side-effect of Mac cleanup doh --- .github/workflows/build_viewer.yml | 215 +++++++++++++++++++++-------- indra/newview/viewer_manifest.py | 31 ++++- requirements.txt | 2 + 3 files changed, 183 insertions(+), 65 deletions(-) create mode 100644 requirements.txt diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml index 8bc2ae7010..f56452fb47 100644 --- a/.github/workflows/build_viewer.yml +++ b/.github/workflows/build_viewer.yml @@ -2,84 +2,181 @@ name: Build viewer on: push env: AUTOBUILD_VARIABLES_FILE: ${{github.workspace}}/build-variables/variables - EXTRA_ARGS: -DFMODSTUDIO=Off -DUSE_KDU=Off + EXTRA_ARGS: -DFMODSTUDIO=ON -DUSE_KDU=ON --crashreporting + build_secrets_checkout: ${{github.workspace}}/signing + jobs: build_matrix: strategy: matrix: - os: [macos-11,ubuntu-18.04,windows-2022] + os: [macos-10.15,ubuntu-18.04,windows-2022] grid: [sl,os] addrsize: [64,32] exclude: - os: ubuntu-18.04 addrsize: 32 - - os: macos-11 + - os: macos-10.15 addrsize: 32 runs-on: ${{ matrix.os }} steps: - - name: Set OS flag - if: matrix.grid == 'os' - run: echo "FS_GRID=-DOPENSIM:BOOL=ON" >> $GITHUB_ENV - shell: bash + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + if: runner.os != 'Windows' + id: py311 + with: + python-version: '3.11' + cache: 'pip' + - run: pip3 install -r requirements.txt + - name: Check python version + run: python -V + - name: Checkout build var + uses: actions/checkout@v3 + with: + repository: FirestormViewer/fs-build-variables + path: build-variables + - name: Setup rclone and download the folder + uses: beqjanus/setup-rclone@main + with: + rclone_config: ${{ secrets.RCLONE_CONFIG }} - - name: Set SL flag - if: matrix.grid == 'sl' - run: echo "FS_GRID=-DOPENSIM:BOOL=OFF" >> $GITHUB_ENV - shell: bash - - - name: Get the code - uses: actions/checkout@v3 - with: - fetch-depth: 1 + - name: Set OS flag + if: matrix.grid == 'os' + run: echo "FS_GRID=-DOPENSIM:BOOL=ON" >> $GITHUB_ENV + shell: bash - - name: Checkout build var - uses: actions/checkout@v3 - with: - repository: FirestormViewer/fs-build-variables - path: build-variables + - name: Set channel name + if: matrix.addrsize == '64' + run: echo "FS_RELEASE_CHAN=Releasex64" >> $GITHUB_ENV + shell: bash + + - name: Set channel name for 32 bit + if: matrix.addrsize == '32' + run: echo "FS_RELEASE_CHAN=Release" >> $GITHUB_ENV + shell: bash + + - name: Set SL flag + if: matrix.grid == 'sl' + run: echo "FS_GRID=-DOPENSIM:BOOL=OFF -DHAVOK_TPV:BOOL=ON" >> $GITHUB_ENV + shell: bash - - name: set VSVER for Windows builds - if: runner.os == 'Windows' - run: echo "AUTOBUILD_VSVER=170" >> $GITHUB_ENV - shell: bash + - name: Get the code + uses: actions/checkout@v3 + with: + fetch-depth: 0 - - name: Install required Ubuntu packages - if: runner.os == 'Linux' - run: sudo apt-get install python3-setuptools mesa-common-dev libgl1-mesa-dev libxinerama-dev libxrandr-dev libpulse-dev libglu1-mesa-dev + - name: Checkout build var + uses: actions/checkout@v3 + with: + repository: FirestormViewer/fs-build-variables + path: build-variables - - name: install autobuild - run: pip3 install git+https://github.com/Nicky-D/autobuild@main_nd + - name: rclone the private 3p packages on Windows + if: runner.os == 'Windows' + run: 'rclone copy fs_bundles: --include "*windows*bz2" .' + - name: rclone the private 3p packages on MacOS + if: runner.os == 'MacOS' + run: 'rclone copy fs_bundles: --include "*darwin*bz2" .' + - name: rclone the private 3p packages on Linux + if: runner.os == 'Linux' + run: 'rclone copy fs_bundles: --include "*linux*bz2" .' - - name: install autobuild - run: pip3 install llbase + - name: set VSVER for Windows builds + if: runner.os == 'Windows' + run: echo "AUTOBUILD_VSVER=170" >> $GITHUB_ENV + shell: bash + - name: Install certificate + if: runner.os == 'macOS' + env: + FS_CERT: ${{ secrets.FS_CERT }} + FS_CERT_PASS: ${{ secrets.FS_CERT_PASS }} + FS_KEYCHAIN_PASS: ${{ secrets.FS_KEYCHAIN_PASS }} + NOTARIZE_CREDS: ${{ secrets.NOTARIZE_CREDS }} + run: | + mkdir -p ${build_secrets_checkout}/code-signing-osx + echo -n "$FS_CERT" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/fs-cert.p12 + echo -n "$FS_CERT_PASS" >${build_secrets_checkout}/code-signing-osx/password.txt + echo -n "$NOTARIZE_CREDS" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/notarize_creds.sh + security create-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain + security set-keychain-settings -lut 21600 ~/Library/Keychains/viewer.keychain + security unlock-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain + security import ${build_secrets_checkout}/code-signing-osx/fs-cert.p12 -P "$FS_CERT_PASS" -A -t cert -f pkcs12 -k ~/Library/Keychains/viewer.keychain + security set-key-partition-list -S apple-tool:,apple:, -s -k "$FS_KEYCHAIN_PASS" -t private ~/Library/Keychains/viewer.keychain + security list-keychain -d user -s ~/Library/Keychains/viewer.keychain + - name: Install required Ubuntu packages + if: runner.os == 'Linux' + run: sudo apt-get install python3-setuptools mesa-common-dev libgl1-mesa-dev libxinerama-dev libxrandr-dev libpulse-dev libglu1-mesa-dev + - name: install autobuild + run: pip3 install git+https://github.com/Nicky-D/autobuild@main_nd - - name: Configure - run: autobuild configure -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{github.ref_name}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}} - shell: bash - - - name: build - run: autobuild build -c ReleaseFS -A${{matrix.addrsize}} --no-configure - shell: bash + - name: install autobuild + run: pip3 install llbase - - name: publish ${{ matrix.os }} artifacts - if: runner.os == 'Windows' - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip - path: | - build-*/newview/Release/*Setup.exe - build-*/newview/Release/*.xz + - name: edit installables (64 bit) + if: runner.os == 'Windows' && matrix.addrsize == 64 + run: | + autobuild installables edit llphysicsextensions_tpv platform=windows${{matrix.addrsize}} url='file:///\${{ github.workspace }}\llphysicsextensions_tpv-1.0.571939-windows${{matrix.addrsize}}-571939.tar.bz2' + autobuild installables edit fmodstudio platform=windows${{matrix.addrsize}} url='file:///\${{ github.workspace }}\fmodstudio-2.02.09-windows${{matrix.addrsize}}-222890941.tar.bz2' + shell: bash - - name: publish ${{ matrix.os }} artifacts - if: runner.os == 'Linux' - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip - path: build-linux-*/newview/*.xz + - name: edit installables (32 bit) + if: runner.os == 'Windows' && matrix.addrsize == 32 + run: | + autobuild installables edit llphysicsextensions_tpv platform=windows url='file:///\${{ github.workspace }}\llphysicsextensions_tpv-1.0.571939-windows-571939.tar.bz2' + autobuild installables edit fmodstudio platform=windows url='file:///\${{ github.workspace }}\fmodstudio-2.02.09-windows-222890940.tar.bz2' + shell: bash - - name: publish ${{ matrix.os }} artifacts - if: runner.os == 'macOS' - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip - path: build-darwin-*/newview/*.dmg + - name: edit installables (32/64 agnostic) + if: runner.os == 'Windows' + run: | + autobuild installables edit kdu platform=windows url='file:///\${{ github.workspace }}\kdu-8.2-windows-212351246.tar.bz2' + shell: bash + + - name: edit installables + if: runner.os == 'macOS' + run: | + autobuild installables edit llphysicsextensions_tpv platform=darwin${{matrix.addrsize}} url='file:////${{ github.workspace }}/llphysicsextensions_tpv-1.0.571939-darwin${{matrix.addrsize}}-571939.tar.bz2' + autobuild installables edit kdu platform=darwin url='file:////${{ github.workspace }}/kdu-8.2-darwin-212431232.tar.bz2' + autobuild installables --debug edit fmodstudio platform=darwin${{matrix.addrsize}} url='file:////${{ github.workspace }}/fmodstudio-2.02.09-darwin${{matrix.addrsize}}-5.tar.bz2' + shell: bash + + - name: edit installables + if: runner.os == 'Linux' + run: | + autobuild installables edit kdu platform=linux${{matrix.addrsize}} url='file:////${{ github.workspace }}/kdu-8.2-linux${{matrix.addrsize}}_bionic-220911445.tar.bz2' + autobuild installables edit fmodstudio platform=linux${{matrix.addrsize}} url='file:////${{ github.workspace }}/fmodstudio-2.02.09-linux${{matrix.addrsize}}-222891103.tar.bz2' + shell: bash + + - name: Configure + run: autobuild configure --debug -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}} + shell: bash + + - name: build + run: autobuild build --debug -c ReleaseFS -A${{matrix.addrsize}} --no-configure + shell: bash + + - name: publish Windows artifacts + if: runner.os == 'Windows' + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip + path: | + build-*/newview/Release/*Setup.exe + build-*/newview/Release/*.xz + + - name: publish Linux artifacts + if: runner.os == 'Linux' + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip + path: | + build-linux-*/newview/*.xz + build-linux-*/newview/*.bz2 + + - name: publish MacOS artifacts + if: runner.os == 'macOS' + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip + path: | + build-darwin-*/newview/*.dmg + build-darwin-*/newview/*.bz2 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index bc0253ccb5..20ebbb3e7e 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -609,13 +609,15 @@ class WindowsManifest(ViewerManifest): print ("Skipping GLOD library (assumming linked statically)") # Get fmodstudio dll if needed - if self.args['fmodstudio'] == 'ON': + # if self.args['fmodstudio'] == 'ON': + if self.args['fmodstudio'].lower() == 'on': if(self.args['configuration'].lower() == 'debug'): self.path("fmodL.dll") else: self.path("fmod.dll") - if self.args['openal'] == 'ON': + # if self.args['openal'] == 'ON': + if self.args['openal'].lower() == 'on': # Get openal dll self.path("OpenAL32.dll") self.path("alut.dll") @@ -1344,6 +1346,7 @@ class DarwinManifest(ViewerManifest): with self.prefix(src="", dst="Contents"): # everything goes in Contents bugsplat_db = self.args.get('bugsplat') + print(f"debug: bugsplat_db={bugsplat_db}") if bugsplat_db: # Inject BugsplatServerURL into Info.plist if provided. Info_plist = self.dst_path_of("Info.plist") @@ -1477,17 +1480,26 @@ class DarwinManifest(ViewerManifest): self.path2basename(relpkgdir, libfile) # Fmod studio dylibs (vary based on configuration) - if self.args['fmodstudio'] == 'ON': + # Fix intolerant processing of booleans + # if self.args['fmodstudio'].lower() == 'ON': + usefmod = self.args['fmodstudio'].lower() + print(f"debug: fmodstudio={usefmod}") + if usefmod == 'on': if self.args['configuration'].lower() == 'debug': + print("debug: fmodstudio is used in debug") for libfile in ( "libfmodL.dylib", ): dylibs += path_optional(os.path.join(debpkgdir, libfile), libfile) else: + print("debug: fmodstudio is used in release") for libfile in ( "libfmod.dylib", ): + + print("debug: adding {} to dylibs for fmodstudio".format(path_optional(os.path.join(relpkgdir, libfile), libfile))) dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile) + print(f"debug: dylibs = {dylibs}") # our apps executable_path = {} @@ -1832,7 +1844,12 @@ class DarwinManifest(ViewerManifest): finally: # Unmount the image even if exceptions from any of the above - self.run_command(['hdiutil', 'detach', '-force', devfile]) + for tries in range(10): + try: + self.run_command(['hdiutil', 'detach', '-force', devfile]) + except ManifestError as err: + print(f"detach failed on attempt {tries}") + time.sleep(1) print("Converting temp disk image to final disk image") self.run_command(['hdiutil', 'convert', sparsename, '-format', 'UDZO', @@ -2199,7 +2216,8 @@ class Linux_i686_Manifest(LinuxManifest): print("tcmalloc files not found, skipping") pass - if self.args['fmodstudio'] == 'ON': + # if self.args['fmodstudio'] == 'ON': + if self.args['fmodstudio'].lower() == 'on': try: self.path("libfmod.so") self.path("libfmod.so*") @@ -2240,7 +2258,8 @@ class Linux_x86_64_Manifest(LinuxManifest): # is now in the slvoice package, and we need to just use it as is. # self.path("libopenal32.so", "libvivoxoal.so.1") # vivox's sdk expects this soname - if self.args['fmodstudio'] == 'ON': + # if self.args['fmodstudio'] == 'ON': + if self.args['fmodstudio'].lower() == 'on': try: self.path("libfmod.so") self.path("libfmod.so*") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..25bcb223a5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +llbase==1.2.11 +git+https://github.com/Nicky-D/autobuild@main_nd#egg=autobuild \ No newline at end of file