Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • alchemy/viewer
  • Miezhiko/alchemy-next
  • JennaHuntsman/xdg-integration
  • logue/alchemy-next
  • FelixWolf/alchemy-viewer
  • XenHat/xdg-integration
6 results
Show changes
Commits on Source (8493)
Showing
with 824 additions and 250 deletions
......@@ -87,7 +87,7 @@ PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000
PointerAlignment: Right
PointerAlignment: Left
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
......
root = true
[*]
charset = utf-8
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[Makefile]
indent_style = tab
[*.{yml,yaml}]
indent_size = 2
* text eol=lf
# Sources
*.cpp text diff=cpp
*.h text diff=cpp
*.py text diff=python
indra/newview/llimprocessing.cpp -text
# Visual Studio
*.sln text eol=crlf
*.vcproj text eol=crlf
*.vcxproj text eol=crlf
# Documents
*.txt text
*.xml text
indra/tools/vstool/README.txt -text
indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt -text
# Graphics
*.png binary diff=exif
*.jpg binary diff=exif
*.jpeg binary diff=exif
*.gif binary diff=exif
*.tif binary
*.tiff binary
*.ico binary
*.svg text
*.eps binary
*.tga binary
*.j2k binary
*.j2c binary
*.icns binary
*.bmp binary
*.BMP binary
# Scripts
*.sh text eol=lf
*.bat text eol=crlf
# Viewer Files
*.db2 binary
*.llm binary
# Fonts
*.ttf binary
*.otf binary
# Mac
*.nib binary
*.exe binary
# Exclude files from exporting
.gitattributes export-ignore
.gitignore export-ignore
name: Bug report
description: Viewer bug report
title: "[Bug]: "
labels: [bug, triage]
body:
- type: markdown
attributes:
value: |
- Write a descriptive bug title above.
- Search [open](https://github.com/AlchemyViewer/Alchemy/issues?q=is%3Aopen+label%3Abug+is%3Aissue) bugs to ensure that the issue has not already been identified.
- type: textarea
attributes:
label: Environment
description: About Alchemy Text
placeholder: ex. Alchemy Test 7.1.3.240191747 (64bit) ...
validations:
required: true
- type: textarea
attributes:
label: Description
description: Explain the problem.
validations:
required: true
- type: textarea
attributes:
label: Reproduction steps
description: Steps to reproduce this bug
placeholder: |
1. First step
2. Second step
Expected: ...
Actual: ...
validations:
required: true
name: Enhancement
description: New feature or enhancement
title: "[New Feature]: "
labels: [enhancement, triage]
body:
- type: markdown
attributes:
value: |
- Write a descriptive feature/enhancement title above.
- Search [open](https://github.com/AlchemyViewer/Alchemy/issues?q=is%3Aopen+label%3Aenhancement+is%3Aissue) feature/enhancement requests to ensure that the feature has not already been requested.
- type: textarea
attributes:
label: Environment
description: About Alchemy Text
placeholder: ex. Alchemy Test 7.1.3.240191747 (64bit) ...
validations:
required: true
- type: textarea
attributes:
label: Description
description: What does this feature/enhancement do? Why is it needed? Include screenshots to illustrate how it should function if possible!
validations:
required: true
name: Blank Issue
description: Don’t see your issue here? Open a blank issue.
labels: [triage]
body:
- type: textarea
attributes:
label: Description
description: Please describe your issue.
validations:
required: true
blank_issues_enabled: false
contact_links:
- name: 💬 Alchemy Viewer Discord
url: https://discordapp.com/invite/KugCgs6
about: Space for discussing and reviewing user-impacting bug reports and feature requests.
llappearance:
- indra/llappearance/**/*
llaudio:
- indra/llaudio/**/*
llcharacter:
- indra/llcharacter/**/*
llcommon:
- indra/llcommon/**/*
llcorehttp:
- indra/llcorehttp/**/*
llcrashlogger:
- indra/llcrashlogger/**/*
llfilesystem:
- indra/llfilesystem/**/*
llimage:
- indra/llimage/**/*
llimagej2coj:
- indra/llimagej2coj/**/*
llinventory:
- indra/llinventory/**/*
llkdu:
- indra/llkdu/**/*
llmath:
- indra/llmath/**/*
llmeshoptimizer:
- indra/llmeshoptimizer/**/*
llmessage:
- indra/llmessage/**/*
llplugin:
- indra/llplugin/**/*
llprimitive:
- indra/llprimitive/**/*
llrender:
- indra/llrender/**/*
llui:
- indra/llui/**/*
llwindow:
- indra/llwindow/**/*
llxml:
- indra/llxml/**/*
cmake:
- '**/*.cmake'
- '**/*/cmake/*'
- '**/CMakeLists.txt'
python:
- '**/*.py'
c/cpp:
- '**/*.c'
- '**/*.cpp'
- '**/*.cxx'
- '**/*.h'
- '**/*.hpp'
- '**/*.hxx'
- '**/*.i'
- '**/*.inl'
- '**/*.y'
changelog:
exclude:
labels:
- ignore-for-release
authors:
- dependabot
categories:
- title: Breaking Changes 🛠
labels:
- semver-major
- breaking-change
- title: New Features 🎉
labels:
- semver-minor
- enhancement
- title: Other Changes
labels:
- '*'
......@@ -2,28 +2,58 @@ name: Build
on:
workflow_dispatch:
inputs:
release_run:
type: boolean
description: Do a release of this build
default: false
pull_request:
push:
branches: ["*"]
tags: ["*"]
branches: ["main", "release/*", "project/*"]
tags: ["Second_Life*"]
jobs:
# The whole point of the setvar job is that we want to set a variable once
# that will be consumed by multiple subsequent jobs. We tried setting it in
# the global env, but a job.env can't directly reference the global env
# context.
setvar:
runs-on: ubuntu-latest
outputs:
release_run: ${{ steps.setvar.outputs.release_run }}
env:
# Build with a tag like "Second_Life#abcdef0" to generate a release page
# (used for builds we are planning to deploy).
# When you want to use a string variable as a workflow YAML boolean, it's
# important to ensure it's the empty string when false. If you omit || '',
# its value when false is "false", which is interpreted as true.
RELEASE_RUN: ${{ (github.event.inputs.release_run || github.ref_type == 'tag' && startsWith(github.ref_name, 'Second_Life')) && 'Y' || '' }}
steps:
- name: Set Variable
id: setvar
shell: bash
run: |
echo "release_run=$RELEASE_RUN" >> "$GITHUB_OUTPUT"
build:
needs: setvar
strategy:
matrix:
runner: [windows-large, macos-12-xl]
configuration: [Release, ReleaseOS]
python-version: ["3.11"]
configuration: [Release]
Linden: [true]
include:
- runner: macos-12-xl
developer_dir: "/Applications/Xcode_14.0.1.app/Contents/Developer"
exclude:
- runner: macos-12-xl
- runner: windows-large
configuration: ReleaseOS
Linden: false
runs-on: ${{ matrix.runner }}
outputs:
viewer_channel: ${{ steps.build.outputs.viewer_channel }}
viewer_version: ${{ steps.build.outputs.viewer_version }}
viewer_branch: ${{ steps.which-branch.outputs.branch }}
relnotes: ${{ steps.which-branch.outputs.relnotes }}
imagename: ${{ steps.build.outputs.imagename }}
env:
AUTOBUILD_ADDRSIZE: 64
......@@ -33,12 +63,16 @@ jobs:
AUTOBUILD_GITHUB_TOKEN: ${{ secrets.SHARED_AUTOBUILD_GITHUB_TOKEN }}
AUTOBUILD_INSTALLABLE_CACHE: ${{ github.workspace }}/.autobuild-installables
AUTOBUILD_VARIABLES_FILE: ${{ github.workspace }}/.build-variables/variables
# Direct autobuild to store vcs_url, vcs_branch and vcs_revision in
# autobuild-package.xml.
AUTOBUILD_VCS_INFO: "true"
AUTOBUILD_VSVER: "170"
DEVELOPER_DIR: ${{ matrix.developer_dir }}
# Ensure that Linden viewer builds engage Bugsplat.
BUGSPLAT_DB: ${{ matrix.configuration != 'ReleaseOS' && 'SecondLife_Viewer_2018' || '' }}
BUGSPLAT_PASS: ${{ secrets.BUGSPLAT_PASS }}
BUGSPLAT_USER: ${{ secrets.BUGSPLAT_USER }}
BUGSPLAT_DB: ${{ matrix.Linden && 'SecondLife_Viewer_2018' || '' }}
# Run BUILD steps for Release configuration.
# Run BUILD steps for ReleaseOS configuration only for release runs.
BUILD: ${{ (matrix.Linden || needs.setvar.outputs.release_run) && 'Y' || '' }}
build_coverity: false
build_log_dir: ${{ github.workspace }}/.logs
build_viewer: true
......@@ -57,34 +91,40 @@ jobs:
variants: ${{ matrix.configuration }}
steps:
- name: Checkout code
if: env.BUILD
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Setup python
uses: actions/setup-python@v4
if: env.BUILD
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
python-version: "3.11"
- name: Checkout build variables
if: env.BUILD
uses: actions/checkout@v4
with:
repository: secondlife/build-variables
ref: viewer
ref: master
path: .build-variables
- name: Checkout master-message-template
if: env.BUILD
uses: actions/checkout@v4
with:
repository: secondlife/master-message-template
path: .master-message-template
- name: Install autobuild and python dependencies
if: env.BUILD
run: pip3 install autobuild llsd
- name: Cache autobuild packages
uses: actions/cache@v3
id: cache-installables
if: env.BUILD
uses: actions/cache@v4
with:
path: .autobuild-installables
key: ${{ runner.os }}-64-${{ matrix.configuration }}-${{ hashFiles('autobuild.xml') }}
......@@ -93,13 +133,22 @@ jobs:
${{ runner.os }}-64-
- name: Install windows dependencies
if: runner.os == 'Windows'
if: env.BUILD && runner.os == 'Windows'
run: choco install nsis-unicode
- name: Determine source branch
id: which-branch
if: env.BUILD
uses: secondlife/viewer-build-util/which-branch@v2
with:
token: ${{ github.token }}
- name: Build
id: build
if: env.BUILD
shell: bash
env:
AUTOBUILD_VCS_BRANCH: ${{ steps.which-branch.outputs.branch }}
RUNNER_OS: ${{ runner.os }}
run: |
# set up things the viewer's build.sh script expects
......@@ -150,7 +199,7 @@ jobs:
}
repo_branch()
{
git -C "$1" branch | grep '^* ' | cut -c 3-
echo "$AUTOBUILD_VCS_BRANCH"
}
record_dependencies_graph()
{
......@@ -170,16 +219,22 @@ jobs:
# seen before, so numerous tests don't know about it.
[[ "$arch" == "MINGW6" ]] && arch=CYGWIN
export AUTOBUILD="$(which autobuild)"
# Build with a tag like "Second_Life_Project_Shiny#abcdef0" to get a
# viewer channel "Second Life Project Shiny" (ignoring "#hash",
# needed to disambiguate tags).
if [[ "$GITHUB_REF_TYPE" == "tag" && "${GITHUB_REF_NAME:0:12}" == "Second_Life_" ]]
then viewer_channel="${GITHUB_REF_NAME%#*}"
export viewer_channel="${viewer_channel//_/ }"
else export viewer_channel="Second Life Test"
# determine the viewer channel from the branch name
branch=$AUTOBUILD_VCS_BRANCH
IFS='/' read -ra ba <<< "$branch"
prefix=${ba[0]}
if [ "$prefix" == "project" ]; then
IFS='_' read -ra prj <<< "${ba[1]}"
# uppercase first letter of each word
export viewer_channel="Second Life Project ${prj[*]^}"
elif [[ "$prefix" == "release" || "$prefix" == "main" ]];
then
export viewer_channel="Second Life Release"
else
export viewer_channel="Second Life Test"
fi
echo "viewer_channel=$viewer_channel" >> "$GITHUB_OUTPUT"
# On windows we need to point the build to the correct python
# as neither CMake's FindPython nor our custom Python.cmake module
# will resolve the correct interpreter location.
......@@ -213,8 +268,8 @@ jobs:
echo "artifact=$RUNNER_OS$cfg_suffix" >> $GITHUB_OUTPUT
- name: Upload executable
if: matrix.configuration != 'ReleaseOS' && steps.build.outputs.viewer_app
uses: actions/upload-artifact@v3
if: matrix.Linden && steps.build.outputs.viewer_app
uses: actions/upload-artifact@v4
with:
name: "${{ steps.build.outputs.artifact }}-app"
path: |
......@@ -223,16 +278,16 @@ jobs:
# The other upload of nontrivial size is the symbol file. Use a distinct
# artifact for that too.
- name: Upload symbol file
if: matrix.configuration != 'ReleaseOS'
uses: actions/upload-artifact@v3
if: matrix.Linden
uses: actions/upload-artifact@v4
with:
name: "${{ steps.build.outputs.artifact }}-symbols"
path: |
${{ steps.build.outputs.symbolfile }}
- name: Upload metadata
if: matrix.configuration != 'ReleaseOS'
uses: actions/upload-artifact@v3
if: matrix.Linden
uses: actions/upload-artifact@v4
with:
name: "${{ steps.build.outputs.artifact }}-metadata"
# emitted by build.sh, possibly multiple lines
......@@ -240,9 +295,9 @@ jobs:
${{ steps.build.outputs.metadata }}
- name: Upload physics package
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
# should only be set for viewer-private
if: matrix.configuration != 'ReleaseOS' && steps.build.outputs.physicstpv
if: matrix.Linden && steps.build.outputs.physicstpv
with:
name: "${{ steps.build.outputs.artifact }}-physics"
# emitted by build.sh, zero or one lines
......@@ -250,23 +305,36 @@ jobs:
${{ steps.build.outputs.physicstpv }}
sign-and-package-windows:
env:
AZURE_KEY_VAULT_URI: ${{ secrets.AZURE_KEY_VAULT_URI }}
AZURE_CERT_NAME: ${{ secrets.AZURE_CERT_NAME }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
needs: build
runs-on: windows
runs-on: windows-large
steps:
- name: Sign and package Windows viewer
uses: secondlife/viewer-build-util/sign-pkg-windows@v1
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
with:
vault_uri: "${{ secrets.AZURE_KEY_VAULT_URI }}"
cert_name: "${{ secrets.AZURE_CERT_NAME }}"
client_id: "${{ secrets.AZURE_CLIENT_ID }}"
client_secret: "${{ secrets.AZURE_CLIENT_SECRET }}"
tenant_id: "${{ secrets.AZURE_TENANT_ID }}"
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 }}"
sign-and-package-mac:
env:
NOTARIZE_CREDS_MACOS: ${{ secrets.NOTARIZE_CREDS_MACOS }}
SIGNING_CERT_MACOS: ${{ secrets.SIGNING_CERT_MACOS }}
SIGNING_CERT_MACOS_IDENTITY: ${{ secrets.SIGNING_CERT_MACOS_IDENTITY }}
SIGNING_CERT_MACOS_PASSWORD: ${{ secrets.SIGNING_CERT_MACOS_PASSWORD }}
needs: build
runs-on: macos-latest
steps:
- name: Unpack Mac notarization credentials
if: env.NOTARIZE_CREDS_MACOS
id: note-creds
shell: bash
run: |
......@@ -274,7 +342,7 @@ jobs:
# USERNAME="..."
# PASSWORD="..."
# TEAM_ID="..."
eval "${{ secrets.NOTARIZE_CREDS_MACOS }}"
eval "${{ env.NOTARIZE_CREDS_MACOS }}"
echo "::add-mask::$USERNAME"
echo "::add-mask::$PASSWORD"
echo "::add-mask::$TEAM_ID"
......@@ -286,86 +354,122 @@ jobs:
[[ -n "$USERNAME" && -n "$PASSWORD" && -n "$TEAM_ID" ]]
- name: Sign and package Mac viewer
uses: secondlife/viewer-build-util/sign-pkg-mac@v1
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
with:
channel: ${{ needs.build.outputs.viewer_channel }}
imagename: ${{ needs.build.outputs.imagename }}
cert_base64: ${{ secrets.SIGNING_CERT_MACOS }}
cert_name: ${{ secrets.SIGNING_CERT_MACOS_IDENTITY }}
cert_pass: ${{ secrets.SIGNING_CERT_MACOS_PASSWORD }}
cert_base64: ${{ env.SIGNING_CERT_MACOS }}
cert_name: ${{ env.SIGNING_CERT_MACOS_IDENTITY }}
cert_pass: ${{ env.SIGNING_CERT_MACOS_PASSWORD }}
note_user: ${{ steps.note-creds.outputs.note_user }}
note_pass: ${{ steps.note-creds.outputs.note_pass }}
note_team: ${{ steps.note-creds.outputs.note_team }}
post-windows-symbols:
env:
BUGSPLAT_USER: ${{ secrets.BUGSPLAT_USER }}
BUGSPLAT_PASS: ${{ secrets.BUGSPLAT_PASS }}
needs: build
runs-on: ubuntu-latest
steps:
- name: Download viewer exe
uses: actions/download-artifact@v4
with:
name: Windows-app
path: _artifacts
- name: Download Windows Symbols
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
uses: actions/download-artifact@v4
with:
name: Windows-symbols
- name: Extract viewer pdb
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
shell: bash
run: |
tar -xJf "${{ needs.build.outputs.viewer_channel }}.sym.tar.xz" -C _artifacts
- name: Post Windows symbols
uses: secondlife/viewer-build-util/post-bugsplat-windows@v1
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
uses: secondlife-3p/symbol-upload@v10
with:
username: ${{ secrets.BUGSPLAT_USER }}
password: ${{ secrets.BUGSPLAT_PASS }}
username: ${{ env.BUGSPLAT_USER }}
password: ${{ env.BUGSPLAT_PASS }}
database: "SecondLife_Viewer_2018"
channel: ${{ needs.build.outputs.viewer_channel }}
application: ${{ needs.build.outputs.viewer_channel }}
version: ${{ needs.build.outputs.viewer_version }}
directory: _artifacts
files: "**/{SecondLifeViewer.exe,llwebrtc.dll,*.pdb}"
post-mac-symbols:
env:
BUGSPLAT_USER: ${{ secrets.BUGSPLAT_USER }}
BUGSPLAT_PASS: ${{ secrets.BUGSPLAT_PASS }}
needs: build
runs-on: ubuntu-latest
steps:
- name: Download Mac Symbols
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
uses: actions/download-artifact@v4
with:
name: macOS-symbols
- name: Post Mac symbols
uses: secondlife/viewer-build-util/post-bugsplat-mac@v1
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
uses: secondlife-3p/symbol-upload@v10
with:
username: ${{ secrets.BUGSPLAT_USER }}
password: ${{ secrets.BUGSPLAT_PASS }}
username: ${{ env.BUGSPLAT_USER }}
password: ${{ env.BUGSPLAT_PASS }}
database: "SecondLife_Viewer_2018"
channel: ${{ needs.build.outputs.viewer_channel }}
application: ${{ needs.build.outputs.viewer_channel }}
version: ${{ needs.build.outputs.viewer_version }}
directory: .
files: "**/*.xcarchive.zip"
release:
needs: [sign-and-package-windows, sign-and-package-mac]
needs: [setvar, build, sign-and-package-windows, sign-and-package-mac]
runs-on: ubuntu-latest
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'Second_Life_')
if: needs.setvar.outputs.release_run
steps:
- uses: actions/download-artifact@v3
with:
name: Windows-installer
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: macOS-installer
pattern: "*-installer"
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: Windows-metadata
pattern: "*-metadata"
- name: Rename windows metadata
- name: Rename metadata
run: |
mv autobuild-package.xml Windows-autobuild-package.xml
mv newview/viewer_version.txt Windows-viewer_version.txt
- uses: actions/download-artifact@v3
with:
name: macOS-metadata
- name: Rename macOS metadata
run: |
mv autobuild-package.xml macOS-autobuild-package.xml
mv newview/viewer_version.txt macOS-viewer_version.txt
cp Windows-metadata/autobuild-package.xml Windows-autobuild-package.xml
cp Windows-metadata/newview/viewer_version.txt Windows-viewer_version.txt
cp macOS-metadata/autobuild-package.xml macOS-autobuild-package.xml
cp macOS-metadata/newview/viewer_version.txt macOS-viewer_version.txt
# forked from softprops/action-gh-release
- uses: secondlife-3p/action-gh-release@v1
- name: Create GitHub release
id: release
uses: secondlife-3p/action-gh-release@v1
with:
# name the release page for the build number so we can find it
# easily (analogous to looking up a codeticket build page)
name: "v${{ github.run_id }}"
# name the release page for the branch
name: "${{ needs.build.outputs.viewer_branch }}"
# SL-20546: want the channel and version to be visible on the
# release page
body: |
Build ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
${{ needs.build.outputs.viewer_channel }}
${{ needs.build.outputs.viewer_version }}
${{ needs.build.outputs.relnotes }}
prerelease: true
generate_release_notes: true
# the only reason we generate a GH release is to post build products
target_commitish: ${{ github.sha }}
previous_tag: release
append_body: true
fail_on_unmatched_files: true
files: |
*.dmg
*.exe
macOS-installer/*.dmg
Windows-installer/*.exe
*-autobuild-package.xml
*-viewer_version.txt
- name: post release URL
run: |
echo "::notice::Release ${{ steps.release.outputs.url }}"
name: Check CLA
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]
jobs:
cla:
name: Check CLA
runs-on: ubuntu-latest
steps:
- name: CLA Assistant
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
uses: secondlife-3p/contributor-assistant@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PERSONAL_ACCESS_TOKEN: ${{ secrets.SHARED_CLA_TOKEN }}
with:
branch: main
path-to-document: https://github.com/secondlife/cla/blob/master/CLA.md
path-to-signatures: signatures.json
remote-organization-name: secondlife
remote-repository-name: cla-signatures
name: Pull Request Labeler
on:
- pull_request_target
jobs:
triage:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
with:
configuration-path: .github/labeler.yaml
repo-token: "${{ secrets.GITHUB_TOKEN }}"
name: pre-commit
on:
pull_request:
push:
branches: [main, contribute]
tags: [v*]
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.x
- uses: pre-commit/action@v3.0.0
......@@ -17,7 +17,8 @@ jobs:
with:
stale-pr-message: This pull request is stale because it has been open 30 days with no activity. Remove stale label or comment or it will be closed in 7 days
days-before-stale: 30
days-before-close: 7
days-before-close: 7
days-before-issue-close: -1
exempt-pr-labels: blocked,must,should,keep
stale-pr-label: stale
- name: Print outputs
......
......@@ -17,24 +17,18 @@
*~
# Specific paths and/or names
.venv
CMakeCache.txt
cmake_install.cmake
LICENSES
build-darwin-*
build-linux-*
build-*
debian/files
debian/secondlife-appearance-utility*
debian/secondlife-viewer*
indra/.distcc
indra/cmake/*
indra/out/*
indra/packages/*
build-vc80/
build-vc100/
build-vc120/
build-vc*-32/
build-vc*-64/
indra/CMakeFiles
indra/build-vc[0-9]*
indra/lib/mono/1.0/*.dll
......@@ -52,11 +46,12 @@ indra/newview/app_settings/static_*.db2
indra/newview/avatar_icons_cache.txt
indra/newview/avatar_lad.log
indra/newview/browser_profile
indra/newview/character
indra/newview/dbghelp.dll
indra/newview/filters.xml
indra/newview/fmod.dll
indra/newview/fmod.log
indra/newview/fonts
indra/newview/installers/windows/*.ico
indra/newview/mozilla-theme
indra/newview/mozilla-universal-darwin.tgz
indra/newview/pilot.txt
......@@ -68,6 +63,7 @@ indra/newview/teleport_history.txt
indra/newview/typed_locations.txt
indra/newview/vivox-runtime
indra/newview/skins/default/html/common/equirectangular/js
emoji_characters.xml
indra/server-linux-*
indra/temp
indra/test/linden_file.dat
......@@ -87,6 +83,6 @@ trivial_change_force_build
web/config.*
web/locale.*
web/secondlife.com.*
/Pipfile.lock
.env
.vscode
stages:
- build
- upload
default:
interruptible: true
timeout: 4h
variables:
BUILD_CHANNEL:
value: "Test"
options:
- "Release"
- "Beta"
- "Project"
- "Test"
description: "The deployment channel target. Set to 'Test' by default."
PUBLIC_BUILD:
value: "FALSE"
options:
- "FALSE"
- "TRUE"
description: "Are package registry uploads public?. Set to 'TRUE' by default"
ENABLE_TESTS:
value: "TRUE"
options:
- "FALSE"
- "TRUE"
description: "Enable Sentry crash reporting. Set to 'TRUE' by default."
description: "Enable Discord integrations. Set to 'TRUE' by default."
ENABLE_LTO:
value: "TRUE"
options:
- "FALSE"
- "TRUE"
description: "Enable Link Time Optimization. Set to 'TRUE' by default."
USE_HAVOK:
value: "TRUE"
options:
- "FALSE"
- "TRUE"
description: "Enable Havok integrations. Set to 'TRUE' by default."
USE_SENTRY:
value: "TRUE"
options:
- "FALSE"
- "TRUE"
description: "Enable Sentry crash reporting. Set to 'TRUE' by default."
USE_DISCORD:
value: "TRUE"
options:
- "FALSE"
- "TRUE"
AUTOBUILD_BUILD_ID: $CI_PIPELINE_ID
AUTOBUILD_GITLAB_TOKEN: $CI_JOB_TOKEN
AUTOBUILD_INSTALLABLE_CACHE: "$CI_PROJECT_DIR/.cache/autobuild"
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
.win_build:
stage: build
tags:
- autobuild
- windows
cache:
key:
files:
- autobuild.xml
prefix: ${CI_JOB_NAME}
paths:
- .cache/autobuild
- .cache/pip
when: 'always'
before_script:
- python -m venv .venv
- .\.venv\Scripts\Activate.ps1
- pip install --upgrade llbase autobuild certifi sentry-cli cmake
script:
- autobuild configure -c Release -- -DUSE_LTO="${ENABLE_LTO}" -DHAVOK_TPV="${USE_HAVOK}" -DLL_TESTS="${ENABLE_TESTS}" -DDISABLE_FATAL_WARNINGS=ON -DREVISION_FROM_VCS=FALSE
- autobuild build -c Release --no-configure
- autobuild graph -c Release --graph-file "alchemy-windows${AUTOBUILD_ADDRSIZE}-dependencies.svg" "build-vc-${AUTOBUILD_ADDRSIZE}/autobuild-package.xml"
- If ($env:USE_SENTRY -eq 'TRUE') { sentry-cli debug-files upload --include-sources (Get-Item .\build-vc-${AUTOBUILD_ADDRSIZE}\newview\Release\alchemy-bin.*).FullName (Get-Item .\build-vc-64\newview\Release\*.dll).FullName }
artifacts:
name: "$env:CI_COMMIT_REF_NAME-$env:CI_COMMIT_SHORT_SHA"
expire_in: 1 week
paths:
- build-vc-*/newview/Release/build_data.json
- build-vc-*/newview/Release/Alchemy_*_Setup.exe
- alchemy-*-dependencies.svg
.mac_build:
stage: build
tags:
- mac
- m1
- bash
cache:
key:
files:
- autobuild.xml
prefix: ${CI_JOB_NAME}
paths:
- .cache/autobuild
- .cache/pip
when: 'always'
variables:
VIEWER_SIGNING_IDENTITY: $APPLE_SIGNATURE
before_script:
- python3 -m venv .venv
- source .venv/bin/activate
- pip3 install --upgrade llbase autobuild dmgbuild certifi sentry-cli cmake
script:
- autobuild configure -c Release -- -DENABLE_SIGNING=ON -DUSE_LTO="${ENABLE_LTO}" -DHAVOK_TPV=${USE_HAVOK} -DLL_TESTS="${ENABLE_TESTS}" -DDISABLE_FATAL_WARNINGS=ON -DREVISION_FROM_VCS=FALSE
- autobuild build -c Release --no-configure
- autobuild graph -c Release --graph-file alchemy-darwin${AUTOBUILD_ADDRSIZE}-dependencies.svg build-darwin-64/autobuild-package.xml
- if [ "$USE_SENTRY" = "TRUE" ]; then sentry-cli debug-files upload --include-sources build-darwin-64/newview/Release/*.app.dSYM build-darwin-64/newview/Release/*.app/Contents/MacOS/ build-darwin-64/newview/Release/*.app/Contents/Frameworks/ build-darwin-*/packages/lib/release/*.dSYM; fi
artifacts:
name: "$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA"
expire_in: 1 week
paths:
- build-darwin-*/build_data.json
- build-darwin-*/newview/Alchemy_*.dmg
- alchemy-*-dependencies.svg
.linux_build:
stage: build
image: r.alchemyviewer.org/alchemy/infrastructure/ubuntu-build-image:latest-jammy
tags:
- linux
- docker
cache:
key:
files:
- autobuild.xml
prefix: ${CI_JOB_NAME}
paths:
- .cache/autobuild
- .cache/pip
when: 'always'
before_script:
- python3 -m venv .venv
- source .venv/bin/activate
- pip3 install --upgrade llbase autobuild certifi sentry-cli cmake ninja
script:
- autobuild configure -c Release -- -DUSE_LTO="${ENABLE_LTO}" -DLL_TESTS="${ENABLE_TESTS}" -DDISABLE_FATAL_WARNINGS=ON -DREVISION_FROM_VCS=FALSE -DCOMPRESS_DEBUG=ON
- autobuild build -c Release --no-configure
- autobuild graph -c Release --graph-file alchemy-linuxs${AUTOBUILD_ADDRSIZE}-dependencies.svg build-linux-${AUTOBUILD_ADDRSIZE}/autobuild-package.xml
- if [ "$USE_SENTRY" = "TRUE" ]; then sentry-cli debug-files upload --include-sources build-linux-64/newview/*.debug build-linux-64/newview/packaged/alchemy-bin build-linux-64/llwebrtc/*.so build-linux-64/packages/lib/release/*.so*; fi
artifacts:
name: "$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA"
expire_in: 1 week
paths:
- build-linux-*/build_data.json
- build-linux-*/newview/Alchemy_*.tar.*
- alchemy-*-dependencies.svg
coverity_scan:
stage: build
image: r.alchemyviewer.org/alchemy/infrastructure/ubuntu-build-image:latest-llvm-coverity
tags:
- linux
- docker
rules:
- if: '$CI_COMMIT_BRANCH == "coverity"'
cache:
key:
files:
- autobuild.xml
prefix: ${CI_JOB_NAME}
paths:
- .cache/autobuild
- .cache/pip
when: 'always'
variables:
AUTOBUILD_ADDRSIZE: 64
before_script:
- python -m venv .venv
- source .venv/bin/activate
- pip3 install --upgrade llbase autobuild cmake ninja
script:
- cov-configure --template --comptype clangcc --compiler clang-12
- cov-configure --template --comptype clangcxx --compiler clang++-12
- autobuild configure -c Coverity -- -DLL_TESTS=OFF -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=OFF -DDISABLE_FATAL_WARNINGS=ON -DREVISION_FROM_VCS=FALSE -DUSE_PRECOMPILED_HEADERS=OFF
- autobuild build -c Coverity --no-configure
- pushd "build-linux-64"
- tar caf alchemyviewer.xz cov-int
- curl --header "JOB-TOKEN:$CI_JOB_TOKEN" --upload-file alchemyviewer.xz "${CI_API_V4_URL}/projects/165/packages/generic/coverity/0.0.$CI_PIPELINE_ID/alchemyviewer.xz"
- popd
.win32_build:
extends: .win_build
variables:
AUTOBUILD_ADDRSIZE: 32
cache:
key:
prefix: windows32
.win64_build:
extends: .win_build
variables:
AUTOBUILD_ADDRSIZE: 64
cache:
key:
prefix: windows64
.mac64_build:
extends: .mac_build
variables:
AUTOBUILD_ADDRSIZE: 64
cache:
key:
prefix: darwin64
.linux32_build:
extends: .linux_build
variables:
AUTOBUILD_ADDRSIZE: 32
cache:
key:
prefix: linux32
.linux64_build:
extends: .linux_build
variables:
AUTOBUILD_ADDRSIZE: 64
cache:
key:
prefix: linux64
.dev_rules:
rules:
- if: $BUILD_CHANNEL != "Test" || $CI_COMMIT_TAG
when: never
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
#- if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
# when: delayed
# start_in: '12 hours'
variables:
USE_SENTRY: "FALSE"
VIEWER_CHANNEL_TYPE: Test
VIEWER_USE_CRASHPAD: "FALSE"
.project_rules:
rules:
- if: '$BUILD_CHANNEL == "Project" && ($CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule")'
- if: '$CI_COMMIT_TAG =~ /.*-project/'
variables:
VIEWER_CHANNEL_TYPE: Project
.beta_rules:
rules:
- if: '$BUILD_CHANNEL == "Beta" && ($CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule")'
- if: '$CI_COMMIT_TAG =~ /.*-beta/'
variables:
VIEWER_CHANNEL_TYPE: Beta
.release_rules:
rules:
- if: '$BUILD_CHANNEL == "Release" && ($CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule")'
- if: '$CI_COMMIT_TAG =~ /.*-release/'
variables:
VIEWER_CHANNEL_TYPE: Release
build:dev:linux64:
extends:
- .linux64_build
- .dev_rules
build:dev:mac64:
extends:
- .mac64_build
- .dev_rules
.build:dev:windows32:
extends:
- .win32_build
- .dev_rules
build:dev:windows64:
extends:
- .win64_build
- .dev_rules
build:project:linux64:
extends:
- .linux64_build
- .project_rules
build:project:mac64:
extends:
- .mac64_build
- .project_rules
.build:project:windows64:
extends:
- .win32_build
- .project_rules
build:project:windows64:
extends:
- .win64_build
- .project_rules
build:beta:linux64:
extends:
- .linux64_build
- .beta_rules
build:beta:mac64:
extends:
- .mac64_build
- .beta_rules
.build:beta:windows32:
extends:
- .win32_build
- .beta_rules
build:beta:windows64:
extends:
- .win64_build
- .beta_rules
build:release:linux64:
extends:
- .linux64_build
- .release_rules
build:release:mac64:
extends:
- .mac64_build
- .release_rules
.build:release:windows32:
extends:
- .win32_build
- .release_rules
build:release:windows64:
extends:
- .win64_build
- .release_rules
.upload_template:
stage: upload
image: r.alchemyviewer.org/alchemy/infrastructure/viewer-deploy-image:latest
tags:
- pwsh
- docker
allow_failure: false
before_script:
- python3 -m venv .venv
- ./.venv/bin/Activate.ps1
- pip3 install --upgrade sentry-cli
script:
- $BuildData = Get-Content ./build-vc-64/newview/Release/build_data.json | ConvertFrom-Json
- $BuildChannelVersion = $BuildData.Channel + ' ' + $BuildData.Version
- $BuildChannelOneword = $BuildData.Channel.Replace(" ", "")
- $PkgName = $BuildData.Channel.Replace(" ", "_")
- $PkgVer = $BuildData.Version
- $SetupUploadProjectID = "${CI_PROJECT_ID}"
- If ($env:PUBLIC_BUILD -eq 'FALSE') { $SetupUploadProjectID = "200" }
- $UploadDestURL = "${CI_API_V4_URL}/projects/${SetupUploadProjectID}/packages/generic/${PkgName}/${PkgVer}"
- $UpdateDeployDestURL = "${CI_API_V4_URL}/projects/198/packages/generic/${BuildChannelOneword}"
- >
$UploadParams = @{
Method = "PUT";
Headers = @{
"JOB-TOKEN" = "${CI_JOB_TOKEN}"; };
Verbose = $false;
};
- If ($env:USE_SENTRY -eq 'TRUE') { sentry-cli releases new $BuildChannelVersion && sentry-cli releases set-commits --auto $BuildChannelVersion }
- $DestStatus = "?select=package_file&status=default"
- Push-Location ./build-linux-64/
- Push-Location ./newview/
- $LnxFileName = Get-ChildItem -Path . -Name -Include Alchemy_*.tar.*
- $LnxFileHash = (Get-FileHash .\$LnxFileName -a sha256).Hash
- $LnxPackageUrl = "${UploadDestURL}/${LnxFileName}"
- $LnxUploadResult = Invoke-WebRequest @UploadParams -InFile ./$LnxFileName -Uri "${LnxPackageUrl}${DestStatus}" -MaximumRetryCount 5 -RetryIntervalSec 30 | ConvertFrom-Json
- If ($LnxFileHash -ne $LnxUploadResult.file_sha256) { Write-Output "Upload hash mismatch. expected $Hash actual $($LnxUploadResult.file_sha256)" && Exit 1 }
- Pop-Location
- Pop-Location
- Push-Location ./build-darwin-64/
- Push-Location ./newview/
- $MacFileName = Get-ChildItem -Path . -Name -Include Alchemy_*.dmg
- $MacFileHash = (Get-FileHash .\$MacFileName -a sha256).Hash
- $MacPackageUrl = "${UploadDestURL}/${MacFileName}"
- $MacUploadResult = Invoke-WebRequest @UploadParams -InFile ./$MacFileName -Uri "${MacPackageUrl}${DestStatus}" -MaximumRetryCount 5 -RetryIntervalSec 30 | ConvertFrom-Json
- If ($MacFileHash -ne $MacUploadResult.file_sha256) { Write-Output "Upload hash mismatch. expected $Hash actual $($MacUploadResult.file_sha256)" && Exit 1 }
- Pop-Location
- Pop-Location
- Push-Location ./build-vc-64/
- Push-Location ./newview/Release/
- $WinFileName = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
- $WinFileHash = (Get-FileHash .\$WinFileName -a sha256).Hash
- $WinPackageUrl = "${UploadDestURL}/${WinFileName}"
- $WinUploadResult = Invoke-WebRequest @UploadParams -InFile ./$WinFileName -Uri "${WinPackageUrl}${DestStatus}" -MaximumRetryCount 5 -RetryIntervalSec 30 | ConvertFrom-Json
- If ($WinFileHash -ne $WinUploadResult.file_sha256) { Write-Output "Upload hash mismatch. expected $Hash actual $($WinUploadResult.file_sha256)" && Exit 1 }
- Pop-Location
- Pop-Location
- If ($env:USE_SENTRY -eq 'TRUE') { sentry-cli releases finalize $BuildChannelVersion }
- Write-Output "Package Listing > https://git.alchemyviewer.org/alchemy/alchemy-next/-/packages/$($WinUploadResult.package_id)"
- Write-Output "Windows Package > ${WinPackageUrl}"
- Write-Output "macOS Package > ${MacPackageUrl}"
- Write-Output "Linux Package > ${LnxPackageUrl}"
upload:project:
extends:
- .upload_template
rules:
- if: '$BUILD_CHANNEL == "Project" && ($CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule")'
when: manual
- if: '$CI_COMMIT_TAG =~ /.*-project/'
when: manual
environment:
name: qa
upload:beta:
extends:
- .upload_template
rules:
- if: '$BUILD_CHANNEL == "Beta" && ($CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule")'
when: manual
- if: '$CI_COMMIT_TAG =~ /.*-beta/'
when: manual
environment:
name: beta
upload:release:
extends:
- .upload_template
rules:
- if: '$BUILD_CHANNEL == "Release" && ($CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule")'
when: manual
- if: '$CI_COMMIT_TAG =~ /.*-release/'
when: manual
environment:
name: release
terminal:
image: r.alchemyviewer.org/alchemy/infrastructure/ubuntu-build-image:latest-llvm
script: sleep 60
\ No newline at end of file
## Environment
```
(Please open `Help->About Alchemy` and click Copy to Clipboard then paste the About information here.)
```
## Summary
(Summarize the bug encountered concisely.)
## Steps to reproduce
(How one can reproduce the issue - this is very important)
## What is the expected correct behavior?
(What you should see or what should happen instead)
## Relevant logs and/or screenshots
```
(Attach or paste any relevant logs)
```
/label ~Type::Bug ~Status::Awaiting-Investigation
## Summary
(Summarize the requested improvement concisely.)
## Why is this improvement important to you? How would it benefit the community?
(Provide reasoning as to why the improvement is important to you, and ways it could benefit the larger Alchemy Viewer community.)
## Screenshots, Mockups, etc
(Attach or paste any relevant screenshots or mockups.)
/label ~Type::Improvement ~Status::Awaiting-Investigation
\ No newline at end of file
ci:
autofix_prs: false
repos:
- repo: https://github.com/secondlife/git-hooks.git
rev: v1.0.0
rev: v1.0.2
hooks:
- id: opensource-license
- id: llsd
- id: no-trigraphs
- id: copyright
- id: end-of-file
files: \.(cpp|c|h|py|glsl|cmake|txt)$
exclude: language.txt
- id: indent-with-spaces
files: \.(cpp|c|h|inl|py|glsl|cmake)$
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v5.0.0
hooks:
- id: check-xml
- id: mixed-line-ending