Files
claude-desktop-debian/tests/test-artifact-deb.sh
Sum Abiut 820b022fe0 fix: address PR #338 review feedback
- Remove workflow_dispatch trigger (no artifacts on manual dispatch)
- Add nodejs npm to Ubuntu test dependencies
- Add explicit permissions: contents: read to workflow
- Replace echo|grep with [[ ]] pattern matching (4 instances)
- Drop ambiguous 2>&1 from install commands
- Use (( ++ )) arithmetic style in test helpers
2026-03-30 01:41:36 +11:00

114 lines
3.4 KiB
Bash

#!/usr/bin/env bash
# Integration tests for .deb package artifacts
artifact_dir="${1:?Usage: $0 <artifact-dir>}"
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=tests/test-artifact-common.sh
source "$script_dir/test-artifact-common.sh"
# Find the .deb file
deb_file=$(find "$artifact_dir" -name '*.deb' -type f | head -1)
if [[ -z $deb_file ]]; then
fail "No .deb file found in $artifact_dir"
print_summary
fi
pass "Found deb: $(basename "$deb_file")"
# --- Package metadata ---
pkg_info=$(dpkg-deb -I "$deb_file")
if [[ $pkg_info == *'Package: claude-desktop'* ]]; then
pass "Package name is claude-desktop"
else
fail "Package name is not claude-desktop"
fi
if [[ $pkg_info == *'Architecture: amd64'* ]]; then
pass "Architecture is amd64"
else
fail "Architecture is not amd64"
fi
if [[ $pkg_info == *'Version:'* ]]; then
pass "Version field present"
else
fail "Version field missing"
fi
# --- Install the package ---
# Use --force-depends since we only care about file placement
if sudo dpkg -i --force-depends "$deb_file"; then
pass "dpkg -i succeeded"
else
fail "dpkg -i failed"
fi
# --- File existence checks ---
assert_executable '/usr/bin/claude-desktop'
assert_file_exists '/usr/share/applications/claude-desktop.desktop'
assert_dir_exists '/usr/lib/claude-desktop'
assert_file_exists '/usr/lib/claude-desktop/launcher-common.sh'
# Electron binary
electron_path='/usr/lib/claude-desktop/node_modules/electron/dist/electron'
assert_file_exists "$electron_path"
assert_executable "$electron_path"
# chrome-sandbox
assert_file_exists \
'/usr/lib/claude-desktop/node_modules/electron/dist/chrome-sandbox'
# --- Desktop entry validation ---
desktop_file='/usr/share/applications/claude-desktop.desktop'
assert_contains "$desktop_file" 'Exec=/usr/bin/claude-desktop' \
"Desktop entry Exec field correct"
assert_contains "$desktop_file" 'Type=Application' \
"Desktop entry Type field correct"
assert_contains "$desktop_file" 'Icon=claude-desktop' \
"Desktop entry Icon field correct"
# Validate desktop file syntax if tool available
if command -v desktop-file-validate &>/dev/null; then
assert_command_succeeds "desktop-file-validate passes" \
desktop-file-validate "$desktop_file"
fi
# --- Icons ---
icon_dir='/usr/share/icons/hicolor'
icon_found=false
for size in 16 24 32 48 64 256; do
if [[ -f "$icon_dir/${size}x${size}/apps/claude-desktop.png" ]]; then
icon_found=true
fi
done
if [[ $icon_found == true ]]; then
pass "At least one icon installed in hicolor"
else
fail "No icons found in hicolor"
fi
# --- Launcher script content ---
assert_contains '/usr/bin/claude-desktop' 'launcher-common.sh' \
"Launcher sources launcher-common.sh"
assert_contains '/usr/bin/claude-desktop' 'run_doctor' \
"Launcher references run_doctor"
assert_contains '/usr/bin/claude-desktop' 'build_electron_args' \
"Launcher calls build_electron_args"
# --- App contents (asar) ---
resources_dir='/usr/lib/claude-desktop/node_modules/electron/dist/resources'
validate_app_contents "$resources_dir"
# --- Doctor smoke test ---
# --doctor checks system state; some checks will fail in CI (no display,
# etc.) but the script itself should not crash with signal or 127.
doctor_exit=0
/usr/bin/claude-desktop --doctor >/dev/null 2>&1 || doctor_exit=$?
if [[ $doctor_exit -lt 127 ]]; then
pass "--doctor runs without crashing (exit: $doctor_exit)"
else
fail "--doctor crashed (exit: $doctor_exit)"
fi
print_summary