From b82b197d28968a33403244d689016c552c7584d8 Mon Sep 17 00:00:00 2001 From: Beq Date: Tue, 18 Nov 2025 17:47:38 +0000 Subject: [PATCH] add mac only build script rename it --- .github/workflows/build_sl_mac_only.yml | 609 ++++++++++++++++++++++++ 1 file changed, 609 insertions(+) create mode 100644 .github/workflows/build_sl_mac_only.yml diff --git a/.github/workflows/build_sl_mac_only.yml b/.github/workflows/build_sl_mac_only.yml new file mode 100644 index 0000000000..9a625f3065 --- /dev/null +++ b/.github/workflows/build_sl_mac_only.yml @@ -0,0 +1,609 @@ +name: Build SL+Mac viewer +on: + workflow_dispatch: + inputs: + include_tracy: + description: 'Include tracy profiling builds' + required: false + default: 'false' + override_signing: + description: 'Manual builds are not signed by default. Force code signing for this run.' + required: false + default: 'false' + push: + branches: + - "Firestorm*.*.*" + - "*alpha" + - "*nightly" + - "*preview" + schedule: + - cron: '00 03 * * *' # Run every day at 3am UTC +env: + AUTOBUILD_VARIABLES_FILE: ${{github.workspace}}/build-variables/variables + EXTRA_ARGS: -DUSE_FMODSTUDIO=ON -DUSE_KDU=ON --crashreporting + build_secrets_checkout: ${{github.workspace}}/signing + XZ_DEFAULTS: -T0 + FS_RELEASE_TYPE: Unknown + platform: Unknown + addrsize: 64 + fallback_platform: ${platform} + FS_RELEASE_CHAN: ${FS_RELEASE_TYPE}x64 + FS_GRID: "GRID FLAGS NOT SET" + PYTHON: Unknown + +jobs: + build_matrix: + strategy: + matrix: + os: ["macos-15"] + grid: ["sl"] + variant: ["avx"] + runs-on: ${{ matrix.os }} + container: ${{ matrix.container_image }} + outputs: + viewer_channel: ${{ steps.channel.outputs.viewer_channel }} + viewer_version: ${{ steps.version.outputs.viewer_version }} + viewer_variant: ${{ matrix.variant }} + viewer_build: ${{ steps.version.outputs.viewer_build }} + viewer_release_type: ${{ steps.version.outputs.viewer_release_type }} + steps: + - name: Install Bash 4 and GNU sed on Mac + if: runner.os == 'macOS' + run: | + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + brew update + brew install bash + brew install gnu-sed + + echo "/usr/local/bin" >> $GITHUB_PATH + echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH + + - uses: actions/checkout@v5 + # Use apt-based Python when inside the Ubuntu 22.04 container + - name: Install Python 3.11 (container case) + if: matrix.container_image == 'ubuntu:22.04' + id: py311_apt + run: | + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + python3.11 python3.11-venv python3-pip python-is-python3 + python3.11 -m pip install --upgrade pip setuptools wheel + echo "python-path=$(command -v python3.11)" >> "$GITHUB_OUTPUT" + # Use setup-python for all other jobs + - name: Set up Python (normal case) + if: matrix.container_image != 'ubuntu:22.04' + id: py311_setup + uses: actions/setup-python@v6 + with: + python-version: '3.11' + check-latest: true + - name: resolve python path + id: py311 + shell: bash + run: | + if [ -n "${{ steps.py311_apt.outputs.python-path }}" ]; then + PY="${{ steps.py311_apt.outputs.python-path }}" + else + PY="${{ steps.py311_setup.outputs.python-path }}" + fi + echo "python-path=$PY" >> "$GITHUB_OUTPUT" + echo "Resolved Python at: $PY" + - name: Set PYTHON environment for CMake + run: | + echo "PYTHON=${{ steps.py311.outputs.python-path }}" >> $GITHUB_ENV + shell: bash + - name: Install python requirements + run: | + python3 -m pip install -r requirements.txt + python -m pip install -r requirements.txt + # export the new python to the environment var $PYTHON + + - name: Check python version + run: python -V + - name: Check python3 version + run: python3 -V + + - name: Test python llsd + run: | + python - <> $GITHUB_ENV + echo "CXX=g++-13" >> $GITHUB_ENV + - name: Setup rclone and download the folder + uses: beqjanus/setup-rclone@main + with: + rclone_config: ${{ secrets.RCLONE_CONFIG }} + + - name: Set OS/SL flags + run: echo "FS_GRID=-DOPENSIM:BOOL=$([ "${{ matrix.grid }}" == "os" ] && echo "ON" || echo "OFF") -DHAVOK_TPV:BOOL=$([ "${{ matrix.grid }}" == "sl" ] && echo "ON" || echo "OFF")" >> $GITHUB_ENV + shell: bash + + - name: find channel from Branch name + id: channel + run: | + if [[ "${{ github.ref_name }}" == Firestorm* ]]; then + FS_RELEASE_TYPE=Release + elif [[ "${{ github.ref_name }}" == *review* ]]; then + FS_RELEASE_TYPE=Beta + elif [[ "${{ github.ref_name }}" == *alpha* ]]; then + FS_RELEASE_TYPE=Alpha + elif [[ "${{ github.ref_name }}" == *nightly* ]] || [[ "${{ github.event_name }}" == 'schedule' ]]; then + FS_RELEASE_TYPE=Nightly + elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then + if [[ "${{ github.event.inputs.include_tracy }}" == "false" ]]; then + FS_RELEASE_TYPE=Manual + elif [[ "${{ github.event.inputs.include_tracy }}" == "true" ]]; then + FS_RELEASE_TYPE=Profiling + fi + fi + if [[ "${{ matrix.variant }}" == "avx" ]]; then + FS_RELEASE_CHAN="${FS_RELEASE_TYPE}x64" + else + FS_RELEASE_CHAN=${FS_RELEASE_TYPE} + fi + echo "FS_RELEASE_TYPE=${FS_RELEASE_TYPE}" >> $GITHUB_ENV + echo "FS_RELEASE_CHAN=${FS_RELEASE_CHAN}" >> $GITHUB_ENV + 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@v5 + with: + fetch-depth: 0 + + - name: Checkout build vars (after the main code) + uses: actions/checkout@v5 + with: + repository: FirestormViewer/fs-build-variables + path: build-variables + + - name: Define platform variable(s) + run: | + declare -A os_map + os_map=( ["Windows"]="windows" ["Linux"]="linux" ["macOS"]="darwin" ) + platform="${os_map[${{ runner.os}}]}" + echo "fallback_platform=${platform}" >> $GITHUB_ENV + platform+=${addrsize} + echo "platform=${platform}" >> $GITHUB_ENV + shell: bash + + - name: rclone the private 3p packages for this platform (both 64 & 32) + run: 'rclone copy fs_bundles: --filter "- Alpha/*" --filter "+ *${{ env.fallback_platform }}*bz2" .' + + - name: rclone any extra private 3p packages for Alpha (allows library updates not in the main repo) + if: env.FS_RELEASE_TYPE == 'Alpha' + run: 'rclone copy fs_bundles:Alpha --include "*${{ env.fallback_platform }}*bz2" .' + + - name: set VSVER for Windows builds + if: runner.os == 'Windows' + run: echo "AUTOBUILD_VSVER=170" >> $GITHUB_ENV + shell: bash + + - name: Install certificate + if: runner.os == 'macOS' + env: + FS_CERT: ${{ secrets.FS_CERT }} + FS_CERT_PASS: ${{ secrets.FS_CERT_PASS }} + FS_KEYCHAIN_PASS: ${{ secrets.FS_KEYCHAIN_PASS }} + NOTARIZE_CREDS: ${{ secrets.NOTARIZE_CREDS }} + run: | + mkdir -p ${build_secrets_checkout}/code-signing-osx + echo -n "$FS_CERT" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/fs-cert.p12 + echo -n "$FS_CERT_PASS" >${build_secrets_checkout}/code-signing-osx/password.txt + echo -n "$NOTARIZE_CREDS" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/notarize_creds.sh + security create-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain + # notarize tool uses a specific database keychain by default we need to override this to ours. + security default-keychain -s viewer.keychain + security set-keychain-settings -lut 21600 ~/Library/Keychains/viewer.keychain + security unlock-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain + security import ${build_secrets_checkout}/code-signing-osx/fs-cert.p12 -P "$FS_CERT_PASS" -A -t cert -f pkcs12 -k ~/Library/Keychains/viewer.keychain + security set-key-partition-list -S apple-tool:,apple:, -s -k "$FS_KEYCHAIN_PASS" -t private ~/Library/Keychains/viewer.keychain + security list-keychain -d user -s ~/Library/Keychains/viewer.keychain + + - name: Install required Ubuntu packages and release some space. + if: runner.os == 'Linux' + run: | + dependencies=("python3-setuptools" "mesa-common-dev" "libgl1-mesa-dev" "libxinerama-dev" "libxrandr-dev" "libpulse-dev" "libglu1-mesa-dev" "libfreetype6-dev" "libfontconfig1-dev") + sudo apt-get update + sudo apt-get install -y "${dependencies[@]}" + sudo apt-get install -y wget apt-transport-https software-properties-common + sudo apt-get autoremove --purge + sudo apt-get clean + + - name: Install Microsoft repository GPG keys + if: runner.os == 'Linux' + run: | + wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + rm packages-microsoft-prod.deb + sudo apt-get update + sudo apt-get install -y powershell + pwsh -c '$PSVersionTable' + + - name: test macOS bundles are present + if: runner.os == 'MacOS' + run: | + dirlisting="$(ls -l ${{ github.workspace }}${path_sep}${pattern})" + echo "${dirlisting}" + shell: bash + + - name: edit installables + run: | + path_sep="/" + if [[ "${{ runner.os }}" == "Windows" ]]; then + path_sep="\\" + fi + function find_most_recent_bundle() { + local pattern="$1-.*$2[-_]+.*" + local most_recent_file=$(ls -t "${{ github.workspace }}" | egrep "$pattern" | head -1) + if [ -z "$most_recent_file" ]; then + echo "" + else + echo "$most_recent_file" + fi + } + packages=("fmodstudio" "llphysicsextensions_tpv" "kdu") + for package in "${packages[@]}"; do + package_file=$(find_most_recent_bundle $package ${{ env.platform }}) + full_package_path="${{ github.workspace }}${path_sep}${package_file}" + if [ -n "$package_file" ]; then + echo "Installing ${package_file}" + autobuild installables remove ${package} + autobuild installables add ${package} platform=${{ env.platform }} url="file:///${full_package_path}" + else + echo "No bundle found for ${package} on ${{ env.platform }}" + package_file=$(find_most_recent_bundle $package ${{ env.fallback_platform }}) + full_package_path="${{ github.workspace }}${path_sep}${package_file}" + if [ -n "$package_file" ]; then + echo "Installing ${package_file}" + autobuild installables remove ${package} + autobuild installables add ${package} platform=${{ env.fallback_platform }} url="file:///${full_package_path}" + else + echo "No bundle found for ${package} on ${{ env.fallback_platform }}. Package will not be available for build." + fi + fi + done + shell: bash + + - name: Set expiration days and codesigning based on FS_RELEASE_TYPE + run: | + case "${{ env.FS_RELEASE_TYPE }}" in + "Nightly" | "Manual" | "Profiling") + EXPIRE_DAYS=14 + ;; + "Alpha") + EXPIRE_DAYS=14 + ;; + "Beta") + EXPIRE_DAYS=28 + ;; + *) + EXPIRE_DAYS="" + ;; + esac + if [ -n "$EXPIRE_DAYS" ]; then + echo "This ${{ env.FS_RELEASE_TYPE }} build will expire in $EXPIRE_DAYS" + echo "EXTRA_ARGS=${{ env.EXTRA_ARGS}} --testbuild=$EXPIRE_DAYS" >> $GITHUB_ENV + else + echo "This ${{ env.FS_RELEASE_TYPE }} has no built in expiry" + echo "EXTRA_ARGS=${{ env.EXTRA_ARGS}}" >> $GITHUB_ENV + fi + shell: bash + - name: Add tracy builds for dev use if selected (manual builds only). + if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.include_tracy == 'true' }} + shell: bash + run: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} --tracy" >> $GITHUB_ENV + - name: Add flags for AVX2 builds + if: ${{ matrix.variant == 'avx' }} + shell: bash + run: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} --avx2" >> $GITHUB_ENV + - name: Add custom UA string if provided + env: + FS_PF_UA: ${{ secrets.FS_PF_UA }} + run: | + if [ -n "${FS_PF_UA}" ]; then + echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} -DFS_PF_USER_AGENT=\"${FS_PF_UA}\"" >> $GITHUB_ENV + echo "Building with custom user-agent string." + else + echo "No custom user-agent string provided." + fi + shell: bash + - name: Clean up packages to give more space + run: rm *${{ env.fallback_platform }}*bz2 + shell: bash + - name: Configure + run: | + 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.86 -OutputDirectory . + shell: pwsh + + - name: Locate Azure.CodeSigning.Dlib.dll + if: runner.os == 'Windows' + run: | + $dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.86\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 + shell: bash + - name: List macOS build tree + if: runner.os == 'macOS' + run: | + echo "macOS build directories for debugging:" + ls -R build-darwin-* || true + shell: bash + - name: Extract version number + id: version + shell: bash + run: | + if [ -r "indra/newview/VIEWER_VERSION.txt" ] + then + viewer_version="$(<"indra/newview/VIEWER_VERSION.txt")" + echo "viewer_version=$viewer_version" >> "$GITHUB_OUTPUT" + fi + viewer_build=$(git rev-list --count HEAD) + echo "viewer_build=$viewer_build" >> "$GITHUB_OUTPUT" + echo "viewer_channel=${{ env.FS_RELEASE_CHAN }}" >> "$GITHUB_OUTPUT" + echo "viewer_release_type=${{ env.FS_RELEASE_TYPE }}" >> "$GITHUB_OUTPUT" + + - name: Unzip xcarchive.zip files + if: runner.os == 'macOS' + run: | + find . -name '*.xcarchive.zip' -exec sh -c 'unzip -o "{}" -d "$(dirname "{}")"' \; + + + - name: Post Bugsplat Symbols + uses: BugSplat-Git/symbol-upload@main + with: + clientId: ${{ + steps.version.outputs.viewer_release_type == 'Release' && secrets.BUGSPLAT_RELEASE_ID || + steps.version.outputs.viewer_release_type == 'Nightly' && secrets.BUGSPLAT_NIGHTLY_ID || + steps.version.outputs.viewer_release_type == 'Manual' && secrets.BUGSPLAT_MANUAL_ID || + steps.version.outputs.viewer_release_type == 'Beta' && secrets.BUGSPLAT_PREVIEW_ID || + steps.version.outputs.viewer_release_type == 'Alpha' && secrets.BUGSPLAT_ALPHA_ID || + secrets.BUGSPLAT_DEFAULT_ID }} + clientSecret: ${{ + steps.version.outputs.viewer_release_type == 'Release' && secrets.BUGSPLAT_RELEASE_SECRET || + steps.version.outputs.viewer_release_type == 'Nightly' && secrets.BUGSPLAT_NIGHTLY_SECRET || + steps.version.outputs.viewer_release_type == 'Manual' && secrets.BUGSPLAT_MANUAL_SECRET || + steps.version.outputs.viewer_release_type == 'Beta' && secrets.BUGSPLAT_PREVIEW_SECRET || + steps.version.outputs.viewer_release_type == 'Alpha' && secrets.BUGSPLAT_ALPHA_SECRET || + secrets.BUGSPLAT_DEFAULT_SECRET }} + database: ${{ + steps.version.outputs.viewer_release_type == 'Release' && secrets.BUGSPLAT_RELEASE_DB || + steps.version.outputs.viewer_release_type == 'Nightly' && secrets.BUGSPLAT_NIGHTLY_DB || + steps.version.outputs.viewer_release_type == 'Manual' && secrets.BUGSPLAT_MANUAL_DB || + steps.version.outputs.viewer_release_type == 'Beta' && secrets.BUGSPLAT_PREVIEW_DB || + steps.version.outputs.viewer_release_type == 'Alpha' && secrets.BUGSPLAT_ALPHA_DB || + secrets.BUGSPLAT_DEFAULT_DB }} + application: "Firestorm-${{ steps.version.outputs.viewer_channel}}" + version: ${{ steps.version.outputs.viewer_version }}.${{ steps.version.outputs.viewer_build }} + files: ${{ runner.os == 'Windows' && '**/Release/*.{pdb,exe,dll}' || runner.os == 'macOS' && '**/Release/{Firestorm,*.dSYM}' || '**/{do-not-run-directly-firestorm-bin,*.sym}' }} + directory: "build-*" + node-version: "20" + dumpSyms: false + - name: Publish artifacts + if: runner.os == 'Windows' + uses: actions/upload-artifact@v5 + with: + name: ${{ env.FS_RELEASE_TYPE }}-${{ matrix.os }}-${{ matrix.variant }}-${{ matrix.grid }}-artifacts.zip + path: | + build-*/newview/Release/*Setup.exe + build-*/newview/Release/*.xz + + - name: publish Linux artifacts + if: runner.os == 'Linux' + uses: actions/upload-artifact@v5 + with: + name: ${{ env.FS_RELEASE_TYPE }}-${{ matrix.os }}-${{ matrix.variant }}-${{matrix.grid}}-artifacts.zip + path: | + build-linux-*/newview/*.xz + build-linux-*/newview/*.bz2 + + - name: publish MacOS artifacts + if: runner.os == 'macOS' + uses: actions/upload-artifact@v5 + with: + name: ${{ env.FS_RELEASE_TYPE }}-${{ matrix.os }}-${{ matrix.variant }}-${{matrix.grid}}-artifacts.zip + path: | + build-darwin-*/newview/*.dmg + build-darwin-*/newview/*.bz2 + deploy: + runs-on: ubuntu-latest + needs: build_matrix + env: + FS_BUILD_WEBHOOK_URL: + FS_RELEASE_FOLDER: + if: always() + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + sparse-checkout: | + fsutils/download_list.py + fsutils/build_config.json + fsutils/build_config.py + sparse-checkout-cone-mode: false + ref: ${{ github.head_ref || github.ref_name || 'master' }} + fetch-depth: 1 + + - name: Install discord-webhook library + run: pip install discord-webhook + + - name: Download artifacts + uses: actions/download-artifact@v6 + id: download + with: + path: to_deploy + + - name: find channel and webhook from build_matrix outputs + run: | + viewer_release_type=${{ needs.build_matrix.outputs.viewer_release_type }} + if [[ "$viewer_release_type" == "Release" ]]; then + FS_RELEASE_FOLDER=release + FS_BUILD_WEBHOOK_URL=${{ secrets.RELEASE_WEBHOOK_URL }} + elif [[ "$viewer_release_type" == "Beta" ]]; then + FS_RELEASE_FOLDER=preview + FS_BUILD_WEBHOOK_URL=${{ secrets.BETA_WEBHOOK_URL }} + elif [[ "$viewer_release_type" == "Alpha" ]]; then + FS_RELEASE_FOLDER=test + FS_BUILD_WEBHOOK_URL=${{ secrets.BETA_WEBHOOK_URL }} + elif [[ "$viewer_release_type" == "Nightly" ]] || [[ "${{ github.event_name }}" == 'schedule' ]]; then + FS_RELEASE_FOLDER=nightly + FS_BUILD_WEBHOOK_URL=${{ secrets.NIGHTLY_WEBHOOK_URL }} + elif [[ "$viewer_release_type" == "Manual" ]]; then + FS_RELEASE_FOLDER=test + FS_BUILD_WEBHOOK_URL=${{ secrets.MANUAL_WEBHOOK_URL }} + else + FS_RELEASE_TYPE=Unknown + fi + echo "FS_RELEASE_FOLDER=${FS_RELEASE_FOLDER}" >> $GITHUB_ENV + echo "FS_BUILD_WEBHOOK_URL=${FS_BUILD_WEBHOOK_URL}" >> $GITHUB_ENV + + - name: List artifacts download + run: ls -R + working-directory: ${{steps.download.outputs.download-path}} + + - name: Create Build Info artifact + env: + FS_VIEWER_VERSION: + FS_VIEWER_BUILD: + FS_VIEWER_RELEASE_TYPE: + id: create_build_info + run: | + cat < build_info.json + { + "build_run_number": "${{ github.run_number }}", + "release_type": "${{ needs.build_matrix.outputs.viewer_release_type }}", + "viewer_version": "${{ needs.build_matrix.outputs.viewer_version }}", + "viewer_build": "${{ needs.build_matrix.outputs.viewer_build }}" + } + EOF + echo "Build info created: $(cat build_info.json)" + + # Upload Build Info Artifact (note that this file is expected to be identical for each matrix run, so items like OS and VARIANT cannot be in this file.) + - name: Upload Tag Info + uses: actions/upload-artifact@v5 + with: + name: build_info + path: build_info.json + + - name: Reorganise artifacts ready for server upload. + env: + FS_VIEWER_VERSION: ${{ needs.build_matrix.outputs.viewer_version }} + FS_VIEWER_BUILD: ${{ needs.build_matrix.outputs.viewer_build }} + FS_VIEWER_RELEASE_TYPE: ${{ needs.build_matrix.outputs.viewer_release_type }} + FS_VERSION_MGR_KEY: ${{ secrets.FS_VERSION_MGR_KEY }} + run: python ./fsutils/download_list.py ${{steps.download.outputs.download-path}} -w ${{ env.FS_BUILD_WEBHOOK_URL }} + + - name: Setup rclone and download the folder + uses: beqjanus/setup-rclone@main + with: + rclone_config: ${{ secrets.RCLONE_CONFIG }} + + - name: Copy files to remote host + run: rclone copy ${{steps.download.outputs.download-path}}/${{ env.FS_RELEASE_FOLDER }} fs_r2_deploy:viewerdownloads/${{ env.FS_RELEASE_FOLDER }}