From 50a052df9af5ba13f482e3215cd59f455e946f1f Mon Sep 17 00:00:00 2001 From: ju6ge Date: Thu, 25 Sep 2025 22:30:41 +0200 Subject: [PATCH] setup cargo run to use containerized build tools that are not rust tools --- bin/esp-plant-dev-tools.Containerfile | 4 +++- bin/npm | 29 +++++++++++++++++++++++++++ bin/npx | 29 +++++++++++++++++++++++++++ rust/.cargo/config.toml | 1 + rust/build.rs | 5 ++++- rust/src/webserver/.gitignore | 2 ++ rust/src_webpack/.gitignore | 2 ++ 7 files changed, 70 insertions(+), 2 deletions(-) create mode 100755 bin/npm create mode 100755 bin/npx create mode 100644 rust/src/webserver/.gitignore create mode 100644 rust/src_webpack/.gitignore diff --git a/bin/esp-plant-dev-tools.Containerfile b/bin/esp-plant-dev-tools.Containerfile index 4aaa8ce..53a0507 100644 --- a/bin/esp-plant-dev-tools.Containerfile +++ b/bin/esp-plant-dev-tools.Containerfile @@ -1,6 +1,6 @@ FROM debian:latest -RUN apt update -y && apt upgrade -y && apt install unzip curl xz-utils nodejs npm -y +RUN apt update -y && apt upgrade -y && apt install unzip curl xz-utils nodejs -y RUN cd /root && \ curl -L -o xpack-riscv-toolchain.tar.gz "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v14.2.0-3/xpack-riscv-none-elf-gcc-14.2.0-3-linux-x64.tar.gz" && \ @@ -12,3 +12,5 @@ RUN cd /root && \ mv xpack-toolchain/libexec /usr/local && \ mv xpack-toolchain/riscv-none-elf /usr/local && \ rm -rf xpack-toolchain xpack-riscv-toolchain.tar.gz + +RUN apt install npm -y diff --git a/bin/npm b/bin/npm new file mode 100755 index 0000000..1b136c8 --- /dev/null +++ b/bin/npm @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CONTAINER_IMAGE="localhost/esp-plant-dev-tools:latest" +CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")" +PLANTCTL_PROJECT_DIR="$(readlink -f "$CONTAINER_TOOLS_BASEDIR/..")" + +function _fatal { + echo -e "\e[31mERROR\e[0m $(&2 + exit 1 +} + +declare -a PODMAN_ARGS=( + "--rm" "-i" "--log-driver=none" + "-v" "$PLANTCTL_PROJECT_DIR:$PLANTCTL_PROJECT_DIR:rw" + "-v" "$PWD:$PWD:rw" + "-w" "$PWD" +) + +[[ -t 1 ]] && PODMAN_ARGS+=("-t") + +if ! podman image exists "$CONTAINER_IMAGE"; then + #attempt to build container + "$CONTAINER_TOOLS_BASEDIR/build-esp-plant-dev-tools.sh" 1>&2 || + _fatal "faild to build local image, cannot continue! … please ensure you have an internet connection" +fi + +podman run "${PODMAN_ARGS[@]}" --entrypoint npm "$CONTAINER_IMAGE" "$@" diff --git a/bin/npx b/bin/npx new file mode 100755 index 0000000..70b2ded --- /dev/null +++ b/bin/npx @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -euo pipefail + +CONTAINER_IMAGE="localhost/esp-plant-dev-tools:latest" +CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")" +PLANTCTL_PROJECT_DIR="$(readlink -f "$CONTAINER_TOOLS_BASEDIR/..")" + +function _fatal { + echo -e "\e[31mERROR\e[0m $(&2 + exit 1 +} + +declare -a PODMAN_ARGS=( + "--rm" "-i" "--log-driver=none" + "-v" "$PLANTCTL_PROJECT_DIR:$PLANTCTL_PROJECT_DIR:rw" + "-v" "$PWD:$PWD:rw" + "-w" "$PWD" +) + +[[ -t 1 ]] && PODMAN_ARGS+=("-t") + +if ! podman image exists "$CONTAINER_IMAGE"; then + #attempt to build container + "$CONTAINER_TOOLS_BASEDIR/build-esp-plant-dev-tools.sh" 1>&2 || + _fatal "faild to build local image, cannot continue! … please ensure you have an internet connection" +fi + +podman run "${PODMAN_ARGS[@]}" --entrypoint npx "$CONTAINER_IMAGE" "$@" diff --git a/rust/.cargo/config.toml b/rust/.cargo/config.toml index 94709f7..c6b24af 100644 --- a/rust/.cargo/config.toml +++ b/rust/.cargo/config.toml @@ -23,6 +23,7 @@ runner = "espflash flash --monitor --chip esp32c6 --baud 921600 --partition-tabl CHRONO_TZ_TIMEZONE_FILTER = "UTC|America/New_York|America/Chicago|America/Los_Angeles|Europe/London|Europe/Berlin|Europe/Paris|Asia/Tokyo|Asia/Shanghai|Asia/Kolkata|Australia/Sydney|America/Sao_Paulo|Africa/Johannesburg|Asia/Dubai|Pacific/Auckland" CARGO_WORKSPACE_DIR = { value = "", relative = true } ESP_LOG = "info" +PATH = { value = "../bin:/usr/bin:/usr/local/bin", force = true, relative = true } diff --git a/rust/build.rs b/rust/build.rs index 05b5381..735bf51 100644 --- a/rust/build.rs +++ b/rust/build.rs @@ -1,4 +1,4 @@ -use std::process::Command; +use std::{collections::VecDeque, env, process::Command}; use vergen::EmitBuilder; @@ -50,6 +50,9 @@ fn linker_be_nice() { } fn main() { + if Command::new("podman").arg("--version").output().is_err() { + println!("Could not find `podman` installation, assuming the developer has setup all required tool for build manually! … ") + } webpack(); linker_be_nice(); let _ = EmitBuilder::builder().all_git().all_build().emit(); diff --git a/rust/src/webserver/.gitignore b/rust/src/webserver/.gitignore new file mode 100644 index 0000000..9575afe --- /dev/null +++ b/rust/src/webserver/.gitignore @@ -0,0 +1,2 @@ +index.html.gz +bundle.js.gz diff --git a/rust/src_webpack/.gitignore b/rust/src_webpack/.gitignore new file mode 100644 index 0000000..059549f --- /dev/null +++ b/rust/src_webpack/.gitignore @@ -0,0 +1,2 @@ +bundle.js +index.html