Add smoke test to install and run SDRangel on Mac to check installers are built ok

This commit is contained in:
Jon Beniston
2026-08-20 10:11:21 +01:00
parent 513226d827
commit c43757c884
+116
View File
@@ -160,3 +160,119 @@ jobs:
uses: softprops/action-gh-release@v2
with:
files: ${{ github.workspace }}/build/${{ steps.get_filename.outputs.filename }}.dmg
smoke_test_mac:
name: Smoke test macOS ${{ matrix.arch }}
needs:
- build_mac_x64
- build_mac_arm64
strategy:
fail-fast: false
matrix:
include:
- arch: x64
runner: macos-15-intel
artifact_pattern: sdrangel-*-macx64.dmg
- arch: arm64
runner: macos-14
artifact_pattern: sdrangel-*-macarm64.dmg
runs-on: ${{ matrix.runner }}
steps:
- name: Download installer
uses: actions/download-artifact@v5
with:
pattern: ${{ matrix.artifact_pattern }}
path: ${{ runner.temp }}/installer
merge-multiple: true
- name: Install and launch SDRangel
shell: bash
run: |
set -Eeuo pipefail
DMG="$(find "$RUNNER_TEMP/installer" -type f -name '*.dmg' -print -quit)"
test -n "$DMG"
MOUNT="$RUNNER_TEMP/sdrangel-mount"
INSTALLED_APP="$RUNNER_TEMP/Applications/SDRangel.app"
LOG="$RUNNER_TEMP/sdrangel-smoke.log"
RESPONSE="$RUNNER_TEMP/sdrangel-response.json"
PID=""
cleanup() {
if [[ -n "$PID" ]] && kill -0 "$PID" 2>/dev/null; then
kill "$PID" 2>/dev/null || true
wait "$PID" 2>/dev/null || true
fi
if mount | grep -Fq "$MOUNT"; then
hdiutil detach "$MOUNT" -force || true
fi
}
trap cleanup EXIT
hdiutil verify "$DMG"
mkdir -p "$MOUNT" "$(dirname "$INSTALLED_APP")"
hdiutil attach "$DMG" -readonly -nobrowse -mountpoint "$MOUNT"
SOURCE_APP="$(find "$MOUNT" -maxdepth 2 -type d -name 'SDRangel.app' -print -quit)"
test -n "$SOURCE_APP"
ditto "$SOURCE_APP" "$INSTALLED_APP"
hdiutil detach "$MOUNT"
PLIST="$INSTALLED_APP/Contents/Info.plist"
plutil -lint "$PLIST"
EXECUTABLE_NAME="$(/usr/libexec/PlistBuddy \
-c 'Print :CFBundleExecutable' "$PLIST")"
EXECUTABLE="$INSTALLED_APP/Contents/MacOS/$EXECUTABLE_NAME"
test -x "$EXECUTABLE"
file "$EXECUTABLE"
mkdir -p "$RUNNER_TEMP/sdrangel-home"
HOME="$RUNNER_TEMP/sdrangel-home" \
"$EXECUTABLE" \
--scratch \
--api-address 127.0.0.1 \
--api-port 18091 \
>"$LOG" 2>&1 &
PID=$!
ready=false
for attempt in {1..60}; do
if ! kill -0 "$PID" 2>/dev/null; then
echo "SDRangel exited during startup"
cat "$LOG"
exit 1
fi
if curl --fail --silent --show-error \
http://127.0.0.1:18091/sdrangel \
>"$RESPONSE"; then
ready=true
break
fi
sleep 1
done
if [[ "$ready" != true ]]; then
echo "SDRangel Web API did not become ready"
cat "$LOG"
exit 1
fi
grep -Eq '"appname"[[:space:]]*:[[:space:]]*"SDRangel"' "$RESPONSE"
echo "SDRangel installed and started successfully"
- name: Upload startup log on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: mac-${{ matrix.arch }}-startup-log
path: ${{ runner.temp }}/sdrangel-smoke.log
if-no-files-found: ignore