Skip to content
Open
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
4dc59a8
Integrate Velopack installer and update framework
Geenz Dec 19, 2025
386316c
Try to get CI/CD working with velopack.
Geenz Dec 19, 2025
d4432c9
Update build.yaml
Geenz Dec 19, 2025
2bdd1c2
Update build.yaml
Geenz Dec 19, 2025
5baae4a
Update build.yaml
Geenz Dec 20, 2025
ad82d46
Add Velopack update support for macOS and VVM integration
Geenz Jan 21, 2026
a9d125f
Update Velopack version and dependencies
Geenz Jan 21, 2026
b2d4285
Update viewer_manifest.py
Geenz Jan 21, 2026
158fc84
Improve Velopack packaging for macOS
Geenz Jan 22, 2026
e6d2890
Update build.yaml
Geenz Jan 22, 2026
2906ad7
Update viewer_manifest.py
Geenz Jan 22, 2026
8fccef6
Update viewer_manifest.py
Geenz Jan 23, 2026
68be5c7
Update viewer_manifest.py
Geenz Jan 23, 2026
3acb531
Update viewer_manifest.py
Geenz Jan 23, 2026
85298eb
Update viewer_manifest.py
Geenz Jan 23, 2026
a6b978b
#5346 Uninstall older non-velopack viewer (#5363)
akleshchev Feb 10, 2026
276cef0
Merge branch 'release/2026.01' into project/one-click
Geenz Feb 24, 2026
1c8bb96
Use runtime viewer exe name, handle Velopack URL
Geenz Feb 24, 2026
dc1d755
Velopack download failure diagnostic (#5520)
akleshchev Mar 12, 2026
7e21cb0
Remove SLVersionChecker from the viewer with velopack. (#5528)
Geenz Mar 12, 2026
7c4f2a6
Merge pull request #5529 from secondlife/release/2026.01
Geenz Mar 12, 2026
209ab7f
Update lllogininstance_test.cpp
Geenz Mar 12, 2026
4704331
Don't produce shortcuts with VPK - we do this with our post install.
Geenz Mar 12, 2026
093a90c
Update llstartup.cpp
Geenz Mar 12, 2026
57dd238
Bump viewer version from 26.1.0 to 26.1.1
Geenz Mar 12, 2026
fecfcbe
Update viewer_manifest.py
Geenz Mar 12, 2026
0d8bbc0
Potential fix for uninstaller not being functional.
Geenz Mar 12, 2026
38e7165
Fix for UpdaterServiceSetting being ignored.
Geenz Mar 12, 2026
50e0919
Filter for release channel when generating shortcuts.
Geenz Mar 12, 2026
617c428
Update viewer_manifest.py
Geenz Mar 13, 2026
06fd3e7
Add some more logging for icons on Windows builds.
Geenz Mar 13, 2026
a581013
More VPK logging.
Geenz Mar 13, 2026
0a29d51
Move velopack packaging in CI to the sign and package step.
Geenz Mar 13, 2026
eb7d968
Update viewer_manifest.py
Geenz Mar 13, 2026
76236a7
Enable velopack downgrade and skip older updates
Geenz Mar 17, 2026
08439c6
Move the version required checking into velopack's checks.
Geenz Mar 17, 2026
6227691
Potential fix for downgrade prompts.
Geenz Mar 17, 2026
a611d22
Make sure our macOS flow mirrors Windows.
Geenz Mar 18, 2026
8bac218
Make sure to use the dev version of the mac sign and package.
Geenz Mar 18, 2026
62274ec
p#553 Only one of two uninstallers displayed
akleshchev Mar 18, 2026
1bd924f
#5346 Don't force user to shutdown velopack build for NSIS uninstall
akleshchev Mar 18, 2026
d1a4b31
#5346 Ignore option for the uninstall dialog
akleshchev Mar 18, 2026
adee09a
#5346 Fix early exit crash
akleshchev Mar 19, 2026
ebe25a7
#5346 Properly reset version flag.
akleshchev Mar 19, 2026
bbce47f
Add some autodetect logic on macOS.
Geenz Mar 20, 2026
e3592e5
Merge branch 'release/26.1.1' of https://github.com/secondlife/viewer…
Geenz Mar 20, 2026
4e2d576
Update notifications.xml
Geenz Mar 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 57 additions & 3 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

on:
workflow_dispatch:
inputs:
installer_type:
description: 'Windows installer type'
type: choice
options:
- velopack
- nsis
default: 'velopack'
pull_request:
push:
branches: ["main", "release/*", "project/*"]
Expand Down Expand Up @@ -53,6 +61,20 @@
relnotes: ${{ steps.which-branch.outputs.relnotes }}
imagename: ${{ steps.build.outputs.imagename }}
configuration: ${{ matrix.configuration }}
# Windows Velopack outputs (passed to sign-pkg-windows)
velopack_pack_id: ${{ steps.build.outputs.velopack_pack_id }}
velopack_pack_version: ${{ steps.build.outputs.velopack_pack_version }}
velopack_pack_title: ${{ steps.build.outputs.velopack_pack_title }}
velopack_main_exe: ${{ steps.build.outputs.velopack_main_exe }}
velopack_exclude: ${{ steps.build.outputs.velopack_exclude }}
velopack_icon: ${{ steps.build.outputs.velopack_icon }}
velopack_installer_base: ${{ steps.build.outputs.velopack_installer_base }}
# macOS Velopack outputs (passed to sign-pkg-mac)
velopack_mac_pack_id: ${{ steps.build.outputs.velopack_mac_pack_id }}
velopack_mac_pack_version: ${{ steps.build.outputs.velopack_mac_pack_version }}
velopack_mac_pack_title: ${{ steps.build.outputs.velopack_mac_pack_title }}
velopack_mac_main_exe: ${{ steps.build.outputs.velopack_mac_main_exe }}
velopack_mac_bundle_id: ${{ steps.build.outputs.velopack_mac_bundle_id }}
env:
AUTOBUILD_ADDRSIZE: 64
AUTOBUILD_BUILD_ID: ${{ github.run_id }}
Expand Down Expand Up @@ -84,6 +106,8 @@
# Only set variants to the one configuration: don't let build.sh loop
# over variants, let GitHub distribute variants over multiple hosts.
variants: ${{ matrix.configuration }}
# Pass USE_VELOPACK to CMake when using Velopack installer (default) - Windows and macOS
autobuild_configure_parameters: ${{ (contains(matrix.runner, 'windows') || contains(matrix.runner, 'macos')) && (github.event.inputs.installer_type || 'velopack') == 'velopack' && '-- -DUSE_VELOPACK:BOOL=ON' || '' }}
steps:
- name: Checkout code
uses: actions/checkout@v5
Expand Down Expand Up @@ -126,6 +150,17 @@
with:
token: ${{ github.token }}

- name: Setup .NET for Velopack
if: (runner.os == 'Windows' || runner.os == 'macOS') && (github.event.inputs.installer_type || 'velopack') == 'velopack'
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'

- name: Install Velopack CLI
if: (runner.os == 'Windows' || runner.os == 'macOS') && (github.event.inputs.installer_type || 'velopack') == 'velopack'
shell: bash
run: dotnet tool install -g vpk

- name: Build
id: build
shell: bash
Expand Down Expand Up @@ -310,13 +345,21 @@
steps:
- name: Sign and package Windows viewer
if: env.AZURE_KEY_VAULT_URI && env.AZURE_CERT_NAME && env.AZURE_CLIENT_ID && env.AZURE_CLIENT_SECRET && env.AZURE_TENANT_ID
uses: secondlife/viewer-build-util/sign-pkg-windows@v2.0.4
uses: secondlife/viewer-build-util/sign-pkg-windows@geenz/velopack
with:
vault_uri: "${{ env.AZURE_KEY_VAULT_URI }}"
cert_name: "${{ env.AZURE_CERT_NAME }}"
client_id: "${{ env.AZURE_CLIENT_ID }}"
client_secret: "${{ env.AZURE_CLIENT_SECRET }}"
tenant_id: "${{ env.AZURE_TENANT_ID }}"
installer_type: "${{ github.event.inputs.installer_type || 'velopack' }}"
velopack_pack_id: "${{ needs.build.outputs.velopack_pack_id }}"
velopack_pack_version: "${{ needs.build.outputs.velopack_pack_version }}"
velopack_pack_title: "${{ needs.build.outputs.velopack_pack_title }}"
velopack_main_exe: "${{ needs.build.outputs.velopack_main_exe }}"
velopack_exclude: "${{ needs.build.outputs.velopack_exclude }}"
velopack_icon: "${{ needs.build.outputs.velopack_icon }}"
velopack_installer_base: "${{ needs.build.outputs.velopack_installer_base }}"

sign-and-package-mac:
env:
Expand Down Expand Up @@ -349,7 +392,7 @@

- name: Sign and package Mac viewer
if: env.SIGNING_CERT_MACOS && env.SIGNING_CERT_MACOS_IDENTITY && env.SIGNING_CERT_MACOS_PASSWORD && steps.note-creds.outputs.note_user && steps.note-creds.outputs.note_pass && steps.note-creds.outputs.note_team
uses: secondlife/viewer-build-util/sign-pkg-mac@v2
uses: secondlife/viewer-build-util/sign-pkg-mac@geenz/velopack
with:
channel: ${{ needs.build.outputs.viewer_channel }}
imagename: ${{ needs.build.outputs.imagename }}
Expand All @@ -359,6 +402,11 @@
note_user: ${{ steps.note-creds.outputs.note_user }}
note_pass: ${{ steps.note-creds.outputs.note_pass }}
note_team: ${{ steps.note-creds.outputs.note_team }}
velopack_pack_id: "${{ needs.build.outputs.velopack_mac_pack_id }}"
velopack_pack_version: "${{ needs.build.outputs.velopack_mac_pack_version }}"
velopack_pack_title: "${{ needs.build.outputs.velopack_mac_pack_title }}"
velopack_main_exe: "${{ needs.build.outputs.velopack_mac_main_exe }}"
velopack_bundle_id: "${{ needs.build.outputs.velopack_mac_bundle_id }}"

post-windows-symbols:
env:
Expand Down Expand Up @@ -439,6 +487,10 @@
with:
pattern: "*-metadata"

- uses: actions/download-artifact@v4
with:
pattern: "*-releases"

- name: Rename metadata
run: |
cp Windows-metadata/autobuild-package.xml Windows-autobuild-package.xml
Expand All @@ -464,12 +516,14 @@
generate_release_notes: true
target_commitish: ${{ github.sha }}
append_body: true
fail_on_unmatched_files: true
fail_on_unmatched_files: false
files: |
macOS-installer/*.dmg
Windows-installer/*.exe
*-autobuild-package.xml
*-viewer_version.txt
Windows-releases/*
macOS-releases/*

- name: post release URL
run: |
Expand Down
50 changes: 50 additions & 0 deletions autobuild.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2914,6 +2914,56 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>description</key>
<string>Voxelized Hierarchical Approximate Convex Decomposition</string>
</map>
<key>velopack</key>
<map>
<key>platforms</key>
<map>
<key>windows64</key>
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>81a97ec4fc491011726097e6dc8359f537fa7935</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://api.github.com/repos/secondlife-3p/3p-velopack/releases/assets/343914203</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
<key>darwin64</key>
<map>
<key>archive</key>
<map>
<key>creds</key>
<string>github</string>
<key>hash</key>
<string>17b1373f15b33cd86ca30743a383bf4de63d5c09</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://api.github.com/repos/secondlife-3p/3p-velopack/releases/assets/343914198</string>
</map>
<key>name</key>
<string>darwin64</string>
</map>
</map>
<key>license</key>
<string>MIT</string>
<key>license_file</key>
<string>LICENSES/velopack.txt</string>
<key>copyright</key>
<string>Velopack Ltd.</string>
<key>version</key>
<string>a2592d1.21222737470</string>
<key>name</key>
<string>velopack</string>
<key>description</key>
<string>Velopack C/C++ Library</string>
</map>
</map>
<key>package_description</key>
<map>
Expand Down
1 change: 1 addition & 0 deletions indra/cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ set(cmake_SOURCE_FILES
UI.cmake
UnixInstall.cmake
Variables.cmake
Velopack.cmake
VHACD.cmake
ViewerMiscLibs.cmake
VisualLeakDetector.cmake
Expand Down
2 changes: 1 addition & 1 deletion indra/cmake/Python.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ elseif (WINDOWS)
foreach(hive HKEY_CURRENT_USER HKEY_LOCAL_MACHINE)
# prefer more recent Python versions to older ones, if multiple versions
# are installed
foreach(pyver 3.13 3.12 3.11 3.10 3.9 3.8 3.7)
foreach(pyver 3.14 3.13 3.12 3.11 3.10 3.9 3.8 3.7)
list(APPEND regpaths "[${hive}\\SOFTWARE\\Python\\PythonCore\\${pyver}\\InstallPath]")
endforeach()
endforeach()
Expand Down
68 changes: 68 additions & 0 deletions indra/cmake/Velopack.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# -*- cmake -*-
# Velopack installer and update framework integration
# https://velopack.io/

include_guard()

# USE_VELOPACK controls whether to use Velopack for installer packaging (instead of NSIS/DMG)
option(USE_VELOPACK "Use Velopack for installer packaging" OFF)

if (WINDOWS)
include(Prebuilt)
use_prebuilt_binary(velopack)

add_library(ll::velopack INTERFACE IMPORTED)

target_include_directories(ll::velopack SYSTEM INTERFACE
${LIBS_PREBUILT_DIR}/include/velopack
)

target_link_libraries(ll::velopack INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/velopack_libc.lib
)

# Windows system libraries required by Velopack
target_link_libraries(ll::velopack INTERFACE
winhttp
ole32
shell32
shlwapi
version
userenv
ws2_32
bcrypt
ntdll
)

target_compile_definitions(ll::velopack INTERFACE LL_VELOPACK=1)

elseif (DARWIN)
include(Prebuilt)
use_prebuilt_binary(velopack)

add_library(ll::velopack INTERFACE IMPORTED)

target_include_directories(ll::velopack SYSTEM INTERFACE
${LIBS_PREBUILT_DIR}/include/velopack
)

target_link_libraries(ll::velopack INTERFACE
${ARCH_PREBUILT_DIRS_RELEASE}/libvelopack_libc.a
)

# macOS system frameworks required by Velopack (Rust static library dependencies)
target_link_libraries(ll::velopack INTERFACE
"-framework Foundation"
"-framework Security"
"-framework SystemConfiguration"
"-framework AppKit"
"-framework CoreFoundation"
"-framework CoreServices"
"-framework IOKit"
"-liconv"
"-lresolv"
)

target_compile_definitions(ll::velopack INTERFACE LL_VELOPACK=1)

endif()
3 changes: 2 additions & 1 deletion indra/lib/python/indra/util/llmanifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,8 @@ def get_default_platform(dummy):
for use by a .bat file.""",
default=None),
dict(name='versionfile',
description="""The name of a file containing the full version number."""),
description="""The name of a file containing the full version number.""",
default=None),
]

def usage(arguments, srctree=""):
Expand Down
15 changes: 15 additions & 0 deletions indra/newview/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ include(TinyEXR)
include(ThreeJS)
include(Tracy)
include(UI)
include(Velopack)
include(ViewerMiscLibs)
include(ViewerManager)
include(VisualLeakDetector)
Expand Down Expand Up @@ -659,6 +660,7 @@ set(viewer_SOURCE_FILES
llurllineeditorctrl.cpp
llurlwhitelist.cpp
llversioninfo.cpp
llvvmquery.cpp
llviewchildren.cpp
llviewerassetstats.cpp
llviewerassetstorage.cpp
Expand Down Expand Up @@ -1337,6 +1339,7 @@ set(viewer_HEADER_FILES
llurllineeditorctrl.h
llurlwhitelist.h
llversioninfo.h
llvvmquery.h
llviewchildren.h
llviewerassetstats.h
llviewerassetstorage.h
Expand Down Expand Up @@ -1456,6 +1459,8 @@ if (DARWIN)
LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.h)
LIST(APPEND viewer_SOURCE_FILES llfilepicker_mac.mm)
LIST(APPEND viewer_HEADER_FILES llfilepicker_mac.h)
LIST(APPEND viewer_SOURCE_FILES llvelopack.cpp)
LIST(APPEND viewer_HEADER_FILES llvelopack.h)

set_source_files_properties(
llappviewermacosx-objc.mm
Expand Down Expand Up @@ -1518,16 +1523,19 @@ if (WINDOWS)

list(APPEND viewer_SOURCE_FILES
llappviewerwin32.cpp
llvelopack.cpp
llwindebug.cpp
)
set_source_files_properties(
llappviewerwin32.cpp
llvelopack.cpp
PROPERTIES
COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}"
)

list(APPEND viewer_HEADER_FILES
llappviewerwin32.h
llvelopack.h
llwindebug.h
)

Expand Down Expand Up @@ -1941,6 +1949,7 @@ if (WINDOWS)
"--discord=${USE_DISCORD}"
"--openal=${USE_OPENAL}"
"--tracy=${USE_TRACY}"
"--velopack=${USE_VELOPACK}"
--build=${CMAKE_CURRENT_BINARY_DIR}
--buildtype=$<CONFIG>
"--channel=${VIEWER_CHANNEL}"
Expand Down Expand Up @@ -2064,6 +2073,10 @@ if (USE_DISCORD)
target_link_libraries(${VIEWER_BINARY_NAME} ll::discord_sdk )
endif ()

if (TARGET ll::velopack)
target_link_libraries(${VIEWER_BINARY_NAME} ll::velopack )
endif ()

if( TARGET ll::intel_memops )
target_link_libraries(${VIEWER_BINARY_NAME} ll::intel_memops )
endif()
Expand Down Expand Up @@ -2261,9 +2274,11 @@ if (DARWIN)
--arch=${ARCH}
--artwork=${ARTWORK_DIR}
"--bugsplat=${BUGSPLAT_DB}"
--bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER}
"--discord=${USE_DISCORD}"
"--openal=${USE_OPENAL}"
"--tracy=${USE_TRACY}"
"--velopack=${USE_VELOPACK}"
--build=${CMAKE_CURRENT_BINARY_DIR}
--buildtype=$<CONFIG>
"--channel=${VIEWER_CHANNEL}"
Expand Down
2 changes: 1 addition & 1 deletion indra/newview/VIEWER_VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
26.1.0
26.1.1
12 changes: 11 additions & 1 deletion indra/newview/app_settings/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4237,7 +4237,17 @@
<key>Value</key>
<string>0.0.0</string>
</map>

<key>LastInstallVersion</key>
<map>
<key>Comment</key>
<string>Version number of last instance of the viewer that you installed</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>LimitDragDistance</key>
<map>
<key>Comment</key>
Expand Down
Loading
Loading