From 80ada641706c721c80d31a84b806a4d1ceae05e2 Mon Sep 17 00:00:00 2001 From: Christian Schilling Date: Wed, 10 Dec 2025 15:42:25 +0000 Subject: [PATCH] New josh based build sandbox --- r/build | 38 ++++++++++++++++++++++++++++++++++++++ r/josh.josh | 23 +++++++++++++++++++++++ r/run.sh | 12 ++++++++++++ 3 files changed, 73 insertions(+) create mode 100755 r/build create mode 100644 r/josh.josh create mode 100644 r/run.sh diff --git a/r/build b/r/build new file mode 100755 index 000000000..feacdef25 --- /dev/null +++ b/r/build @@ -0,0 +1,38 @@ +#!/bin/bash +set -e + +TREE=$(git write-tree) +COMMIT=$(echo "WIP" | git commit-tree $TREE) +git update-ref R_HEAD $COMMIT + +git diff --stat HEAD..R_HEAD + +josh-filter :+r/$1:/build --update refs/r/$1/build R_HEAD +josh-filter :+r/$1:/run --update refs/r/$1/run R_HEAD + +IMAGE_NAME=r-image:$(git rev-parse refs/r/$1/build^{tree}) +if docker image inspect $IMAGE_NAME >/dev/null 2>&1; then + echo "Image exists locally" +else + echo "Image does not exist locally" + git archive --format=tar $(git rev-parse refs/r/$1/build^{tree}) | docker buildx build \ + --target=dev-local \ + --build-arg USER_UID=$(id -u) \ + --build-arg USER_GID=$(id -g) \ + -t $IMAGE_NAME - +fi + +vol=$1_snapshot +docker volume remove "$vol" || true +docker volume create "$vol" +docker run --rm -v "$vol":/data busybox sh -c "chown -R $(id -u):$(id -g) /data" + +git archive $(git rev-parse refs/r/$1/run^{tree}) | docker run --rm --user $(id -u):$(id -g) -i -v "$vol":/dst busybox tar -xC /dst + +docker run -it --rm \ + -v "$vol":$PWD \ + -v "$PWD/tests:$PWD/tests" \ + -v rcache:/opt/cache \ + -w $PWD \ + --user $(id -u):$(id -g) \ + $IMAGE_NAME sh -c "bash run.sh ${*:2}" diff --git a/r/josh.josh b/r/josh.josh new file mode 100644 index 000000000..34cd5c28e --- /dev/null +++ b/r/josh.josh @@ -0,0 +1,23 @@ +build = :[ + ::Dockerfile + ::docker/ + ::lfs-test-server/ +] +run = :[ + :/r::run.sh + ::run-tests.sh + ::**/*.toml + ::*.toml + ::hyper-reverse-proxy/ + ::hyper_cgi/ + ::josh-cli/ + ::josh-core/ + ::josh-filter/ + ::josh-graphql/ + ::josh-proxy/ + ::josh-rpc/ + ::josh-ssh-dev-server/ + ::josh-ssh-shell/ + ::josh-templates/ + ::josh-ui/ +] diff --git a/r/run.sh b/r/run.sh new file mode 100644 index 000000000..c1c2e5f8a --- /dev/null +++ b/r/run.sh @@ -0,0 +1,12 @@ +set -e + +if [[ ! -v CARGO_TARGET_DIR ]]; then + echo "CARGO_TARGET_DIR not set" + exit 1 +fi + +export RUSTFLAGS="-D warnings" +rustc -vV +cargo build --workspace --exclude josh-ui --features hyper_cgi/test-server -v +( cd josh-ssh-dev-server ; go build -o "\${CARGO_TARGET_DIR}/josh-ssh-dev-server" ) +sh run-tests.sh ${@:1:99}