-
Notifications
You must be signed in to change notification settings - Fork 65
Release/2025.04 #3861
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Release/2025.04 #3861
Changes from 156 commits
Commits
Show all changes
172 commits
Select commit
Hold shift + click to select a range
99a9258
Issue #2687: Honor flag sent by server indicating server side autopil…
Rider-Linden 81df047
Private Issue #297: Accept new flags in ScriptTeleportRequest message…
Rider-Linden 3dc945c
Private Issue #297: Code review feedback.
Rider-Linden 7cd50ce
Issue #2907: Process metadata sent along with chats of type IM_NOTHIN…
Rider-Linden a097f88
Issue #2907: Code review comments.
Rider-Linden 48ccb0f
Issue #2907: When passing the injected notification message into addM…
Rider-Linden 09af45d
Server Issue #1493: New notification message for llTransferOwnership.
Rider-Linden ea79f8f
Merge pull request #3624 from secondlife/rider/map_beacon
Geenz 8c671a0
Merge pull request #3623 from secondlife/rider/server_autopilot
Geenz 5aa359e
Merge pull request #3626 from secondlife/rider/transfer_message
Geenz 5d78ff4
Merge pull request #3634 from secondlife/release/2024.12-ForeverFPS
Geenz 37b2606
Merge pull request #3686 from secondlife/main
Geenz 942527d
**fix: Correctly update shadows on RenderShadowResolutionScale change**
williamweaver 76db64e
Fixes: Add guard to prevent shadow texture resize with invalid mRT di…
williamweaver 1a92e39
message_template.msg to agree with master-message-template
AndrewMeadows f462037
Merge pull request #3760 from secondlife/leviathan/update-message-tem…
Geenz 969ed53
Merge branch 'release/2025.03' into release/2025.04
akleshchev 53c3176
#3661 Clamp water blur multiplier
akleshchev ed6f939
#3771 Fix unresolved HOSTIP parameter
akleshchev 28638b3
#3762 Remove incorrect resolution specification
akleshchev 5608c39
viewer#2270 The "More" button does not close the "Choose emoji" floater
akleshchev bf0767b
viewer#2894 Make PBR scale like Blinn Phong does
akleshchev 423df2b
prevent erroneous edit of wrong parcel (#3759)
AndrewMeadows ecfe76a
vp#404 Improve URL filter
akleshchev b86c36e
Merge remote-tracking branch 'remotes/origin/develop' into rider/bot_…
Rider-Linden e452084
Merge pull request #3625 from secondlife/rider/bot_tattle
Rider-Linden 1e2d4d3
Added QA workflow file
AtlasLinden 7d58d46
Merge pull request #3818 from secondlife/atlas-qaworkflow
Geenz 51f5b85
Removed unnecessary comments in QA workflow file
AtlasLinden 571e33c
Merge pull request #3821 from secondlife/atlas-qaworkflow
AtlasLinden e185772
Merge branch 'secondlife:develop' into fix/shadow-resolution-update
williamweaver 0a39fe8
Allow QA workflow to run on Second_Life_X branches
AtlasLinden e1ebb33
fix(pipeline): Remove incorrect zeroing of mRT dimensions in createGL…
williamweaver c555d23
Merge pull request #3832 from secondlife/atlas-qaworkflow
AtlasLinden b1822e3
#3784 Increase texture scale boundaries
akleshchev b9015dc
Merge branch 'develop' into fix/shadow-resolution-update
Geenz 6110028
Merge pull request #3719 from williamweaver/fix/shadow-resolution-update
Geenz 8d5dab9
#3809 Fix J2C Upload
akleshchev fcc8ffd
#3809 Partial revert of "Fix J2C Upload"
akleshchev 515c1f1
#3044 Add option to hide L$ balance for Snapshots with Interface showing
maxim-productengine c609a45
secondlife/viewer#912 BugSplat Crash 1412267 (missed refactoring for …
LLGuru 497c309
#912 Refactor FindModel()
marchcat 945b965
Add file pattern and recursive directory processing fix_xml_indentati…
marchcat ccdcbfe
Merge branch 'release/2025.03' into release/2025.04
Geenz 3c9bb9b
Merge branch 'release/2025.04' of https://github.com/secondlife/viewe…
Geenz 3a03c5f
#3846 Crash at updateGLTFMaterials
akleshchev 8c20662
#3712 CMakeFindFrameworks deprecation
akleshchev 939817d
#3849 Crash at LLSelectMgr::updatePointAt
akleshchev 04af042
Fix(EnvAdjust): Ensure cloud texture selection updates the sky
williamweaver 61ba4b0
Fix(XUI): Remove unrecognized user_resize attribute from sun_moon_tra…
williamweaver be595b4
Fix(XUI): Resolve parsing warnings for Fixed Environment editor widgets
williamweaver f0ad01c
Merge branch 'fix/xui-parsing-fixes' of https://github.com/williamwea…
williamweaver d77954e
#3597 Improve error handling at LLGLSLShader::disableTexture()
marchcat db2c45b
#3857 pick new and updated LEAP functions from develop branch
maxim-productengine 2bb4de9
Fix normal and specular repeats per meter scaling
Hecklezz 498b244
# 3826 Physics Material Type does not update for linked objects
akleshchev 46fca6f
#3857 second batch of new or updated LEAP functions
maxim-productengine dead3c1
#3857 teleport finished/failed event
maxim-productengine 6ebd8a9
Merge pull request #3866 from secondlife/maxim/2025.04-3857
maxim-productengine 01dc5ae
Merge pull request #3869 from secondlife/main
Geenz 7c35a02
Merge branch 'secondlife:develop' into fix/cloud-texture-loading
williamweaver f2e7e30
#3868 Crash in updateHoveredState
akleshchev f795ad6
#3870 Crash at LLVOAvatarSelf::getJoint()
akleshchev 68f20d5
#2702 Increase hover height's limit
akleshchev 1fcabcd
Fix(EnvAdjust): Properly update sky after cloud texture selection
williamweaver be2e7e9
Merge pull request #3854 from williamweaver/fix/xui-parsing-fixes
Geenz 2b475ad
#3878 Crash at LLPipeline::unlinkDrawable
akleshchev 9aea5bb
#3876 sendLogoutRequest logging
akleshchev 2da46c3
#3575 Clean up obsolete VRAM detectin logic
akleshchev 0c056c7
#3575 Adjust VRAM budget test a bit
akleshchev cc54e20
#3575 Shrink draw distance when VRAM is very low
akleshchev f6a2dbe
#3627 std::bad_alloc when loading a model
akleshchev cfbcdd7
Fix: Remove potentially redundant RenderAutoHideSurfaceAreaLimit sett…
williamweaver a7f3785
#3873 Return back AudioLevelWind
akleshchev 42dc450
Merge pull request #3853 from williamweaver/fix/cloud-texture-loading
Geenz c07817c
Fix(Tonemap): Correct blend logic to preserve HDR detail
williamweaver b95b20a
#3757 Allow subfolders in "My Outfits"
akleshchev 1bb8fb2
#3757 Menu for subfodlers in outfits
akleshchev 1c90421
#3596 Faster mesh thread shutdown
akleshchev 2371994
#3757 Menu for subfodlers in outfits p2
akleshchev 7dce74f
#3757 Move for subfodlers
akleshchev e43baa7
#1754 Restore land owners overlay
akleshchev d19d44c
Merge pull request #3911 from secondlife/main
Geenz 822cc2a
Merge pull request #3896 from williamweaver/fix/tonemap-hdr-blend
Geenz 293462d
Merge pull request #3883 from williamweaver/fix/remove-duplicate-rend…
Geenz 7d36e71
#3757 Disable ability to create folders in individual outfits
akleshchev 206f8d9
#3863 Ensure cloud texture selection updates the sky
akleshchev a99c1e3
#3887 Fix clouds not updating
akleshchev 67921fa
#3922 out_of_range crash in preeditor
akleshchev 2e4d2dd
#3627 Crash on texture cache init
akleshchev d65de99
Use standard library functions for llisnan and replace obvious NaN ch…
Ansariel 441c844
Fix lerp issues on newer GCC versions
Ansariel 4c6afbb
Restore llmath improvements from archived develop branch:
Ansariel c7ebde4
Merge pull request #3927 from Ansariel/develop-math-improvements
marchcat 922cc94
Remove obsolete cmake_minimum_required that is lower than the require…
Ansariel a7e84c9
Restore currently entered text in chat entry textbox after going thro…
Ansariel 698a301
Remove orphaned LLPanelOutfitSnapshotInventory
Ansariel 0c380eb
Fix upload cost calculation for snapshots to inventory based on encod…
Ansariel 85cf1d7
Remove incorrectly calculated upload fee from snapshot options button…
Ansariel 67d1838
Force snapshot update when opening a snapshot panel and the resolutio…
Ansariel 9c3ce3d
Clean up LLUI and fix/add suggestions from VS (#2746)
Ansariel c73fbed
Merge pull request #3929 from Ansariel/develop-cmake-deprecation-warning
Geenz 2fb0abb
Merge pull request #3930 from Ansariel/develop-chatentry-improvement
Geenz 37bbc6f
Merge pull request #3932 from Ansariel/develop-snapshot-fixes
Geenz c0ecfce
Merge pull request #3933 from Ansariel/develop-llui-improvements
Geenz f029903
Fix '1:angle_between' test failure
marchcat 8c5d144
Fix llhttpdate test on windows and macos (#3909)
marchcat f6219fe
#3696 Crash at LLFontFreetype::addGlyphFromFont
akleshchev 3d5f154
Fix llhttpdate test on windows and macos (#3909)
marchcat 90c7684
#3758 add support for highlighted segments
maxim-productengine 3e46d70
#3758 initial chat mention support
maxim-productengine 4cccf8a
Restore missing 'override'
marchcat 9a333e6
Merge develop into release/2025.04
akleshchev 44bbdc5
#3488 Reduce locking
akleshchev 87b6428
#3870 Added joint initialization for LLVOAvatarSelf
akleshchev b30283e
#3960 Fix expensive mesh thread score calculations
akleshchev 6239647
#3962 allow Tab work the same way as picking name with Enter
maxim-productengine da2234a
#3952 insert @ name at the cursor position
maxim-productengine 205b228
#3920 LLPanel::getString crash
akleshchev b1b0cdb
#3784 Increase gltf scale boundaries
akleshchev 17561e2
#3758 show mention name in bubble chat
maxim-productengine 89f8171
#3975 Crash at LLSpatialGroup::dirtyGeom
akleshchev d9468ec
#3758 disable editing of mention segment
maxim-productengine a7759f3
Merge branch 'release/2025.04' into 2025.04-chat-mention
maxim-productengine f450b42
post merge fix
maxim-productengine 1eb34b4
#3758 clean up: move EUnderlineLink
maxim-productengine fb4925d
Increment viewer version after 2025.03
brad-linden 25c11f0
Merge pull request #3981 from secondlife/brad/version-increments
brad-linden 17e9746
Merge pull request #3943 from secondlife/maxim/2025.04-chat-mention
maxim-productengine 8665cd3
#3986 Packet ring crash in memcpy
akleshchev 69a81d6
#3982 Crash at getChild<LLScrollListCtrl>
akleshchev 04c0bc1
#3978 Fix offset in Land Owner highlights
akleshchev 1f3ba13
Attempt to fix qatest.yaml CodeQL issues (#3987)
brad-linden 7bd18e2
viewerp#300 Fix inconsistency with copying textures vs pbr
akleshchev fdda524
#3791 check against alpha blending as a part of determining exclude w…
maxim-productengine d9e55c4
#3997 Crash in a gltf asset enabled region
akleshchev 98078b9
#3748 Don't allow dropping material onto water exclusion surface
maxim-productengine a0cbf22
#4001 Bump cache version
akleshchev 9ce012a
#4015 Restore formatting for strings.xml and teleport_strings.xml tra…
marchcat 929c9b2
#4009 Add color settings for chat mentions to Preferences
maxim-productengine fe0a4f4
#4027 Crash at adjustTexturesByScale
akleshchev 9180a11
#4028 Crash at onEmojiPickerClosed
maxim-productengine b084d84
#4008 Fix media scale adjustments with pbr applied
akleshchev ed70509
Make builds support Python 3.13
akleshchev 50108bf
#4011 Add conversation list highlight for chat mention
maxim-productengine 3713472
#3757 Smarter subfolders dragndrop
akleshchev 377d1b3
#4010 Add audio ping for chat mentions
maxim-productengine 9668d2f
#3758 do not reopen avatar picker floater
maxim-productengine edb0032
#3542 Microphone doesn't switch after plugging in an audio device
akleshchev 872fd15
#4056 Crash at childGetSelectionInterface
akleshchev fb34971
Revert "#4008 Fix media scale adjustments with pbr applied"
akleshchev 733d65d
#4010 play only audio mention ping for new conversation
maxim-productengine e466414
#4055 Fix subfolder dragging
akleshchev 6225eb8
#4060 Fix subfolders use through ctrl-v
akleshchev 6b0cebe
#2279 fix for View Angle setting
maxim-productengine c94e00a
#4069 Fix crash at handleToolTip
akleshchev 32cd3a6
#4071 Permit pasting links into outfits
akleshchev 888d4ae
#4072 Fix Appearance floater not updating
akleshchev 0555755
#4081 Meshes missing after teleport
akleshchev b5db42e
#4088 Fix Outfit folders changing to normal folders
akleshchev d5313e7
#4091 fix speaker icon is showing all users speaking when anyone is t…
maxim-productengine b2b021f
adjust which webrtc tracks are enabled when the avatar crosses a regi…
sethalves 28edf9e
reuse region variable instead of multiple calls to gAgent.getRegion()
sethalves 5ee83e7
Update macos icons (#4042, #4112)
marchcat 0296bd6
#p430 don't show MFA dialog twice
maxim-productengine 3fa7674
fix test for lllogininstance.cpp
maxim-productengine a31b7ae
Merge pull request #4126 from secondlife/maxim/2025.04-p430
maxim-productengine 25e6834
Fix null outfit gallery observer pointer
Geenz 5047a0b
Merge pull request #4100 from secondlife/viewer-1865-for-2025.04
sethalvesLL b62e7f9
Remove mOutfitsObserver, use mCategoriesObserver from our base.
Geenz 5b12428
#4132 fix name mentions sometimes not being highlighted
maxim-productengine fe55c78
Merge pull request #4135 from secondlife/geenz/mac-outfit-gallery-cra…
Geenz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
qatest.yaml -text eol=crlf |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
name: Run QA Test # Runs automated tests on a self-hosted QA machine | ||
permissions: | ||
contents: read | ||
#pull-requests: write # maybe need to re-add this later | ||
|
||
on: | ||
workflow_run: | ||
workflows: ["Build"] | ||
types: | ||
- completed | ||
|
||
concurrency: | ||
group: qa-test-run | ||
cancel-in-progress: true # Cancels any queued job when a new one starts | ||
|
||
jobs: | ||
debug-workflow: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Debug Workflow Variables | ||
env: | ||
HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }} | ||
HEAD_COMMIT_MSG: ${{ github.event.workflow_run.head_commit.message }} | ||
run: | | ||
echo "Workflow Conclusion: ${{ github.event.workflow_run.conclusion }}" | ||
echo "Workflow Head Branch: $HEAD_BRANCH" | ||
echo "Workflow Run ID: ${{ github.event.workflow_run.id }}" | ||
echo "Head Commit Message: $HEAD_COMMIT_MSG" | ||
echo "GitHub Ref: ${{ github.ref }}" | ||
echo "GitHub Ref Name: ${{ github.ref_name }}" | ||
echo "GitHub Event Name: ${{ github.event_name }}" | ||
echo "GitHub Workflow Name: ${{ github.workflow }}" | ||
|
||
install-viewer-and-run-tests: | ||
runs-on: [self-hosted, qa-machine] | ||
# Run test only on successful builds of Second_Life_X branches | ||
if: > | ||
github.event.workflow_run.conclusion == 'success' && | ||
( | ||
startsWith(github.event.workflow_run.head_branch, 'Second_Life') | ||
) | ||
|
||
steps: | ||
- name: Temporarily Allow PowerShell Scripts (Process Scope) | ||
run: | | ||
Set-ExecutionPolicy RemoteSigned -Scope Process -Force | ||
|
||
- name: Verify viewer-sikulix-main Exists | ||
run: | | ||
if (-Not (Test-Path -Path 'C:\viewer-sikulix-main')) { | ||
Write-Host '❌ Error: viewer-sikulix not found on runner!' | ||
exit 1 | ||
} | ||
Write-Host '✅ viewer-sikulix is already available.' | ||
|
||
- name: Fetch & Download Windows Installer Artifact | ||
shell: pwsh | ||
run: | | ||
$BUILD_ID = "${{ github.event.workflow_run.id }}" | ||
$ARTIFACTS_URL = "https://api.github.com/repos/secondlife/viewer/actions/runs/$BUILD_ID/artifacts" | ||
|
||
# Fetch the correct artifact URL | ||
$response = Invoke-RestMethod -Headers @{Authorization="token ${{ secrets.GITHUB_TOKEN }}" } -Uri $ARTIFACTS_URL | ||
$ARTIFACT_NAME = ($response.artifacts | Where-Object { $_.name -eq "Windows-installer" }).archive_download_url | ||
|
||
if (-Not $ARTIFACT_NAME) { | ||
Write-Host "❌ Error: Windows-installer artifact not found!" | ||
exit 1 | ||
} | ||
|
||
Write-Host "✅ Artifact found: $ARTIFACT_NAME" | ||
|
||
# Secure download path | ||
$DownloadPath = "$env:TEMP\secondlife-build-$BUILD_ID" | ||
New-Item -ItemType Directory -Path $DownloadPath -Force | Out-Null | ||
$InstallerPath = "$DownloadPath\installer.zip" | ||
|
||
# Download the ZIP | ||
Invoke-WebRequest -Uri $ARTIFACT_NAME -Headers @{Authorization="token ${{ secrets.GITHUB_TOKEN }}"} -OutFile $InstallerPath | ||
|
||
# Ensure download succeeded | ||
if (-Not (Test-Path $InstallerPath)) { | ||
Write-Host "❌ Error: Failed to download Windows-installer.zip" | ||
exit 1 | ||
} | ||
|
||
- name: Extract Installer & Locate Executable | ||
shell: pwsh | ||
run: | | ||
# Explicitly set BUILD_ID again (since it does not appear to persist across steps) | ||
$BUILD_ID = "${{ github.event.workflow_run.id }}" | ||
$ExtractPath = "$env:TEMP\secondlife-build-$BUILD_ID" | ||
$InstallerZip = "$ExtractPath\installer.zip" | ||
|
||
# Print paths for debugging | ||
Write-Host "Extract Path: $ExtractPath" | ||
Write-Host "Installer ZIP Path: $InstallerZip" | ||
|
||
# Verify ZIP exists before extracting | ||
if (-Not (Test-Path $InstallerZip)) { | ||
Write-Host "❌ Error: ZIP file not found at $InstallerZip!" | ||
exit 1 | ||
} | ||
|
||
Write-Host "✅ ZIP file exists and is valid. Extracting..." | ||
|
||
Expand-Archive -Path $InstallerZip -DestinationPath $ExtractPath -Force | ||
|
||
# Find installer executable | ||
$INSTALLER_PATH = (Get-ChildItem -Path $ExtractPath -Filter '*.exe' -Recurse | Select-Object -First 1).FullName | ||
|
||
if (-Not $INSTALLER_PATH -or $INSTALLER_PATH -eq "") { | ||
Write-Host "❌ Error: No installer executable found in the extracted files!" | ||
Write-Host "📂 Extracted Files:" | ||
Get-ChildItem -Path $ExtractPath -Recurse | Format-Table -AutoSize | ||
exit 1 | ||
} | ||
|
||
Write-Host "✅ Installer found: $INSTALLER_PATH" | ||
echo "INSTALLER_PATH=$INSTALLER_PATH" | Out-File -FilePath $env:GITHUB_ENV -Append | ||
|
||
- name: Install Second Life Using Task Scheduler (Bypass UAC) | ||
shell: pwsh | ||
run: | | ||
$action = New-ScheduledTaskAction -Execute "${{ env.INSTALLER_PATH }}" -Argument "/S" | ||
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest | ||
$task = New-ScheduledTask -Action $action -Principal $principal | ||
Register-ScheduledTask -TaskName "SilentSLInstaller" -InputObject $task -Force | ||
Start-ScheduledTask -TaskName "SilentSLInstaller" | ||
|
||
- name: Wait for Installation to Complete | ||
shell: pwsh | ||
run: | | ||
Write-Host "Waiting for the Second Life installer to finish..." | ||
do { | ||
Start-Sleep -Seconds 5 | ||
$installerProcess = Get-Process | Where-Object { $_.Path -eq "${{ env.INSTALLER_PATH }}" } | ||
} while ($installerProcess) | ||
|
||
Write-Host "✅ Installation completed!" | ||
|
||
- name: Cleanup Task Scheduler Entry | ||
shell: pwsh | ||
run: | | ||
Unregister-ScheduledTask -TaskName "SilentSLInstaller" -Confirm:$false | ||
Write-Host "✅ Task Scheduler entry removed." | ||
|
||
- name: Delete Installer ZIP | ||
shell: pwsh | ||
run: | | ||
# Explicitly set BUILD_ID again | ||
$BUILD_ID = "${{ github.event.workflow_run.id }}" | ||
$DeletePath = "$env:TEMP\secondlife-build-$BUILD_ID\installer.zip" | ||
|
||
Write-Host "Checking if installer ZIP exists: $DeletePath" | ||
|
||
# Ensure the ZIP file exists before trying to delete it | ||
if (Test-Path $DeletePath) { | ||
Remove-Item -Path $DeletePath -Force | ||
Write-Host "✅ Successfully deleted: $DeletePath" | ||
} else { | ||
Write-Host "⚠️ Warning: ZIP file does not exist, skipping deletion." | ||
} | ||
|
||
- name: Run QA Test Script | ||
run: | | ||
Write-Host "Running QA Test script..." | ||
python C:\viewer-sikulix-main\runTests.py | ||
|
||
# - name: Upload Test Results | ||
# uses: actions/upload-artifact@v3 | ||
# with: | ||
# name: test-results | ||
# path: C:\viewer-sikulix-main\regressionTest\test_results.html | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.