Add CLI tooling to create seed fixtures on the fly

Signed-off-by: Sebastian Martinez <me@sebastinez.dev>
This commit is contained in:
Sebastian Martinez
2023-05-12 14:23:10 +02:00
parent 45c6f20855
commit c32b303744
20 changed files with 1073 additions and 458 deletions
-120
View File
@@ -1,120 +0,0 @@
#!/usr/bin/env bash
killall radicle-node
killall git-daemon
set -euo pipefail
export RAD_PASSPHRASE=asdf
REPO_ROOT=$(git rev-parse --show-toplevel)
ID=$(echo $RANDOM | md5sum | head -c 4)
BASE_PATH=$REPO_ROOT/tests/tmp/seed-fixture-$ID
TEST_REPO_ARCHIVE=$REPO_ROOT/tests/fixtures/repos/source-browsing.tar.bz2
TEST_REPO_NAME=source-browsing
TEST_REPO_PATH=$BASE_PATH/repos/$TEST_REPO_NAME
PALM_RAD_HOME=$BASE_PATH/seeds/palm
PALM_CHECKOUT=$BASE_PATH/checkout/palm
ALICE_RAD_HOME=$BASE_PATH/peers/alice
ALICE_CHECKOUT=$BASE_PATH/checkout/alice
BOB_RAD_HOME=$BASE_PATH/peers/bob
BOB_CHECKOUT=$BASE_PATH/checkout/bob
mkdir -p $PALM_RAD_HOME
mkdir -p $PALM_CHECKOUT
mkdir -p $ALICE_RAD_HOME
mkdir -p $ALICE_CHECKOUT
mkdir -p $BOB_RAD_HOME
mkdir -p $BOB_CHECKOUT
mkdir -p $TEST_REPO_PATH
tar -xf $TEST_REPO_ARCHIVE -C $TEST_REPO_PATH
### PALM NODE ###
eval $(ssh-agent)
export RAD_HOME=$PALM_RAD_HOME
export RAD_SEED=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee
rad auth
radicle-node --listen 0.0.0.0:3446 --git-daemon 0.0.0.0:4446 --tracking-policy track --tracking-scope all &
### ALICE ###
export RAD_HOME=$ALICE_RAD_HOME
export RAD_SEED=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
export GIT_AUTHOR_NAME="Alice Liddell"
export GIT_AUTHOR_EMAIL="alice@radicle.xyz"
export GIT_COMMITTER_NAME="Alice Liddell"
export GIT_COMMITTER_EMAIL="alice@radicle.xyz"
rad auth
cd $ALICE_CHECKOUT
git clone $TEST_REPO_PATH
cd $TEST_REPO_NAME
git checkout main
rad init --name "source-browsing" \
--description "Git repository for source browsing tests" \
--default-branch "main" \
--no-confirm
git checkout feature/branch
git push rad
git checkout orphaned-branch
git push rad
radicle-node --listen 0.0.0.0:3444 --git-daemon 0.0.0.0:4444 \
--connect z6Mkk7oqY4pPxhMmGEotDYsFo97vhCj85BLY1H256HrJmjN8@0.0.0.0:3446 &
sleep 1
### PALM CLONE ###
cd $PALM_CHECKOUT
export RAD_HOME=$PALM_RAD_HOME
rad clone rad:zKtT7DmF9H34KkvcKj9PHW19WzjT
### BOB ###
export GIT_AUTHOR_NAME="Bob Belcher"
export GIT_AUTHOR_EMAIL="bob@radicle.xyz"
export GIT_COMMITTER_NAME="Bob Belcher"
export GIT_COMMITTER_EMAIL="bob@radicle.xyz"
export GIT_COMMITTER_DATE="Mon Dec 21 14:00 2022 +0100"
export RAD_HOME=$BOB_RAD_HOME
export RAD_SEED=fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
rad auth
rad auth
radicle-node --listen 0.0.0.0:3445 --git-daemon 0.0.0.0:4445 \
--connect z6Mkk7oqY4pPxhMmGEotDYsFo97vhCj85BLY1H256HrJmjN8@0.0.0.0:3446 &
sleep 2
cd $BOB_CHECKOUT
rad clone rad:zKtT7DmF9H34KkvcKj9PHW19WzjT
cd $TEST_REPO_NAME
echo "Updated readme" > README.md
git add README.md
git commit --message "Update readme" --date "$GIT_COMMITTER_DATE"
git push rad
### WAIT FOR SYNC WITH PALM ###
sleep 2
cd $BASE_PATH
tar -cjf palm.tar.bz2 --exclude "post-receive" --exclude "pre-receive" -C $PALM_RAD_HOME .
killall radicle-node
killall git-daemon
+90
View File
@@ -0,0 +1,90 @@
#!/bin/bash
set -e
BINARIES=(rad radicle-node radicle-httpd git-remote-rad)
REPO_ROOT=$(git rev-parse --show-toplevel)
REV=$(cat "$REPO_ROOT/tests/support/heartwood-version")
BINARY_PATH=$REPO_ROOT/tests/tmp/bin/${REV:0:7}
OS=$(uname)
show_usage() {
echo
echo "Installs binaries required for running e2e test suite."
echo
echo "USAGE:"
echo " install-binaries [-s|h]"
echo
echo "OPTIONS:"
echo " -s --show-path Print the binary path, and skip installation."
echo " -h --help Print this Help."
echo
}
while [ $# -ne 0 ]; do
case "$1" in
--show-path | -s)
echo "$BINARY_PATH"
exit
;;
--help | -h)
show_usage
exit
;;
esac
done
echo
echo "Using revision $REV"
echo
mkdir -p "$BINARY_PATH"
for BINARY_NAME in "${BINARIES[@]}"
do
if [ -x "$(command -v "$BINARY_PATH/$BINARY_NAME")" ]; then
echo ✅ "$BINARY_NAME"
else
# To provide deterministic Node and Repo IDs, we need a rad CLI compiled with the --debug flag.
if [ "$BINARY_NAME" = "rad" ]; then
DOWNLOAD_NAME=rad-debug
else
DOWNLOAD_NAME=$BINARY_NAME
fi
case "$OS" in
Darwin)
echo Downloading "$BINARY_NAME" from "https://files.radicle.xyz/$REV/aarch64-apple-darwin/$DOWNLOAD_NAME"
curl --fail -s "https://files.radicle.xyz/$REV/aarch64-apple-darwin/$DOWNLOAD_NAME" --output "$BINARY_PATH/$BINARY_NAME" || (echo "Download failed" && exit 1);;
Linux)
echo Downloading "$BINARY_NAME" from "https://files.radicle.xyz/$REV/x86_64-unknown-linux-musl/$DOWNLOAD_NAME"
curl --fail -s "https://files.radicle.xyz/$REV/x86_64-unknown-linux-musl/$DOWNLOAD_NAME" --output "$BINARY_PATH/$BINARY_NAME" || (echo "Download failed" && exit 1);;
*) echo "There are no precompiled binaries for your OS: $OS, compile $BINARY_NAME manually and make sure it's in PATH." && exit 1 ;;
esac
chmod a+x "$BINARY_PATH/$BINARY_NAME"
fi
done
RADICLE_HOME=${RAD_HOME:-"${HOME}/.radicle/bin"}
# Add a separator between binaries download and PATH instructions.
echo
if [[ ":$PATH:" != *":$BINARY_PATH:"* ]]; then
if [[ ":$PATH:" == *":$RADICLE_HOME:"* ]]; then
echo "⚠️ You already have a radicle bin folder in your PATH variable."
echo
echo "To ensure you are using the correct test binaries, run the following command:"
else
echo "Before running the tests, make sure your PATH variable is set up correctly by running:"
fi
echo " 👉 export PATH=$BINARY_PATH:\$PATH"
else
echo "✅ $BINARY_PATH is already in your PATH variable."
fi
-120
View File
@@ -1,120 +0,0 @@
#!/bin/bash
set -e
REV=b29321dbf7999ec7ec9b7ac9192071e512ada407
REPO_ROOT=$(git rev-parse --show-toplevel)
FIXTURE=$REPO_ROOT/tests/fixtures/seeds/palm.tar.bz2
WORKSPACE=$REPO_ROOT/tests/tmp/palm
PASSPHRASE=asdf
BINARY_PATH="$REPO_ROOT/tests/tmp"
BINARY_NAME=radicle-httpd
OS=$(uname)
show_usage() {
echo
echo "Starts a ${BINARY_NAME} backend with test fixtures."
echo
echo "USAGE:"
echo " run-httpd-with-fixtures [-d|h|n]"
echo
echo "OPTIONS:"
echo " -d --download Download and use a precompiled binary."
echo " -h --help Print this Help."
echo " -n --non-interactive Run in non-interactive mode, no user prompts."
echo
}
prompt_workspace_removal() {
echo "This will irrevocably destroy the following directories:"
echo
echo $WORKSPACE
echo
read -r -p "Are you sure you want to continue? [yes/no]: " confirm
case "$confirm" in
[yY][eE][sS])
rm -rf $WORKSPACE
echo "Done"
;;
*)
echo "Ok, I won't touch your data."
exit
;;
esac
}
prepare_workspace() {
echo
echo "Unpacking fixture $FIXTURE"
mkdir -p $WORKSPACE
tar -xf $FIXTURE -C $WORKSPACE
}
NON_INTERACTIVE=false
DOWNLOAD=false
while [ $# -ne 0 ]; do
case "$1" in
--download | -d)
DOWNLOAD=true
;;
--non-interactive | -n)
NON_INTERACTIVE=true
;;
*)
show_usage
exit
;;
esac
shift
done
if [ "$DOWNLOAD" = true ]; then
CACHED_BINARY_NAME="$BINARY_NAME-${REV:0:7}"
if ! [ -x "$(command -v $BINARY_PATH/$CACHED_BINARY_NAME)" ]; then
case "$OS" in
Darwin)
echo Downloading $BINARY_NAME from https://files.radicle.xyz/$REV/aarch64-apple-darwin/$BINARY_NAME
curl --fail -s "https://files.radicle.xyz/$REV/aarch64-apple-darwin/$BINARY_NAME" --output "$BINARY_PATH/$CACHED_BINARY_NAME" || (echo "Download failed" && exit 1);;
Linux)
echo Downloading $BINARY_NAME from https://files.radicle.xyz/$REV/x86_64-unknown-linux-musl/$BINARY_NAME
curl --fail -s "https://files.radicle.xyz/$REV/x86_64-unknown-linux-musl/$BINARY_NAME" --output "$BINARY_PATH/$CACHED_BINARY_NAME" || (echo "Download failed" && exit 1);;
*) echo "There are no precompiled binaries for your OS: $OS, compile $BINARY_NAME manually and make sure it's in PATH." && exit 1 ;;
esac
chmod a+x "$BINARY_PATH/$CACHED_BINARY_NAME"
fi
export PATH="$BINARY_PATH:$PATH"
BINARY_NAME=$CACHED_BINARY_NAME
fi
if ! [ -x "$(command -v $BINARY_NAME)" ]; then
echo
echo "Couldn't find $BINARY_NAME binary in your PATH."
echo
echo "You can download it with the --download option, or"
echo "compile it from source:"
echo
echo " 👉 https://github.com/radicle-dev/heartwood"
echo
exit 1
fi
if [ "$NON_INTERACTIVE" = true ]; then
rm -rf $WORKSPACE
prepare_workspace
else
prompt_workspace_removal
prepare_workspace
fi
echo
echo "Starting $BINARY_NAME"
echo " RAD_HOME=$WORKSPACE RAD_PASSPHRASE=$PASSPHRASE $BINARY_NAME"
echo
RAD_HOME=$WORKSPACE RAD_PASSPHRASE=$PASSPHRASE $BINARY_NAME