HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/LibreChat/.github/workflows/i18n-unused-keys.yml
name: Detect Unused i18next Strings

on:
  pull_request:
    paths:
      - "client/src/**"
      - "api/**"

jobs:
  detect-unused-i18n-keys:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write  # Required for posting PR comments
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Find unused i18next keys
        id: find-unused
        run: |
          echo "🔍 Scanning for unused i18next keys..."

          # Define paths
          I18N_FILE="client/src/locales/en/translation.json"
          SOURCE_DIRS=("client/src" "api" "packages/data-provider/src")

          # Check if translation file exists
          if [[ ! -f "$I18N_FILE" ]]; then
            echo "::error title=Missing i18n File::Translation file not found: $I18N_FILE"
            exit 1
          fi

          # Extract all keys from the JSON file
          KEYS=$(jq -r 'keys[]' "$I18N_FILE")

          # Track unused keys
          UNUSED_KEYS=()

          # Check if each key is used in the source code
          for KEY in $KEYS; do
            FOUND=false
            
            # Special case for dynamically constructed special variable keys
            if [[ "$KEY" == com_ui_special_var_* ]]; then
              # Check if TSpecialVarLabel is used in the codebase
              for DIR in "${SOURCE_DIRS[@]}"; do
                if grep -r --include=\*.{js,jsx,ts,tsx} -q "TSpecialVarLabel" "$DIR"; then
                  FOUND=true
                  break
                fi
              done
              
              # Also check if the key is directly used somewhere
              if [[ "$FOUND" == false ]]; then
                for DIR in "${SOURCE_DIRS[@]}"; do
                  if grep -r --include=\*.{js,jsx,ts,tsx} -q "$KEY" "$DIR"; then
                    FOUND=true
                    break
                  fi
                done
              fi
            else
              # Regular check for other keys
              for DIR in "${SOURCE_DIRS[@]}"; do
                if grep -r --include=\*.{js,jsx,ts,tsx} -q "$KEY" "$DIR"; then
                  FOUND=true
                  break
                fi
              done
            fi
          
            if [[ "$FOUND" == false ]]; then
              UNUSED_KEYS+=("$KEY")
            fi
          done

          # Output results
          if [[ ${#UNUSED_KEYS[@]} -gt 0 ]]; then
            echo "🛑 Found ${#UNUSED_KEYS[@]} unused i18n keys:"
            echo "unused_keys=$(echo "${UNUSED_KEYS[@]}" | jq -R -s -c 'split(" ")')" >> $GITHUB_ENV
            for KEY in "${UNUSED_KEYS[@]}"; do
              echo "::warning title=Unused i18n Key::'$KEY' is defined but not used in the codebase."
            done
          else
            echo "✅ No unused i18n keys detected!"
            echo "unused_keys=[]" >> $GITHUB_ENV
          fi

      - name: Post verified comment on PR
        if: env.unused_keys != '[]'
        run: |
          PR_NUMBER=$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH")

          # Format the unused keys list as checkboxes for easy manual checking.
          FILTERED_KEYS=$(echo "$unused_keys" | jq -r '.[]' | grep -v '^\s*$' | sed 's/^/- [ ] `/;s/$/`/' )

          COMMENT_BODY=$(cat <<EOF
          ### 🚨 Unused i18next Keys Detected

          The following translation keys are defined in \`translation.json\` but are **not used** in the codebase:

          $FILTERED_KEYS

          ⚠️ **Please remove these unused keys to keep the translation files clean.**
          EOF
          )

          gh api "repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" \
            -f body="$COMMENT_BODY" \
            -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Fail workflow if unused keys found
        if: env.unused_keys != '[]'
        run: exit 1