From 77523c1b15599b8bd73f0c1e3ec647f65c19ab05 Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Sun, 8 Mar 2026 18:35:58 -0700 Subject: [PATCH] Patch up to use a published patched meshcore-decoder and add a test script for different node versions --- Dockerfile | 1 - frontend/AGENTS.md | 6 ++--- frontend/package.json | 4 ++-- scripts/docker_ci.sh | 51 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 scripts/docker_ci.sh diff --git a/Dockerfile b/Dockerfile index 4384131..5459660 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,6 @@ ARG COMMIT_HASH=unknown WORKDIR /build COPY frontend/package.json frontend/.npmrc ./ -COPY frontend/lib/meshcore-decoder ./lib/meshcore-decoder RUN npm install COPY frontend/ ./ diff --git a/frontend/AGENTS.md b/frontend/AGENTS.md index 2213080..490aba8 100644 --- a/frontend/AGENTS.md +++ b/frontend/AGENTS.md @@ -12,9 +12,9 @@ Keep it aligned with `frontend/src` source code. - Tailwind utility classes + local CSS (`index.css`, `styles.css`) - Sonner (toasts) - Leaflet / react-leaflet (map) -- Vendored `@michaelhart/meshcore-decoder` in `frontend/lib/meshcore-decoder` (local file dependency for multibyte-support build) +- `@michaelhart/meshcore-decoder` installed via npm alias to `meshcore-decoder-multibyte-patch` - `meshcore-hashtag-cracker` + `nosleep.js` (channel cracker) -- `@michaelhart/meshcore-decoder` pinned to the multibyte-aware `jkingsman/meshcore-decoder-multibyte` fork +- Multibyte-aware decoder build published as `meshcore-decoder-multibyte-patch` ## Frontend Map @@ -141,8 +141,6 @@ frontend/src/ ├── useWebSocket.dispatch.test.ts └── useWebSocket.lifecycle.test.ts -frontend/lib/ -└── meshcore-decoder/ # Vendored local decoder package used by app + hashtag cracker ``` ## Architecture Notes diff --git a/frontend/package.json b/frontend/package.json index b34cd02..07d7d8b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,7 +17,7 @@ "dependencies": { "@codemirror/lang-python": "^6.2.1", "@codemirror/theme-one-dark": "^6.1.3", - "@michaelhart/meshcore-decoder": "file:./lib/meshcore-decoder", + "@michaelhart/meshcore-decoder": "npm:meshcore-decoder-multibyte-patch@0.2.7", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-label": "^2.1.8", @@ -67,7 +67,7 @@ }, "overrides": { "meshcore-hashtag-cracker": { - "@michaelhart/meshcore-decoder": "file:./lib/meshcore-decoder" + "@michaelhart/meshcore-decoder": "npm:meshcore-decoder-multibyte-patch@0.2.7" } } } diff --git a/scripts/docker_ci.sh b/scripts/docker_ci.sh new file mode 100644 index 0000000..9c19ff8 --- /dev/null +++ b/scripts/docker_ci.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -euo pipefail + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" + +NODE_VERSIONS=("20" "22" "24") +NPM_VERSIONS=("9" "10") + +echo -e "${YELLOW}=== Frontend Docker CI Matrix ===${NC}" +echo -e "${BLUE}Repo:${NC} $SCRIPT_DIR" +echo + +run_combo() { + local node_version="$1" + local npm_version="$2" + local image="node:${node_version}-slim" + + echo -e "${YELLOW}=== Node ${node_version} / npm ${npm_version} ===${NC}" + + docker run --rm \ + -v "$SCRIPT_DIR:/src:ro" \ + -w /tmp \ + "$image" \ + bash -lc " + set -euo pipefail + cp -a /src/frontend ./frontend + cd frontend + npm i -g npm@${npm_version} + echo 'Using Node:' \$(node -v) + echo 'Using npm:' \$(npm -v) + npm install + npm run build + " + + echo -e "${GREEN}Passed:${NC} Node ${node_version} / npm ${npm_version}" + echo +} + +for node_version in "${NODE_VERSIONS[@]}"; do + for npm_version in "${NPM_VERSIONS[@]}"; do + run_combo "$node_version" "$npm_version" + done +done + +echo -e "${GREEN}=== Docker CI matrix passed ===${NC}"