126 lines
3.5 KiB
Bash
126 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
#
|
|
# Copyright (C) 2024 OpenAni and contributors.
|
|
#
|
|
# 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
# Use of this source code is governed by the GNU AGPLv3 license, which can be found at the following link.
|
|
#
|
|
# https://github.com/open-ani/ani/blob/main/LICENSE
|
|
#
|
|
|
|
# This script either:
|
|
# - extracts a DMG directly, OR
|
|
# - extracts a ZIP that contains a DMG, then extracts that DMG.
|
|
#
|
|
# Finally, it sets ANIMEKO_DESKTOP_TEST_TASK and runs Ani.app.
|
|
#
|
|
# USAGE:
|
|
# ./run-ani-test-macos-aarch64.sh <path-to-dmg-or-zip> <test-string>
|
|
#
|
|
# Example:
|
|
# ./run-ani-test-macos-aarch64.sh /path/to/file.zip "SOME_TEST"
|
|
# ./run-ani-test-macos-aarch64.sh /path/to/file.dmg "SOME_TEST"
|
|
|
|
set -e # Exit immediately on error
|
|
|
|
# --- Step 0: Check arguments ---
|
|
if [ $# -ne 2 ]; then
|
|
echo "Usage: $0 <path-to-dmg-or-zip> <test-string>"
|
|
exit 1
|
|
fi
|
|
|
|
INPUT_PATH="$1"
|
|
TEST_STRING="$2"
|
|
|
|
# --- Step 1: Cleanup old extraction directories ---
|
|
echo "Step 1: Cleaning up old extraction folders..."
|
|
rm -rf extracted_zip extracted_dmg
|
|
|
|
# --- Step 2: Distinguish between ZIP vs. DMG ---
|
|
FILE_BASENAME="$(basename "$INPUT_PATH")"
|
|
FILE_EXTENSION="${FILE_BASENAME##*.}"
|
|
|
|
if [ ! -f "$INPUT_PATH" ]; then
|
|
echo "Error: No file found at $INPUT_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
DMG_PATH=""
|
|
|
|
if [ "$FILE_EXTENSION" == "zip" ]; then
|
|
echo "Step 2: Detected a ZIP file. Extracting..."
|
|
|
|
# Create a folder to unzip into
|
|
mkdir -p extracted_zip
|
|
# You can use 'unzip' or '7z' to extract the zip
|
|
7z x "$INPUT_PATH" -oextracted_zip
|
|
|
|
# Find the single DMG inside extracted_zip
|
|
FOUND_DMGS=($(find extracted_zip -type f -iname '*.dmg'))
|
|
|
|
if [ ${#FOUND_DMGS[@]} -eq 0 ]; then
|
|
echo "Error: No .dmg file found inside the zip!"
|
|
exit 1
|
|
elif [ ${#FOUND_DMGS[@]} -gt 1 ]; then
|
|
echo "Warning: More than one .dmg file found. Using the first one."
|
|
fi
|
|
|
|
DMG_PATH="${FOUND_DMGS[0]}"
|
|
echo "Found DMG at: $DMG_PATH"
|
|
|
|
elif [ "$FILE_EXTENSION" == "dmg" ]; then
|
|
echo "Step 2: Detected a DMG file."
|
|
DMG_PATH="$INPUT_PATH"
|
|
|
|
else
|
|
echo "Error: The file must be either .zip or .dmg. Detected extension: $FILE_EXTENSION"
|
|
exit 1
|
|
fi
|
|
|
|
# --- Step 3: Extract the DMG contents with 7z ---
|
|
echo "Step 3: Extracting DMG with 7z..."
|
|
mkdir -p extracted_dmg
|
|
7z x "$DMG_PATH" -oextracted_dmg
|
|
|
|
# --- Step 4: Set environment variable for the test ---
|
|
echo "Step 4: Setting ANIMEKO_DESKTOP_TEST_TASK to '$TEST_STRING'..."
|
|
export ANIMEKO_DESKTOP_TEST_TASK="$TEST_STRING"
|
|
|
|
# The final Ani.app is likely found at:
|
|
# extracted_dmg/Ani/Ani.app/Contents/MacOS/Ani
|
|
# or
|
|
# extracted_dmg/Ani.app/Contents/MacOS/Ani
|
|
# Adjust as necessary based on your actual structure.
|
|
ANI_BINARY="extracted_dmg/Ani/Ani.app/Contents/MacOS/Ani"
|
|
if [ ! -f "$ANI_BINARY" ]; then
|
|
# Fallback check in case there's no top-level "Ani" folder:
|
|
ANI_BINARY_FALLBACK="extracted_dmg/Ani.app/Contents/MacOS/Ani"
|
|
if [ -f "$ANI_BINARY_FALLBACK" ]; then
|
|
ANI_BINARY="$ANI_BINARY_FALLBACK"
|
|
else
|
|
echo "Error: Could not find Ani binary at either:"
|
|
echo " $ANI_BINARY"
|
|
echo " $ANI_BINARY_FALLBACK"
|
|
ls -R extracted_dmg || true
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "Ani binary found at: $ANI_BINARY"
|
|
echo "Making it executable..."
|
|
chmod +x "$ANI_BINARY"
|
|
|
|
# --- Step 5: Run Ani.app and capture exit code ---
|
|
echo "Step 5: Running Ani..."
|
|
"$ANI_BINARY"
|
|
EXIT_CODE=$?
|
|
|
|
if [ "$EXIT_CODE" -ne 0 ]; then
|
|
echo "Error: Ani exited with non-zero code: $EXIT_CODE"
|
|
exit $EXIT_CODE
|
|
fi
|
|
|
|
echo "Success: Ani exited normally (code 0)."
|
|
exit 0
|