diff --git a/.gitea/workflows/boot-config.yml b/.gitea/workflows/boot-config.yml index fab89d3..6b286ed 100644 --- a/.gitea/workflows/boot-config.yml +++ b/.gitea/workflows/boot-config.yml @@ -22,7 +22,7 @@ jobs: CONFIRM_SQUASHFS_MTDBLOCK3: ${{ inputs.confirm_squashfs_mtdblock3 }} run: | if [ "$CONFIRM_SQUASHFS_MTDBLOCK3" = "true" ]; then - /usr/bin/python3 scripts/serial_command.py boot-config --confirm-squashfs-mtdblock3 + /usr/bin/python3 deployment/serial/serial_command.py boot-config --confirm-squashfs-mtdblock3 else - /usr/bin/python3 scripts/serial_command.py boot-config + /usr/bin/python3 deployment/serial/serial_command.py boot-config fi diff --git a/.gitea/workflows/bootcmd.yml b/.gitea/workflows/bootcmd.yml index 1d6f7ff..d8e4c89 100644 --- a/.gitea/workflows/bootcmd.yml +++ b/.gitea/workflows/bootcmd.yml @@ -12,4 +12,4 @@ jobs: uses: actions/checkout@v4 - name: Detect flash, set bootcmd and verify - run: /usr/bin/python3 scripts/serial_command.py set-bootcmd + run: /usr/bin/python3 deployment/serial/serial_command.py set-bootcmd diff --git a/.gitea/workflows/dtb-transfer.yml b/.gitea/workflows/dtb-transfer.yml index 83924ee..7ebcc07 100644 --- a/.gitea/workflows/dtb-transfer.yml +++ b/.gitea/workflows/dtb-transfer.yml @@ -13,4 +13,4 @@ jobs: - name: Transfer DTB, write SPI flash and verify read-back run: | - /usr/bin/python3 scripts/serial_command.py transfer-dtb + /usr/bin/python3 deployment/serial/serial_command.py transfer-dtb diff --git a/.gitea/workflows/flash-aminpa-V1.5.yml b/.gitea/workflows/flash-aminpa-V1.5.yml index 5500cfb..da647a4 100644 --- a/.gitea/workflows/flash-aminpa-V1.5.yml +++ b/.gitea/workflows/flash-aminpa-V1.5.yml @@ -38,41 +38,41 @@ jobs: PY - name: Check current U-Boot CLI - run: /usr/bin/python3 scripts/serial_command.py check + run: /usr/bin/python3 deployment/serial/serial_command.py check - name: Configure and verify network env: UBOOT_DEVICE_IP: ${{ vars.UBOOT_DEVICE_IP || '192.168.75.100' }} TFTP_SERVER_IP: ${{ vars.TFTP_SERVER_IP || '192.168.75.247' }} run: | - /usr/bin/python3 scripts/serial_command.py configure --device-ip "$UBOOT_DEVICE_IP" --tftp-server-ip "$TFTP_SERVER_IP" + /usr/bin/python3 deployment/serial/serial_command.py configure --device-ip "$UBOOT_DEVICE_IP" --tftp-server-ip "$TFTP_SERVER_IP" - name: Check all firmware sizes against detected flash layout - run: /usr/bin/python3 scripts/serial_command.py preflight + run: /usr/bin/python3 deployment/serial/serial_command.py preflight - name: Erase detected SPI flash and verify sample - run: /usr/bin/python3 scripts/serial_command.py erase + run: /usr/bin/python3 deployment/serial/serial_command.py erase - name: Transfer, write and verify U-Boot - run: /usr/bin/python3 scripts/serial_command.py transfer + run: /usr/bin/python3 deployment/serial/serial_command.py transfer - name: Transfer, write and verify DTB - run: /usr/bin/python3 scripts/serial_command.py transfer-dtb + run: /usr/bin/python3 deployment/serial/serial_command.py transfer-dtb - name: Transfer, write and verify Kernel - run: /usr/bin/python3 scripts/serial_command.py transfer-kernel + run: /usr/bin/python3 deployment/serial/serial_command.py transfer-kernel - name: Transfer, write and verify RootFS - run: /usr/bin/python3 scripts/serial_command.py transfer-rootfs + run: /usr/bin/python3 deployment/serial/serial_command.py transfer-rootfs - name: Inspect boot configuration - run: /usr/bin/python3 scripts/serial_command.py boot-config + run: /usr/bin/python3 deployment/serial/serial_command.py boot-config - name: Configure and verify bootcmd for detected flash - run: /usr/bin/python3 scripts/serial_command.py set-bootcmd + run: /usr/bin/python3 deployment/serial/serial_command.py set-bootcmd - name: Save U-Boot environment before reboot - run: /usr/bin/python3 scripts/serial_command.py saveenv + run: /usr/bin/python3 deployment/serial/serial_command.py saveenv - name: Reboot hardware after successful flashing - run: /usr/bin/python3 scripts/serial_command.py reboot + run: /usr/bin/python3 deployment/serial/serial_command.py reboot diff --git a/.gitea/workflows/flash-erase.yml b/.gitea/workflows/flash-erase.yml index 414466f..e6ae62f 100644 --- a/.gitea/workflows/flash-erase.yml +++ b/.gitea/workflows/flash-erase.yml @@ -13,4 +13,4 @@ jobs: - name: Erase entire flash and verify first 256 bytes run: | - /usr/bin/python3 scripts/serial_command.py erase + /usr/bin/python3 deployment/serial/serial_command.py erase diff --git a/.gitea/workflows/kernel-transfer.yml b/.gitea/workflows/kernel-transfer.yml index fad854a..27e714f 100644 --- a/.gitea/workflows/kernel-transfer.yml +++ b/.gitea/workflows/kernel-transfer.yml @@ -13,4 +13,4 @@ jobs: - name: Transfer Kernel, write SPI flash and verify read-back run: | - /usr/bin/python3 scripts/serial_command.py transfer-kernel + /usr/bin/python3 deployment/serial/serial_command.py transfer-kernel diff --git a/.gitea/workflows/rootfs-transfer.yml b/.gitea/workflows/rootfs-transfer.yml index f36911a..d253615 100644 --- a/.gitea/workflows/rootfs-transfer.yml +++ b/.gitea/workflows/rootfs-transfer.yml @@ -13,4 +13,4 @@ jobs: - name: Detect flash, transfer RootFS and verify read-back run: | - /usr/bin/python3 scripts/serial_command.py transfer-rootfs + /usr/bin/python3 deployment/serial/serial_command.py transfer-rootfs diff --git a/.gitea/workflows/serial.yml b/.gitea/workflows/serial.yml index cf03a61..83e4b16 100644 --- a/.gitea/workflows/serial.yml +++ b/.gitea/workflows/serial.yml @@ -13,4 +13,4 @@ jobs: - name: Check current U-Boot CLI prompt run: | - /usr/bin/python3 scripts/serial_command.py check + /usr/bin/python3 deployment/serial/serial_command.py check diff --git a/.gitea/workflows/software-test-aminpa-V1.5.yml b/.gitea/workflows/software-test-aminpa-V1.5.yml index f76350c..46ced4e 100644 --- a/.gitea/workflows/software-test-aminpa-V1.5.yml +++ b/.gitea/workflows/software-test-aminpa-V1.5.yml @@ -27,4 +27,4 @@ jobs: TEST_HOST_IP: ${{ vars.TEST_HOST_IP || '192.168.75.15' }} TEST_DEVICE_IP: ${{ vars.TEST_DEVICE_IP }} run: | - /usr/bin/python3 scripts/software_test.py --interface "$TEST_INTERFACE" --host-ip "$TEST_HOST_IP" --device-ip "$TEST_DEVICE_IP" + /usr/bin/python3 deployment/serial/software_test.py --interface "$TEST_INTERFACE" --host-ip "$TEST_HOST_IP" --device-ip "$TEST_DEVICE_IP" diff --git a/.gitea/workflows/uboot-setup.yml b/.gitea/workflows/uboot-setup.yml index c12332b..e64d2ba 100644 --- a/.gitea/workflows/uboot-setup.yml +++ b/.gitea/workflows/uboot-setup.yml @@ -16,4 +16,4 @@ jobs: UBOOT_DEVICE_IP: ${{ vars.UBOOT_DEVICE_IP || '192.168.75.100' }} TFTP_SERVER_IP: ${{ vars.TFTP_SERVER_IP || '192.168.75.247' }} run: | - /usr/bin/python3 scripts/serial_command.py configure --device-ip "$UBOOT_DEVICE_IP" --tftp-server-ip "$TFTP_SERVER_IP" + /usr/bin/python3 deployment/serial/serial_command.py configure --device-ip "$UBOOT_DEVICE_IP" --tftp-server-ip "$TFTP_SERVER_IP" diff --git a/.gitea/workflows/uboot-transfer.yml b/.gitea/workflows/uboot-transfer.yml index 28ec48d..3c726b1 100644 --- a/.gitea/workflows/uboot-transfer.yml +++ b/.gitea/workflows/uboot-transfer.yml @@ -13,4 +13,4 @@ jobs: - name: Transfer firmware, write SPI flash and verify read-back run: | - /usr/bin/python3 scripts/serial_command.py transfer + /usr/bin/python3 deployment/serial/serial_command.py transfer diff --git a/README.md b/README.md index 0c1942e..b69e05f 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ workflow تنظیم شبکه و workflow اصلی فلش از آن‌ها است نمونهٔ اجرای مستقیم: ```bash -/usr/bin/python3 scripts/serial_command.py configure \ +/usr/bin/python3 deployment/serial/serial_command.py configure \ --device-ip 192.168.75.100 \ --tftp-server-ip 192.168.75.247 ``` @@ -53,10 +53,21 @@ IP میزبان باید از قبل روی کارت شبکهٔ انتخاب‌ نمونهٔ اجرای دستی روی runner با جایگزین‌کردن IP واقعی دستگاه: ```bash -/usr/bin/python3 scripts/software_test.py \ +/usr/bin/python3 deployment/serial/software_test.py \ --interface eno1 \ --host-ip 192.168.75.15 \ --device-ip ``` برای محل فایل‌های firmware و نقشهٔ فلش، [راهنمای firmware](firmware/README.md) را ببینید. + +## ساختار استقرار + +اسکریپت‌های اجرایی در `deployment/serial/` قرار دارند: + +- `serial_command.py`: کنترل U-Boot، فلش و راه‌اندازی برد از طریق سریال. +- `software_test.py`: بررسی پاسخ ping دستگاه پس از بوت. + +workflowهای اصلی امین‌پرداز و ورودی‌های workflowهای کمکی در +`.gitea/workflows/` باقی می‌مانند و اسکریپت‌ها را از مسیر جدید اجرا می‌کنند. +فایل‌های باینری همچنان در پوشهٔ `firmware/` ریشهٔ مخزن قرار می‌گیرند. diff --git a/scripts/serial_command.py b/deployment/serial/serial_command.py similarity index 98% rename from scripts/serial_command.py rename to deployment/serial/serial_command.py index 7734d8f..48f1f9c 100644 --- a/scripts/serial_command.py +++ b/deployment/serial/serial_command.py @@ -224,7 +224,7 @@ def main(): args = parser.parse_args() if args.firmware is None: filename = "rootfs.squashfs" if args.mode == "transfer-rootfs" else "zImage" if args.mode == "transfer-kernel" else ("sun8i-v3s-licheepi-zero-dock.dtb" if args.mode == "transfer-dtb" else "u-boot-sunxi-with-spl.bin") - args.firmware = Path(__file__).resolve().parent.parent / "firmware" / filename + args.firmware = Path(__file__).resolve().parents[2] / "firmware" / filename if args.mode in ("transfer", "transfer-dtb", "transfer-kernel", "transfer-rootfs") and not args.firmware.is_file(): raise RuntimeError("Firmware file not found: " + str(args.firmware)) # Shared by both workflows: fail rather than interleave serial commands. @@ -250,7 +250,7 @@ def main(): 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 + path = Path(__file__).resolve().parents[2] / "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: diff --git a/scripts/software_test.py b/deployment/serial/software_test.py similarity index 100% rename from scripts/software_test.py rename to deployment/serial/software_test.py