Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
c94a118
#5084 Fix mac's watchdog not catching test case
akleshchev Feb 25, 2026
ca3a23b
#3612 Fix viewer not getting 'nonexistent region' responses
akleshchev Mar 2, 2026
88c4cf7
#5426 Fix crash in LLPointer<LLImageGL>::notNull
marchcat Mar 3, 2026
e572093
#5084 Disable watchdog in 26.1
akleshchev Mar 3, 2026
52ed305
#5084 Convert watchdog to a simpleton
akleshchev Mar 3, 2026
ce139f2
#5486 Fix potential unpackBinaryData buffer issues
akleshchev Mar 4, 2026
ba92b8d
#5084 Fix watchdog's simpleton init
akleshchev Mar 6, 2026
bb69f7e
#5497 Handle a case of missing files in conversation view
akleshchev Mar 5, 2026
e529a09
Bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 1, 2026
e4505eb
Bump actions/download-artifact from 7 to 8
dependabot[bot] Mar 1, 2026
9d985d7
#5506 Periodical stalls on media update
akleshchev Mar 8, 2026
5d8012e
Merge 2026.01 into develop
akleshchev Mar 9, 2026
85d4e8e
#3612 Fix empty 'copy' message
akleshchev Mar 9, 2026
7f5963b
#5512 Crash on reset_login
akleshchev Mar 9, 2026
18db816
Merge pull request #5097 from secondlife/release/2026.01
Geenz Mar 12, 2026
d35be21
Merge remote-tracking branch 'origin/main' into develop
Geenz Mar 12, 2026
6194e88
Merge pull request #5411 from trish-sl/fix-highlighttransparency-alph…
trish-sl Mar 12, 2026
53af39b
#1625 Blinding white screen when changing environments
akleshchev Mar 3, 2026
d44da70
Clean up unused code
KittyBarnett Aug 29, 2024
8b0d042
LLViewerObject::getAttachmentItemID() sometimes returns the NULL UUID…
KittyBarnett Aug 29, 2024
ac0c734
LLAppearanceMgr::updateAppearanceFromCOF() doesn't properly filter it…
KittyBarnett Aug 29, 2024
a7512cf
Resolve race condition when removing/add attachments inside of a LLWe…
KittyBarnett Aug 29, 2024
b2a22e1
Resolve issues tracking worn attachments that aren't in COF yet (see …
KittyBarnett Aug 29, 2024
6c6d618
If multiple LLWearableHoldingPattern instances are waiting for comple…
KittyBarnett Aug 29, 2024
f6d0b36
Accurately reflect the worn status of inventory items (the reasons fo…
KittyBarnett Jan 29, 2025
5bc81c9
Attaching a rezzed object incorrectly delays attachment link creation…
KittyBarnett Jan 29, 2025
4034714
[FIXED] Wearing >56 clothing items will incorrectly filter since body…
KittyBarnett Feb 28, 2026
75a98ba
#5541 Add safety checks for inventory save during shutdown
marchcat Mar 16, 2026
a5a6cfb
viewer-private#540 Fix freeze when opening large profiles #1
akleshchev Mar 16, 2026
dd4f5cf
viewer-private#540 Speed up url search #2
akleshchev Mar 16, 2026
05c8cd8
viewer-private#540 Avoid micro truncations #3
akleshchev Mar 16, 2026
0aa33a1
#5454 fix not showing Friend requests during start up notification
maxim-productengine Mar 19, 2026
166fa85
#5543 PBR support for pipette
akleshchev Mar 17, 2026
69cbb48
#5543 Clear pipette button's visibility logic for materials
akleshchev Mar 18, 2026
e9b39bf
Improve detection of marketplace urls for the marketplace floater
Hecklezz Feb 26, 2026
45e3204
Add 'copilot-swe-agent' to allowlist in CLA workflow (#5566)
brad-linden Mar 23, 2026
689123f
#5558 Adjust map request size dynamically
akleshchev Mar 20, 2026
0084a93
#5558 Don't spam server with requests we don't need
akleshchev Mar 20, 2026
b7fc5b2
Extend sendMapBlockRequest stub and add test<4> for request-size asse…
Copilot Mar 21, 2026
7f14a1b
Bring in an updated Dullan autobuild package containing an updated ve…
callumlinden Mar 26, 2026
5a7a527
#4298 Handle various out of memory cases
akleshchev Mar 27, 2026
83c3a3c
#5585 fix the issue with ptt state when joining p2p call while in voi…
maxim-productengine Mar 30, 2026
9846a1c
#3420 CreateLandmarkForPosition floater fails to save descriptions
akleshchev Mar 30, 2026
136eb7a
#5579 Separate parts of calculateUpdateRenderComplexity
akleshchev Mar 25, 2026
c7576cd
#5579 Implement partial complexity calculations
akleshchev Mar 25, 2026
e2d8ace
#5579 Cleanup
akleshchev Mar 26, 2026
a77156e
#5373 add leap api to open Build floater and change selected tool
maxim-productengine Mar 31, 2026
b4f1072
#5367 Leap API support for combo boxes
maxim-productengine Apr 1, 2026
de5ff4f
#5447 update Dialog buttons to correctly display emoji
maxim-productengine Apr 2, 2026
210a6a8
#5602 deleteProbe optimization pass
akleshchev Apr 1, 2026
5b485bd
#5612 Improve profiling coverage
akleshchev Apr 2, 2026
3078b20
#5612 Fix fast cache freezing main thread
akleshchev Apr 2, 2026
5cdd65e
#2892 Make thumbnail drop work the same way picker does
akleshchev Apr 3, 2026
321a6e9
#5612 Reduce delays on resource access for main thread
akleshchev Apr 4, 2026
61417e2
Allow mute list to fallback to cached copy when simulator response so…
DarlCat Apr 1, 2026
03c1354
Treat emptymutelist dispatch from the simulator as authoritative when…
DarlCat Apr 2, 2026
0abb59a
Rename LLMuteList state machine touch points for clarity
DarlCat Apr 2, 2026
840383d
Eliminate pointless mutelist cache fallback attempt, instead manually…
DarlCat Apr 2, 2026
9978c66
Improve documentation and logging of LLMuteList changes
DarlCat Apr 3, 2026
581cad9
Make LLBlockList more reactive to LLMuteList changes
DarlCat Apr 3, 2026
901ad61
Add noitems text to the block list UI, with translation friendly help…
DarlCat Apr 3, 2026
0a42b9f
Attempt one additional mute list request from simulator after region …
DarlCat Apr 4, 2026
66dc10f
Release/26.1.1 (#5530)
Geenz Apr 7, 2026
1d2cf48
Merge pull request #5623 from secondlife/geenz/main-develop
Geenz Apr 8, 2026
130c50c
#5611 Select a discrete gpu when possible
akleshchev Apr 7, 2026
5f91a3f
#5626 LLTextBase optimization
akleshchev Apr 8, 2026
b0f4a14
#2888 show underwater nametags when camera is above the water
maxim-productengine Apr 13, 2026
4926a06
#5639 Initialize LLJointData support category from avatar skeleton (#…
gaiaclary Apr 13, 2026
3ca4bf1
#5639 Fix glTF collision volume bind reconstruction
gaiaclary Apr 13, 2026
933f1e8
secondlife/viewer#5634: Apply version string from janus server if ava…
cosmic-linden Apr 14, 2026
ce24df4
Bump BugSplat-Git/symbol-upload
dependabot[bot] Apr 2, 2026
b0d27d2
#2410 Update notification text to include Combat 2.0 options
maxim-productengine Apr 14, 2026
77fb6b3
Bring in an updated Dullan autobuild package containing an (more) upd…
callumprentice Apr 14, 2026
69a75dd
Merge branch 'develop' into callum/cef-146
callumlinden Apr 14, 2026
e00a2ed
Merge pull request #5641 from secondlife/cosmic/janus-set-revision
cosmic-linden Apr 15, 2026
5a8557a
Update viewer copyright year in About licenses
mayconbekkers Apr 15, 2026
8a0ada7
#5647 fix for texture Mapping fields not being updated when selecting…
maxim-productengine Apr 16, 2026
9272e04
#5489 Follow up for appearance fixes
akleshchev Apr 16, 2026
3cb70cc
#5664 remove non-ASCII7 characters from comments
maxim-productengine Apr 17, 2026
f4be102
Fix experiences search and new classifieds content rating labels show…
Hecklezz Apr 17, 2026
14ca82d
Revert "#1625 Blinding white screen when changing environments"
akleshchev Apr 19, 2026
5e38c19
Update velopack with a public build
akleshchev Apr 20, 2026
e03869c
Remove Guidebook entry points
mayconbekkers Apr 14, 2026
f0b083c
LLMuteList::isLoadedFromServer should also include MLS_SERVER_CACHE
DarlCat Apr 20, 2026
4d40048
Cleanup for PR #5269
DarlCat Apr 20, 2026
638c7f7
#5629 Velopack allows uninstall while the viewer is running (#5662)
akleshchev Apr 21, 2026
0cef181
#1355 Permit smaller values in cloud scroll rate
akleshchev Apr 21, 2026
2ea8591
p#475 Excess texture fetch shutdown logging
akleshchev Apr 22, 2026
7117240
#2965 Indicate when role members aren't loaded
akleshchev Dec 6, 2024
67807bc
#5676 Expand PBR planar aligment to cover all channels
akleshchev Apr 22, 2026
f1e255f
Merge branch 'develop' into callum/cef-146
callumprentice Apr 23, 2026
db793c7
Bring in an updated Dullan autobuild package containing an (more) upd…
callumprentice Apr 24, 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
82 changes: 68 additions & 14 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ name: Build

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 @@ jobs:
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 @@ jobs:
# 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@v6
Expand Down Expand Up @@ -126,6 +150,17 @@ jobs:
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 @@ -265,7 +300,7 @@ jobs:

- name: Upload executable
if: steps.build.outputs.viewer_app
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: "${{ steps.build.outputs.artifact }}-app"
path: |
Expand All @@ -275,21 +310,21 @@ jobs:
# artifact for that too.
- name: Upload symbol file
if: steps.build.outputs.symbolfile
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: "${{ steps.build.outputs.artifact }}-symbols"
path: ${{ steps.build.outputs.symbolfile }}

- name: Upload metadata
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: "${{ steps.build.outputs.artifact }}-metadata"
# emitted by build.sh, possibly multiple lines
path: |
${{ steps.build.outputs.metadata }}

- name: Upload physics package
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
# should only be set for viewer-private
if: matrix.configuration == 'Release' && steps.build.outputs.physicstpv
with:
Expand All @@ -310,13 +345,21 @@ jobs:
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@v2.1.0
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 @@ jobs:

- 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@v2.1.0
with:
channel: ${{ needs.build.outputs.viewer_channel }}
imagename: ${{ needs.build.outputs.imagename }}
Expand All @@ -359,6 +402,11 @@ jobs:
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 All @@ -370,13 +418,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Download viewer exe
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: Windows-app
path: _artifacts
- name: Download Windows Symbols
if: env.BUGSPLAT_DATABASE && env.SYMBOL_UPLOAD_CLIENT_ID
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: Windows-symbols
- name: Extract viewer pdb
Expand All @@ -386,7 +434,7 @@ jobs:
tar -xJf "${{ needs.build.outputs.viewer_channel }}.sym.tar.xz" -C _artifacts
- name: Post Windows symbols
if: env.BUGSPLAT_DATABASE && env.SYMBOL_UPLOAD_CLIENT_ID
uses: BugSplat-Git/symbol-upload@095d163ae9ceb006d286a731dcd35cf6a1b458c8
uses: BugSplat-Git/symbol-upload@2a0d2b8cf9c54c494144048f25da863d93a02ccd
with:
clientId: "${{ env.SYMBOL_UPLOAD_CLIENT_ID }}"
clientSecret: "${{ env.SYMBOL_UPLOAD_CLIENT_SECRET }}"
Expand All @@ -409,12 +457,12 @@ jobs:
steps:
- name: Download Mac Symbols
if: env.BUGSPLAT_DATABASE && env.SYMBOL_UPLOAD_CLIENT_ID
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: macOS-symbols
- name: Post Mac symbols
if: env.BUGSPLAT_DATABASE && env.SYMBOL_UPLOAD_CLIENT_ID
uses: BugSplat-Git/symbol-upload@095d163ae9ceb006d286a731dcd35cf6a1b458c8
uses: BugSplat-Git/symbol-upload@2a0d2b8cf9c54c494144048f25da863d93a02ccd
with:
clientId: "${{ env.SYMBOL_UPLOAD_CLIENT_ID }}"
clientSecret: "${{ env.SYMBOL_UPLOAD_CLIENT_SECRET }}"
Expand All @@ -431,14 +479,18 @@ jobs:
runs-on: ubuntu-latest
if: needs.setup.outputs.release_run
steps:
- uses: actions/download-artifact@v7
- uses: actions/download-artifact@v8
with:
pattern: "*-installer"

- uses: actions/download-artifact@v7
- uses: actions/download-artifact@v8
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 @@ jobs:
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
2 changes: 1 addition & 1 deletion .github/workflows/cla.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ jobs:
path-to-signatures: signatures.json
remote-organization-name: secondlife
remote-repository-name: cla-signatures
allowlist: callum@mbp.localdomain,rye@lindenlab.com,rye,signal@lindenlab.com,dependabot*,bot*
allowlist: callum@mbp.localdomain,rye@lindenlab.com,rye,signal@lindenlab.com,dependabot*,bot*,copilot-swe-agent*
36 changes: 28 additions & 8 deletions .github/workflows/tag-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ on:
project:
description: "Project Name (used for channel name in project builds, and tag name for all builds)"
default: "hippo"
# TODO - add an input for selecting another sha to build other than head of branch
tag_override:
description: "Override the tag name (optional). If the tag already exists, a numeric suffix is appended."
required: false

jobs:
tag-release:
Expand All @@ -34,7 +36,7 @@ jobs:
NIGHTLY_DATE=$(date --rfc-3339=date)
echo NIGHTLY_DATE=${NIGHTLY_DATE} >> ${GITHUB_ENV}
echo TAG_ID="$(echo ${{ github.sha }} | cut -c1-8)-${{ inputs.project || '${NIGHTLY_DATE}' }}" >> ${GITHUB_ENV}
- name: Update Tag
- name: Create Tag
uses: actions/github-script@v8
with:
# use a real access token instead of GITHUB_TOKEN default.
Expand All @@ -44,9 +46,27 @@ jobs:
# this token will need to be renewed anually in January
github-token: ${{ secrets.LL_TAG_RELEASE_TOKEN }}
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "refs/tags/${{ env.VIEWER_CHANNEL }}#${{ env.TAG_ID }}",
sha: context.sha
})
const override = `${{ inputs.tag_override }}`.trim();
const baseTag = override || `${{ env.VIEWER_CHANNEL }}#${{ env.TAG_ID }}`;
// Try the base tag first, then append -2, -3, etc. if it already exists
let tag = baseTag;
for (let attempt = 1; ; attempt++) {
try {
await github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `refs/tags/${tag}`,
sha: context.sha
});
core.info(`Created tag: ${tag}`);
break;
} catch (e) {
if (e.status === 422 && attempt < 10) {
core.info(`Tag '${tag}' already exists, trying next suffix...`);
tag = `${baseTag}-${attempt + 1}`;
} else {
throw e;
}
}
}
Loading
Loading