You've already forked glider
mirror of
https://gitlab.com/zephray/glider.git
synced 2026-08-27 23:26:14 +00:00
120 lines
6.0 KiB
Bash
Executable File
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"
|