mirror of
https://github.com/zhigang1992/liquid-stacking.git
synced 2026-01-12 22:48:34 +08:00
120 lines
3.4 KiB
Bash
Executable File
120 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
set -euo pipefail
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
|
|
TMP_GIT_DIR="$ROOT/.git_tmp_repos"
|
|
CONTRACTS_MODULE_PATH="contracts_modules"
|
|
|
|
pre_check() {
|
|
echo "Installing from Clarinet.json..."
|
|
# check if file not exists
|
|
if [ ! -f "$DIR/../Clarinet.json" ]; then
|
|
echo "Clarity.json not found. abort..."
|
|
exit 1
|
|
fi
|
|
|
|
# check if command jq is installed, if not, install jq
|
|
if ! [ -x "$(command -v jq)" ]; then
|
|
echo "jq not installed. Install it before continue. (brew install jq)..."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
install_project() {
|
|
project_name=${1//\"/}
|
|
echo "Installing project...$project_name"
|
|
commit=$(cat Clarinet.json | jq -cr ".dependencies.$project_name.commit")
|
|
git_repo=$(cat Clarinet.json | jq -cr ".dependencies.$project_name.git")
|
|
contracts_path=$(cat Clarinet.json | jq -cr ".dependencies.$project_name.contracts_path")
|
|
|
|
echo "Installing from $git_repo, commit $commit, to $project_name"
|
|
mkdir -p "$TMP_GIT_DIR"/"$project_name"
|
|
|
|
|
|
echo git clone "$git_repo" "$TMP_GIT_DIR"/"$project_name"
|
|
git clone "$git_repo" "$TMP_GIT_DIR"/"$project_name"
|
|
pushd "$TMP_GIT_DIR"/"$project_name" > /dev/null
|
|
echo git checkout "$commit"
|
|
git checkout "$commit"
|
|
popd > /dev/null
|
|
|
|
mkdir -p "$ROOT/$CONTRACTS_MODULE_PATH"
|
|
rm -rf "$ROOT/$CONTRACTS_MODULE_PATH/${project_name:?}"
|
|
cp -r "$TMP_GIT_DIR"/"$project_name"/"$contracts_path" "$ROOT"/"$CONTRACTS_MODULE_PATH"/$project_name
|
|
|
|
echo "cleaning..."
|
|
rm -rf "$TMP_GIT_DIR"
|
|
echo "installed $project_name"
|
|
}
|
|
|
|
install() {
|
|
pre_check
|
|
pushd "$DIR"/.. > /dev/null
|
|
|
|
projects_str=$(cat Clarinet.json | jq -c ".dependencies | keys" | sed -e 's/\[//g' -e 's/\]//g' -e 's/\,/ /g')
|
|
projects=($projects_str)
|
|
|
|
for i in "${projects[@]}"; do
|
|
install_project $i
|
|
done
|
|
|
|
echo installed all projects: $projects
|
|
}
|
|
|
|
clean() {
|
|
rm -rf "$TMP_GIT_DIR"
|
|
rm -rf "$ROOT/${CONTRACTS_MODULE_PATH:?}"
|
|
}
|
|
|
|
update() {
|
|
project_name=$1
|
|
branch=$2
|
|
echo "Updating project...$project_name commit from branch head of [$branch]"
|
|
|
|
git_repo=$(cat Clarinet.json | jq -cr ".dependencies.$project_name.git")
|
|
contracts_path=$(cat Clarinet.json | jq -cr ".dependencies.$project_name.contracts_path")
|
|
|
|
echo "Installing from $git_repo, to $project_name"
|
|
mkdir -p "$TMP_GIT_DIR"/"$project_name"
|
|
echo git clone "$git_repo" "$TMP_GIT_DIR"/"$project_name"
|
|
git clone "$git_repo" "$TMP_GIT_DIR"/"$project_name"
|
|
pushd "$TMP_GIT_DIR"/"$project_name" > /dev/null
|
|
git checkout "$branch"
|
|
current_commit=$(git show -s --format=%H)
|
|
echo ------using commit------
|
|
git log --format=%B -n 1 $(git log -1 --pretty=format:"%h")
|
|
echo ------end commit------
|
|
popd > /dev/null
|
|
|
|
echo branch $branch has commit $current_commit
|
|
cat <<< $(jq ".dependencies.$project_name.commit=\"$current_commit\"" Clarinet.json) > Clarinet.json
|
|
|
|
echo "cleaning..."
|
|
rm -rf "$TMP_GIT_DIR"
|
|
echo "updated $project_name"
|
|
}
|
|
|
|
main() {
|
|
# check if command is valid
|
|
if [ "$1" == "install" ]; then
|
|
install
|
|
elif [ "$1" == "clean" ]; then
|
|
clean
|
|
elif [ "$1" == "update" ]; then
|
|
# check if project and branch are provided
|
|
if [ -z "${2:-}" ] || [ -z "${3:-}" ]; then
|
|
echo "Usage: clarinet_manager.sh update <project> <branch>"
|
|
exit 1
|
|
fi
|
|
update $2 $3
|
|
else
|
|
echo "Invalid command. Use: ./clarinet_manager.sh install | clean | update"
|
|
fi
|
|
}
|
|
|
|
main $@
|