123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- #!/usr/bin/env bash
- set -e
- # PATHS
- # Get current working directory
- current_dir=`pwd`
- # Get the absolute path where current script is running from.
- script_path=$(readlink -f $(which $0))
- # Get the canonical directory of script.
- if [[ -L $script_path ]]; then
- script_dir=$(dirname $(readlink -f $script_path))
- else
- script_dir=$(dirname $script_path)
- fi
- # RETURN VARIABLE
- ret=""
- # ARGUMENTS
- args="${@:2}" # All arguments except the first
- # COLORS
- red='\033[0;31m'
- green='\033[0;32m'
- purple='\033[0;35m'
- none='\033[0m'
- yellow="\033[0;33m"
- # DESCRIPTION:
- # Where execution starts
- #
- main() {
- case $1 in
- build )
- build
- ;;
- test )
- test
- ;;
- bench )
- bench
- ;;
- coverage )
- coverage
- ;;
- publish )
- publish
- ;;
- setup )
- setup
- ;;
- *)
- help
- ;;
- esac
- exit 0
- }
- # DESCRIPTION:
- # Prints the help info.
- #
- # USAGE:
- # rs-wnfs build
- #
- help() {
- echo ""
- echo "Rust WNFS Utility Script"
- echo ""
- echo "USAGE:"
- echo " rs-wnfs [COMMAND] [...args]"
- echo ""
- echo "COMMAND:"
- echo " * build [--fs|--wasm|--common|--hamt|--accumulator] - build projects"
- echo " * test [--fs|--wasm|--common|--hamt|--accumulator] - run tests"
- echo " * bench - run wnfs benchmarks"
- echo " * setup - install rs-wnfs script"
- echo " * help - print this help message"
- echo ""
- echo ""
- }
- #-------------------------------------------------------------------------------
- # Commands
- #-------------------------------------------------------------------------------
- # DESCRIPTION:
- # Builds the project.
- #
- # USAGE:
- # rs-wnfs build [--fs|--wasm|--common|--hamt|--accumulator]
- #
- build() {
- if check_flag --fs; then
- build_fs
- elif check_flag --wasm; then
- build_wasm
- elif check_flag --common; then
- build_common
- elif check_flag --hamt; then
- build_hamt
- elif check_flag --accumulator; then
- build_accumulator
- else
- build_common
- build_hamt
- build_accumulator
- build_fs
- build_wasm
- fi
- }
- build_fs() {
- display_header "💿 | BUILDING WNFS PROJECT | 💿"
- cargo build -p wnfs --release
- }
- build_common() {
- display_header "💿 | BUILDING WNFS-COMMON PROJECT | 💿"
- cargo build -p wnfs-common --release
- }
- build_hamt() {
- display_header "💿 | BUILDING WNFS-HAMT PROJECT | 💿"
- cargo build -p wnfs-hamt --release
- }
- build_accumulator() {
- display_header "💿 | BUILDING WNFS-NAMEACCUMULATOR PROJECT | 💿"
- cargo build -p wnfs-nameaccumulator --release
- }
- build_wasm() {
- display_header "💿 | BUILDING WNFS-WASM PROJECT | 💿"
- cd $script_dir/../wnfs-wasm
- npm run release
- sed -i.bak \
- -e 's/"name": "wnfs-wasm"/"name": "wnfs"/g' \
- package.json
- rm package.json.bak
- }
- # DESCRIPTION:
- # Runs tests.
- #
- # USAGE:
- # rs-wnfs test [--fs|--wasm|--common|--hamt|--accumulator]
- #
- test() {
- if check_flag --fs; then
- test_fs
- elif check_flag --wasm; then
- test_wasm
- elif check_flag --common; then
- test_common
- elif check_flag --hamt; then
- test_hamt
- elif check_flag --accumulator; then
- test_accumulator
- else
- test_common
- test_hamt
- test_accumulator
- test_fs
- test_wasm
- fi
- }
- test_fs() {
- display_header "🧪 | RUNNING WNFS TESTS | 🧪"
- cargo test -p wnfs
- }
- test_common() {
- display_header "🧪 | RUNNING WNFS-COMMON TESTS | 🧪"
- cargo test -p wnfs-common
- }
- test_hamt() {
- display_header "🧪 | RUNNING WNFS-HAMT TESTS | 🧪"
- cargo test -p wnfs-hamt
- }
- test_accumulator() {
- display_header "🧪 | RUNNING WNFS-NAMEACCUMULATOR TESTS | 🧪"
- cargo test -p wnfs-nameaccumulator
- }
- test_wasm() {
- display_header "🧪 | RUNNING WNFS-WASM TESTS | 🧪"
- cd $script_dir/../wnfs-wasm
- yarn
- yarn playwright test
- }
- # DESCRIPTION:
- # Runs benchmarks.
- #
- # USAGE:
- # rs-wnfs bench
- #
- bench() {
- display_header "📈 | RUNNING WNFS BENCHMARKS | 📈"
- cargo bench -p wnfs-bench
- }
- #------------------------------------------------------------------------------
- # Helper functions
- #------------------------------------------------------------------------------
- # DESCRIPTION:
- # Gets the value following a flag
- #
- get_flag_value() {
- local found=false
- local key=$1
- local count=0
- # For every argument in the list of arguments
- for arg in $args; do
- count=$((count + 1))
- # Check if any of the argument matches the key provided
- if [[ $arg = $key ]]; then
- found=true
- break
- fi
- done
- local args=($args)
- local value=${args[count]}
- # Check if argument specified was found
- if [[ $found = true ]]; then
- # Check if there exists a word after the key
- # And that such word doesn't start with hyphen
- if [[ ! -z $value ]] && [[ $value != "-"* ]]; then
- ret=$value
- else
- ret=""
- fi
- else
- ret=""
- fi
- }
- # DESCRIPTION:
- # Checks if the flag is present in the list of arguments
- #
- check_flag() {
- local found=1
- local key=$1
- # For every argument in the list of arguments
- for arg in $args; do
- # Check if any of the argument matches the key provided
- if [[ $arg = $key ]]; then
- found=0
- break
- fi
- done
- return $found
- }
- upgrade_privilege() {
- if ! has sudo; then
- errorln '"sudo" command not found.'
- displayln "If you are on Windows, please run your shell as an administrator, then"
- displayln "rerun this script. Otherwise, please run this script as root, or install"
- displayln "sudo first."
- exit 1
- fi
- if ! sudo -v; then
- errorln "Superuser not granted, aborting installation"
- exit 1
- fi
- }
- # DESCRIPTION:
- # check if the current user has write perm to specific dir by trying to write to it
- #
- is_writeable() {
- path="${1:-}/test.txt"
- if touch "${path}" 2>/dev/null; then
- rm "${path}"
- return 0
- else
- return 1
- fi
- }
- # DESCRIPTION:
- # Sets up the script by making it excutable and available system wide
- #
- setup() {
- displayln "Make script executable"
- chmod u+x $script_path
- displayln "Drop a link to it in /usr/local/bin"
- sudo=""
- if is_writeable "/usr/local/bin"; then
- msg="Installing rs-wnfs, please wait…"
- else
- warnln "Higher permissions are required to install to /usr/local/bin"
- upgrade_privilege
- sudo="sudo"
- msg="Installing rs-wnfs as ROOT, please wait…"
- fi
- displayln "$msg"
- # try to make a symlink, using sudo if required
- if ${sudo} ln -s $script_path /usr/local/bin/rs-wnfs; then
- successln "Successfully installed"
- else
- local result=$?
- errorln "Failed to install"
- exit $result
- fi
- }
- # DESCRIPTION:
- # Prints a message.
- #
- displayln() {
- printf "\n::: $1 :::\n"
- }
- # DESCRIPTION:
- # Prints an error message.
- #
- errorln() {
- printf "\n${red}::: $1 :::${none}\n\n"
- }
- # DESCRIPTION:
- # Prints an success message.
- #
- successln() {
- printf "\n${green}::: $1 :::${none}\n\n"
- }
- # DESCRIPTION:
- # Prints a warning message.
- #
- warnln() {
- printf "\n${yellow}!!! $1 !!!${none}\n\n"
- }
- # DESCRIPTION:
- # Prints a header message.
- #
- display_header() {
- printf "\n${purple}$1${none}\n\n"
- }
- # DESCRIPTION:
- # test command availability
- #
- has() {
- command -v "$1" 1>/dev/null 2>&1
- }
- main $@
|