4
mirror of https://gitlab.com/zephray/glider.git synced 2026-08-27 23:26:14 +00:00
Files
glider/scripts/tests/test_release_scripts.sh
2026-07-05 03:34:57 -04:00

120 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
fail() {
echo "FAIL: $*" >&2
exit 1
}
assert_file_contains() {
local path="$1"
local pattern="$2"
local label="$3"
if ! grep -Eq "$pattern" "$path"; then
fail "$label: '$path' does not contain pattern '$pattern'"
fi
}
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT
assert_file_contains "$REPO_ROOT/.gitmodules" 'path = Caster' "Caster submodule path"
assert_file_contains "$REPO_ROOT/.gitmodules" 'url = https://gitlab.com/zephray/Caster.git/?' "Caster submodule URL"
fake_bin="$tmpdir/bin"
mkdir -p "$fake_bin"
for tool in stm32cubeide ssh scp; do
printf '#!/usr/bin/env bash\nexit 0\n' >"$fake_bin/$tool"
chmod +x "$fake_bin/$tool"
done
release_log="$tmpdir/release.log"
release_root="$tmpdir/release"
(
export PATH="$fake_bin:$PATH"
export DRY_RUN=1
export RELEASE_DRY_RUN_LOG="$release_log"
export RELEASE_ROOT="$release_root"
"$REPO_ROOT/scripts/release.sh" --ise-host 192.168.56.101 0.1-task2
)
assert_file_contains "$release_log" "stm32cubeide .*org.eclipse.cdt.managedbuilder.core.headlessbuild .*glider_ec_rtos/Debug" "headless CubeIDE MCU build"
assert_file_contains "$release_log" "git -C .*/Glider submodule update --init --recursive" "recursive submodule update"
assert_file_contains "$release_log" "build_caster_ise_vm.sh --host 192.168.56.101 --source .*/Glider/Caster --out .*/0.1-task2/caster --variants 8bit-mono,8bit-k3,16bit-mono,16bit-k3" "single Caster VM build for all release variants"
assert_file_contains "$release_log" "package_release.sh 0.1-task2 .*/0.1-task2" "release packaging"
metadata="$release_root/0.1-task2/metadata.txt"
[[ -f "$metadata" ]] || fail "release metadata was not generated"
assert_file_contains "$metadata" '^version=0.1-task2$' "metadata version"
assert_file_contains "$metadata" '^glider_revision=[0-9a-f]{40}$' "metadata Glider revision"
assert_file_contains "$metadata" '^caster_revision=[0-9a-f]{40}$' "metadata Caster revision"
for variant in 8bit-mono 8bit-k3 16bit-mono 16bit-k3; do
assert_file_contains "$release_log" "cp .*/0.1-task2/caster/$variant/fpga.bit .*/0.1-task2/firmware/fpga-$variant.bit" "packaged bitstream for $variant"
assert_file_contains "$release_log" "cp .*/0.1-task2/caster/$variant/reports.tar.gz .*/0.1-task2/buildlog/02_reports-$variant.tar.gz" "preserved Caster reports for $variant"
done
for font in font_quicksand_16.bin font_quicksand_20.bin font_quicksand_28.bin; do
assert_file_contains "$release_log" "cp .*/utils/flash_tool/fonts/$font .*/0.1-task2/firmware/fonts/$font" "packaged checked-in $font"
done
if grep -Eq "generate_quicksand_fonts.py" "$release_log"; then
fail "release should not regenerate checked-in font binaries"
fi
assert_file_contains "$release_log" "make -C .*/utils/flash_tool/cfggen" "built cfggen for release configs"
assert_file_contains "$release_log" ".*/utils/flash_tool/cfggen/bin/cfggen 6 1448 1072 75 cvt-rb --out .*/0.1-task2/firmware/configs/config-6in.bin" "generated 6 inch CVT-RB config"
assert_file_contains "$release_log" ".*/utils/flash_tool/cfggen/bin/cfggen 13.3 1600 1200 75 cvt-rb2 --out .*/0.1-task2/firmware/configs/config-13in.bin" "generated 13 inch CVT-RBv2 config"
assert_file_contains "$release_log" "mv .*/0.1-task2/logs/01_mcu.log .*/0.1-task2/buildlog/01_mcu.log" "preserved MCU build log"
assert_file_contains "$release_log" "mv .*/0.1-task2/logs/03_package.log .*/0.1-task2/buildlog/03_package.log" "preserved package log"
assert_file_contains "$release_log" "rm -rf .*/0.1-task2/caster .*/0.1-task2/logs .*/0.1-task2/glider_ec_rtos_0.1-task2.bin" "removed intermediate release files"
if grep -Eq "cp .*/utils/flash_tool/font_24x40.bin .*/0.1-task2/flash_tool/font_24x40.bin" "$release_log"; then
fail "release should not package the legacy font_24x40.bin"
fi
if grep -Eq "cp .*/0.1-task2/caster/8bit-mono/fpga.bit .*/0.1-task2/firmware/fpga.bit" "$release_log"; then
fail "release should not package an ambiguous fpga.bit compatibility copy"
fi
if grep -Eq "/0\.1-task2/flash_tool/" "$release_log"; then
fail "release package should use firmware directory, not flash_tool"
fi
ise_vm_log="$tmpdir/ise-vm.log"
(
export DRY_RUN=1
"$REPO_ROOT/scripts/build_caster_ise_vm.sh" \
--host 192.168.56.101 \
--source "$REPO_ROOT/Caster" \
--out "$tmpdir/caster" \
--variant 8bit-mono
) >"$ise_vm_log"
assert_file_contains "$ise_vm_log" "sshpass -p xilinx ssh " "ISE VM helper passes default SSH password"
assert_file_contains "$ise_vm_log" "sshpass -p xilinx scp " "ISE VM helper passes default SCP password"
no_tool_log="$tmpdir/no-tool-mcu.log"
(
export PATH="/usr/bin:/bin"
export DRY_RUN=1
export RELEASE_DRY_RUN_LOG="$no_tool_log"
"$REPO_ROOT/scripts/build_mcu.sh" 0.1-task2 "$tmpdir/no-tool-release"
)
assert_file_contains "$no_tool_log" "stm32cubeide .*org.eclipse.cdt.managedbuilder.core.headlessbuild .*glider_ec_rtos/Debug" "dry-run MCU build without STM32CubeIDE installed"
dev_mcu_log="$tmpdir/dev-mcu.log"
(
export DRY_RUN=1
"$REPO_ROOT/scripts/dev_flash_mcu.sh"
) >"$dev_mcu_log" 2>&1
assert_file_contains "$dev_mcu_log" "build_mcu.sh dev .*/Glider/build/dev/mcu" "dev MCU script rebuilds firmware"
assert_file_contains "$dev_mcu_log" "dfu-util -a 0 -i 0 -s 0x08000000:leave -D .*/Glider/build/dev/mcu/glider_ec_rtos_dev.bin" "dev MCU script flashes built firmware"
dev_fpga_log="$tmpdir/dev-fpga.log"
(
export DRY_RUN=1
"$REPO_ROOT/scripts/dev_flash_fpga.sh" --ise-host 192.168.56.101 --variant 16bit-k3
) >"$dev_fpga_log" 2>&1
assert_file_contains "$dev_fpga_log" "build_caster_ise_vm.sh --host 192.168.56.101 --source .*/Glider/Caster --out .*/Glider/build/dev/caster/16bit-k3 --variant 16bit-k3" "dev FPGA script builds one variant"
assert_file_contains "$dev_fpga_log" "python3 .*/Glider/utils/flash_tool/flash.py --skip-mcu --bitstream .*/Glider/build/dev/caster/16bit-k3/fpga.bit --no-fonts --no-config" "dev FPGA script transfers only selected bitstream"
echo "PASS: Glider release dry-run"