اضافه شدن ورک فلو برد تستی
flash-aminpa-V1.5 / Production flash - Amin Pardaz Asia v1.5 (push) Successful in 7m15s
flash-aminpa-V1.5 / Production flash - Amin Pardaz Asia v1.5 (push) Successful in 7m15s
This commit is contained in:
@@ -0,0 +1,65 @@
|
|||||||
|
name: flash-aminpa-V1.5
|
||||||
|
# Production flash for Amin Pardaz Asia device v1.5
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: aminpa-serial-flash
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
flash-aminpa:
|
||||||
|
name: Production flash - Amin Pardaz Asia v1.5
|
||||||
|
runs-on: serial-runner
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Validate all firmware files before erasing flash
|
||||||
|
run: |
|
||||||
|
/usr/bin/python3 - <<'PY'
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
required = {
|
||||||
|
"u-boot-sunxi-with-spl.bin": 32,
|
||||||
|
"sun8i-v3s-licheepi-zero-dock.dtb": 32,
|
||||||
|
"zImage": 64,
|
||||||
|
"rootfs.squashfs": 64,
|
||||||
|
}
|
||||||
|
for filename, minimum in required.items():
|
||||||
|
path = Path("firmware") / filename
|
||||||
|
if not path.is_file() or path.stat().st_size < minimum:
|
||||||
|
raise SystemExit(f"Missing or invalid firmware: {path}")
|
||||||
|
print(f"Found {path}: {path.stat().st_size} bytes")
|
||||||
|
PY
|
||||||
|
|
||||||
|
- name: Check current U-Boot CLI
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py check
|
||||||
|
|
||||||
|
- name: Configure and verify network
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py configure
|
||||||
|
|
||||||
|
- name: Check all firmware sizes against detected flash layout
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py preflight
|
||||||
|
|
||||||
|
- name: Erase detected SPI flash and verify sample
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py erase
|
||||||
|
|
||||||
|
- name: Transfer, write and verify U-Boot
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py transfer
|
||||||
|
|
||||||
|
- name: Transfer, write and verify DTB
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py transfer-dtb
|
||||||
|
|
||||||
|
- name: Transfer, write and verify Kernel
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py transfer-kernel
|
||||||
|
|
||||||
|
- name: Transfer, write and verify RootFS
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py transfer-rootfs
|
||||||
|
|
||||||
|
- name: Inspect boot configuration
|
||||||
|
run: /usr/bin/python3 scripts/serial_command.py boot-config
|
||||||
@@ -199,7 +199,7 @@ def boot_config(cli, confirmed=False):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("mode", choices=("check", "configure", "transfer", "transfer-dtb", "transfer-kernel", "transfer-rootfs", "erase", "boot-config"), default="check", nargs="?")
|
parser.add_argument("mode", choices=("check", "configure", "transfer", "transfer-dtb", "transfer-kernel", "transfer-rootfs", "erase", "boot-config", "preflight"), default="check", nargs="?")
|
||||||
parser.add_argument("--port", default="/dev/ttyUSB0")
|
parser.add_argument("--port", default="/dev/ttyUSB0")
|
||||||
parser.add_argument("--firmware", type=Path, default=None)
|
parser.add_argument("--firmware", type=Path, default=None)
|
||||||
parser.add_argument("--rootfs-size", type=lambda value: int(value, 0), help="Actual RootFS partition size in bytes (decimal or 0x-prefixed hex)")
|
parser.add_argument("--rootfs-size", type=lambda value: int(value, 0), help="Actual RootFS partition size in bytes (decimal or 0x-prefixed hex)")
|
||||||
@@ -218,6 +218,18 @@ def main():
|
|||||||
cli.detect()
|
cli.detect()
|
||||||
if args.mode == "check":
|
if args.mode == "check":
|
||||||
return
|
return
|
||||||
|
if args.mode == "preflight":
|
||||||
|
capacity = detect_flash(cli)
|
||||||
|
files = {"uboot": "u-boot-sunxi-with-spl.bin", "dtb": "sun8i-v3s-licheepi-zero-dock.dtb",
|
||||||
|
"kernel": "zImage", "rootfs": "rootfs.squashfs"}
|
||||||
|
for part, filename in files.items():
|
||||||
|
path = Path(__file__).resolve().parent.parent / "firmware" / filename
|
||||||
|
minimum = 64 if part in ("kernel", "rootfs") else 32
|
||||||
|
limit = LAYOUTS[capacity][part][1]
|
||||||
|
if not path.is_file() or not minimum <= path.stat().st_size <= limit:
|
||||||
|
raise RuntimeError(f"Firmware missing or outside selected partition size: {path} (maximum {limit:#x})")
|
||||||
|
print("All firmware sizes fit the detected flash layout.")
|
||||||
|
return
|
||||||
if args.mode == "erase":
|
if args.mode == "erase":
|
||||||
erase_flash(cli)
|
erase_flash(cli)
|
||||||
return
|
return
|
||||||
|
|||||||
مرجع در شماره جدید
مسدود کردن کاربر