diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml
index 45d6a297e7..fec716a74d 100644
--- a/.github/workflows/build_viewer.yml
+++ b/.github/workflows/build_viewer.yml
@@ -6,6 +6,10 @@ on:
description: 'Include tracy profiling builds'
required: false
default: 'false'
+ override_signing:
+ description: 'Manual builds are not signned by default. Force code signing for this run.'
+ required: false
+ default: 'false'
push:
branches:
- "Firestorm*.*.*"
@@ -141,7 +145,18 @@ jobs:
echo "Building for channel ${FS_RELEASE_CHAN}"
viewer_channel=${FS_RELEASE_CHAN}
shell: bash
-
+ - name: Check if release type is signable
+ if: runner.os == 'Windows'
+ run: |
+ if [[ "${FS_RELEASE_TYPE}" == "Release" || "${FS_RELEASE_TYPE}" == "Beta" ]]; then
+ CODESIGNING_ENABLED=true
+ else
+ CODESIGNING_ENABLED=false
+ fi
+ echo "CODESIGNING_ENABLED=${CODESIGNING_ENABLED}" >> $GITHUB_ENV
+ echo "Codesigning enabled: ${CODESIGNING_ENABLED}"
+ shell: bash
+
- name: Get the code
uses: actions/checkout@v4
with:
@@ -261,7 +276,7 @@ jobs:
done
shell: bash
- - name: Set expiration days based on FS_RELEASE_TYPE
+ - name: Set expiration days and codesigning based on FS_RELEASE_TYPE
run: |
case "${{ env.FS_RELEASE_TYPE }}" in
"Nightly" | "Manual" | "Profiling")
@@ -302,6 +317,78 @@ jobs:
autobuild configure -c ReleaseFS -A${addrsize} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
echo "BUGSPLAT_DB=$BUGSPLAT_DB" >> $GITHUB_ENV
shell: bash
+ - name: Generate metadata.json
+ if: runner.os == 'Windows'
+ run: |
+ echo '{
+ "Endpoint": "${{ secrets.AZURE_ENDPOINT }}",
+ "CodeSigningAccountName": "${{ secrets.AZURE_CODE_SIGNING_NAME }}",
+ "CertificateProfileName": "${{ secrets.AZURE_CERT_PROFILE_NAME }}",
+ "ExcludeCredentials": [
+ "ManagedIdentityCredential"
+ ]
+ }' > ${{github.workspace}}/metadata.json
+ echo "CODESIGNING_METADATA_PATH=${{github.workspace}}/metadata.json" >> $env:GITHUB_ENV
+ shell: pwsh
+ - name: Validate Windows 10 SDK version and find signtool.exe IFF codesigning is enabled for these builds or overridden
+ if: ${{ runner.os == 'Windows' && (env.CODESIGNING_ENABLED == 'true' || github.event.inputs.override_signing == 'true') }}
+ id: validate-sdk
+ run: |
+ try {
+ $Arch = ($env:RUNNER_ARCH).ToLower()
+ $SearchBase = "${env:ProgramFiles(x86)}\Windows Kits\10\bin"
+
+ "Searching `"$SearchBase`" for signtool ($Arch)..."
+ $Tool = Get-ChildItem $SearchBase -Recurse -Force -ErrorAction SilentlyContinue |
+ Where-Object {$_.Name -eq 'signtool.exe' -and $_.Directory -like "*\$Arch"} |
+ Sort-Object -Descending |
+ Select-Object -First 1
+
+ if (!($Tool)) {throw [System.IO.FileNotFoundException]::new('File not found.', 'signtool.exe')}
+
+ 'Adding signtool to PATH'
+ $Tool.Directory.FullName | Out-File $env:GITHUB_PATH -Append
+ "signtool-$Arch=$($Tool.FullName)" | Out-File $env:GITHUB_OUTPUT -Append
+ $env:PATH = "$($Tool.Directory.FullName);$env:PATH"
+
+ signtool.exe /h
+ } catch {
+ Write-Output "::error::$($_.Exception)"
+ Write-Output '::endgroup::'
+
+ exit 1
+ }
+ echo "SIGNTOOL_PATH=signtool.exe" >> $env:GITHUB_ENV
+ shell: pwsh
+ - name: Install nuget.exe
+ if: runner.os == 'Windows'
+ run: |
+ Invoke-WebRequest -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile nuget.exe
+ shell: pwsh
+
+ - name: Install Microsoft.Trusted.Signing.Client
+ if: runner.os == 'Windows'
+ run: |
+ .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -OutputDirectory .
+ shell: pwsh
+
+ - name: Locate Azure.CodeSigning.Dlib.dll
+ if: runner.os == 'Windows'
+ run: |
+ $dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.53\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
+ if (-not $dllPath) {
+ Write-Error "Azure.CodeSigning.Dlib.dll not found."
+ exit 1
+ }
+ echo "CODESIGNING_DLIB_PATH=$dllPath" >> $env:GITHUB_ENV
+ shell: pwsh
+ - name: Prep env for Trusted code on Windows only
+ if: runner.os == 'Windows'
+ run: |
+ echo "AZURE_CLIENT_ID=${{ secrets.AZURE_CLIENT_ID }}" >> $GITHUB_ENV
+ echo "AZURE_CLIENT_SECRET=${{ secrets.AZURE_CLIENT_SECRET }}" >> $GITHUB_ENV
+ echo "AZURE_TENANT_ID=${{ secrets.AZURE_TENANT_ID }}" >> $GITHUB_ENV
+ shell: bash
- name: build
id: build
run: autobuild build -c ReleaseFS -A${addrsize} --no-configure
diff --git a/.github/workflows/sign.yml b/.github/workflows/sign.yml
index 6cdc719a7b..6d98335165 100644
--- a/.github/workflows/sign.yml
+++ b/.github/workflows/sign.yml
@@ -6,14 +6,14 @@ on:
build_run_number:
description: 'GitHub Run Number (per build_viewer.yml workflow)'
required: true
- policy:
- description: 'Policy to sign binaries'
- required: true
- type: choice
- default: "Test"
- options:
- - "Test"
- - "Release"
+ # policy:
+ # description: 'Policy to sign binaries'
+ # required: true
+ # type: choice
+ # default: "Test"
+ # options:
+ # - "Test"
+ # - "Release"
# viewer_version:
# description: 'viewer version not including build'
# required: true
@@ -33,7 +33,7 @@ on:
jobs:
find-setup-files:
- runs-on: ubuntu-latest
+ runs-on: windows-latest
permissions:
actions: read
contents: read
@@ -69,7 +69,7 @@ jobs:
sign-and-upload:
name: Sign and Upload each Setup.exe
needs: find-setup-files
- runs-on: ubuntu-latest
+ runs-on: windows-latest
strategy:
matrix:
file: ${{ fromJson( needs.find-setup-files.outputs.setup_files) }}
@@ -83,6 +83,7 @@ jobs:
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts
+ shell: bash
- name: Download Setup.exe Files Artifact
uses: actions/download-artifact@v4
@@ -93,28 +94,49 @@ jobs:
run: |
mkdir -p to_sign
cp "setup_exe_files/${{ matrix.file }}" to_sign/
- - name: Upload unsigned artifact
+ shell: bash
+ # - name: Upload unsigned artifact
+ # id: upload-unsigned-artifact
+ # uses: actions/upload-artifact@v4
+ # with:
+ # name: unsigned-artifact-${{ matrix.file }}
+ # path: to_sign/${{ matrix.file }}
+
+ # - name: sign the file
+ # uses: signpath/github-action-submit-signing-request@v1
+ # env:
+ # SIGNPATH_SIGNING_POLICY_SLUG: ${{ github.event.inputs.policy == 'Test' && vars.SIGNPATH_SIGNING_POLICY_SLUG_TEST || vars.SIGNPATH_SIGNING_POLICY_SLUG_RELEASE }}
+ # with:
+ # api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
+ # organization-id: '${{ vars.SIGNPATH_ORGANIZATION_ID }}'
+ # project-slug: '${{ vars.SIGNPATH_PROJECT_SLUG }}'
+ # signing-policy-slug: '${{ env.SIGNPATH_SIGNING_POLICY_SLUG }}'
+ # github-artifact-id: "${{steps.upload-unsigned-artifact.outputs.artifact-id}}"
+ # wait-for-completion: true
+ # output-artifact-directory: 'application-signed'
+ - name: Azure Trusted Signing
+ uses: azure/trusted-signing-action@v0.5.1
+ with:
+ azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+ azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
+ azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
+ endpoint: ${{ secrets.AZURE_ENDPOINT }}
+ trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
+ certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
+
+ # Sign all exes inside the folder
+ files-folder: ${{ github.workspace }}\to_sign
+ files-folder-filter: exe
+
+ # - name: Upload signed artifact
+ # uses: actions/upload-artifact@v4
+ # with:
+ # name: signed-artifact-${{ matrix.file }}
+ # path: ./application-signed
+ # - name: Upload unsigned artifact
+ - name: Upload signed artifact
id: upload-unsigned-artifact
uses: actions/upload-artifact@v4
with:
name: unsigned-artifact-${{ matrix.file }}
- path: to_sign/${{ matrix.file }}
-
- - name: sign the file
- uses: signpath/github-action-submit-signing-request@v1
- env:
- SIGNPATH_SIGNING_POLICY_SLUG: ${{ github.event.inputs.policy == 'Test' && vars.SIGNPATH_SIGNING_POLICY_SLUG_TEST || vars.SIGNPATH_SIGNING_POLICY_SLUG_RELEASE }}
- with:
- api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
- organization-id: '${{ vars.SIGNPATH_ORGANIZATION_ID }}'
- project-slug: '${{ vars.SIGNPATH_PROJECT_SLUG }}'
- signing-policy-slug: '${{ env.SIGNPATH_SIGNING_POLICY_SLUG }}'
- github-artifact-id: "${{steps.upload-unsigned-artifact.outputs.artifact-id}}"
- wait-for-completion: true
- output-artifact-directory: 'application-signed'
-
- - name: Upload signed artifact
- uses: actions/upload-artifact@v4
- with:
- name: signed-artifact-${{ matrix.file }}
- path: ./application-signed
\ No newline at end of file
+ path: to_sign\${{ matrix.file }}
diff --git a/FIRESTORM-SOURCE_LICENSE_HEADER.txt b/FIRESTORM-SOURCE_LICENSE_HEADER.txt
index 44f7834caf..f3c2eb557d 100644
--- a/FIRESTORM-SOURCE_LICENSE_HEADER.txt
+++ b/FIRESTORM-SOURCE_LICENSE_HEADER.txt
@@ -2,9 +2,9 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
+ * $LicenseInfo:firstyear=2025&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
+ * Copyright (C) 2025, The Phoenix Firestorm Project, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/autobuild.xml b/autobuild.xml
index 9d9a630cf0..c0a0fdd884 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -4193,7 +4193,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
license_file
docs/LICENSE-source.txt
copyright
- Copyright (c) 2024, The Phoenix Firestorm Project, Inc.
+ Copyright (c) 2025, The Phoenix Firestorm Project, Inc.
version_file
newview/viewer_version.txt
name
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 31b17807e2..d2a0bb629b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2655,7 +2655,7 @@ if (DARWIN)
set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
- set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2024 The Phoenix Firestorm Project, Inc.")
+ set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2025 The Phoenix Firestorm Project, Inc.")
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib")
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index b19cda2ddd..84bd1775ce 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -3,4 +3,4 @@
CFBundleName = "Firestorm";
CFBundleShortVersionString = "Firestorm version %%VERSION%%";
-CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2024 The Phoenix Firestorm Project, Inc.";
+CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2025 The Phoenix Firestorm Project, Inc.";
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4f1913dcd5..71b5918270 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9242,6 +9242,20 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+
+
+ OpenDebugStatMaterials
+
+
OpenDebugStatTexture