Basic remote build command

This commit is contained in:
~erin 2023-04-02 11:16:37 -04:00
parent 2f584c56ec
commit 99a69219f9
Signed by: erin
GPG Key ID: 9A8E308CEFA37A47
1 changed files with 173 additions and 0 deletions

173
functions/build.fish Normal file
View File

@ -0,0 +1,173 @@
function build
argparse 'h/help' 'c/compiler=' 's/subcommand=' 'f/features=?' 'n/nightly' 'r/release' 'repository=' 'host=' 'd/destination=?' -- $argv
or return
if set -ql _flag_help
echo 'Remote build tool'
echo -e '\nUsage: build [VALUES] [OPTIONS]'
echo -e '\nValues:'
echo -e ' -c, --compiler [cargo|make]\tSpecify which compiler to use'
echo -e ' -s, --subcommand <SUBCOMMAND>\tSpecify a subcommand for the compiler'
echo -e ' --repository <REPO>\tThe git repository URL to clone from'
echo -e ' --host <HOST>\tThe remote SSH host'
echo -e '\nOptions:'
echo -e ' -f, --features=<FEATURES>\tcargo only - specify build features'
echo -e ' -d, --destination=<PATH>\tLocal path for the copied binary (default .)'
echo -e ' -n, --nightly\tcargo only - specify nightly rust'
echo -e ' -r, --release\tcargo only - specify to build in release mode (default debug)'
return 0
end
if set -ql _flag_host
set -x HOST $_flag_host
else
set_color red
echo 'A host must be specified!'
return 1
end
if set -ql _flag_repository
echo -n 'Cloning from '
set_color green
echo $_flag_repository
set_color white
set -x REPOSITORY $_flag_repository
else
set_color red
echo 'A git repository must be specified!'
return 1
end
switch $_flag_compiler
case 'cargo'
set -x COMPILER $_flag_compiler
set -x SUBCOMMAND $_flag_subcommand
if set -ql _flag_features
echo -n 'Using '
set_color blue
echo -n 'cargo '
set_color white
echo -n 'with features '
set_color cyan
echo $_flag_features
set_color white
set -x FEATURES $_flag_features
else
echo -n 'Using '
set_color blue
echo 'cargo'
set_color white
end
if set -ql _flag_nightly
echo -n 'Using '
set_color magenta
echo -n 'nightly '
set_color white
echo 'rust'
set -x NIGHTLY true
else
set -x NIGHTLY false
end
if set -ql _flag_release
echo -n 'Building in '
set_color blue
echo -n 'release '
set_color white
echo 'mode'
set -x RELEASE true
else
echo -n 'Building in '
set_color blue
echo -n 'debug '
set_color white
echo 'mode'
set -x RELEASE false
end
if $RELEASE
set -x BINARY_PATH '~/src/'(basename $REPOSITORY)'/target/release/'(basename $REPOSITORY)
else
set -x BINARY_PATH '~/src/'(basename $REPOSITORY)'/target/debug/'(basename $REPOSITORY)
end
# TODO: Add colours
case 'make'
echo 'Using make...'
set -x COMPILER $_flag_compiler
set -x SUBCOMMAND $_flag_subcommand
if set -ql _flag_features
set_color red
echo 'make compiler does not support features'
return 1
end
if set -ql _flag_nightly
set_color red
echo 'make does not support nightly features!'
return 1
end
if set -ql _flag_release
set_color red
echo 'make does not support release mode!'
return 1
end
case '*'
set_color red
echo 'Unknown compiler!'
return 1
end
if set -ql FEATURES
if $RELEASE
set -x BUILD_COMMAND $COMPILER $SUBCOMMAND '--release --features' $FEATURES
else
set -x BUILD_COMMAND $COMPILER $SUBCOMMAND '--features' $FEATURES
end
echo -ne '\nRunning: '
set_color green
echo -ne $BUILD_COMMAND
set_color white
echo -e '\n'
set -xl COMMANDS 'cd ~/src; git clone' $REPOSITORY '; cd ' (basename $REPOSITORY) '; ' $BUILD_COMMAND
ssh -t $HOST $COMMANDS
else
if $RELEASE
set -x BUILD_COMMAND $COMPILER $SUBCOMMAND '--release'
else
set -x BUILD_COMMAND $COMPILER $SUBCOMMAND
end
echo -ne '\nRunning: '
set_color green
echo -ne $BUILD_COMMAND
set_color white
echo -e '\n'
set -xl COMMANDS 'cd ~/src; git clone' $REPOSITORY '; cd ' (basename $REPOSITORY) '; ' $BUILD_COMMAND
ssh -t $HOST $COMMANDS
end
echo -ne '\nFetching binary from: '
set_color green
echo $BINARY_PATH
set_color white
echo $_flag_destination
if set -ql _flag_destination
scp $HOST:$BINARY_PATH $_flag_destination
else
scp $HOST:$BINARY_PATH .
end
end