Compare commits

...

10 Commits
0.7 ... master

Author SHA1 Message Date
98dd0da601 update migration to meta-tech.academy 2022-11-06 23:23:40 +01:00
a-Sansara
1ee9ac25e7 version 0.13 - add cmd new project 2021-03-02 01:39:55 +01:00
a-Sansara
bc386594d9 version 0.12 - add secure lib 2019-11-18 14:06:10 +01:00
a-Sansara
8cf4729a34 add service lib 2019-11-16 01:45:21 +01:00
a-Sansara
1f795886f1 update README 2019-02-28 02:17:08 +01:00
a-Sansara
dd14205677 add extra install instructions with default colors.ini file 2019-02-28 02:02:57 +01:00
a-sansara
fa7aa891b5 update boot sequence 2018-12-22 17:47:52 +01:00
a-sansara
808a6cfb90 updating echo dependency to 1.2 2018-12-22 10:20:22 +01:00
a-sansara
9b7bf95b94 manage update : load bes dependencies recursively 2018-06-18 16:15:13 +02:00
a-sansara
3d2df2da3c update README 2017-07-07 05:03:02 +02:00
9 changed files with 962 additions and 330 deletions

View File

@ -7,7 +7,7 @@ into a single `dist/project` executable file
since version **0.5** **bes-build** attempt to be a *dependency manager* like `composer` (for php projects) but in a more extra-light way since version **0.5** **bes-build** attempt to be a *dependency manager* like `composer` (for php projects) but in a more extra-light way
since version **07** **bes-build** is able to manage his own dependencies on self building process since version **0.7** **bes-build** is able to manage his own dependencies on self building process
### Install ### Install
@ -66,7 +66,7 @@ to use **bes-build** like a dependency manager, you need a `bes.ini` file in you
```ini ```ini
[require] [require]
bes.echo = 1.1 bes.echo = 1.4
``` ```
then you can run the `update` command before building then you can run the `update` command before building
@ -86,7 +86,7 @@ since version 0.6 you can now add external dependencies :
```ini ```ini
[require] [require]
test.echo = https://git.pluie.org/meta-tech/bes-echo:master test.echo = https://gitea.meta-tech.academy/meta-tech/bes-echo:master
``` ```
@ -99,11 +99,14 @@ if you intend to release your lib as a bes dependency you must provide a bes.ini
[project] [project]
vendor = bes vendor = bes
name = echo name = echo
version = 1.1 version = 1.4
license = "GNU GPL v3" license = "GNU GPL v3"
author = a-Sansara author = a-Sansara
type = library type = library
homepage = "https://git.pluie.org/meta-tech/bes-echo" homepage = "https://gitea.meta-tech.academy/meta-tech/bes-echo"
description = "bash bes display utility library" description = "bash bes display utility library"
keywords = "bash, bes" keywords = "bash, bes"
[require]
bes.color = 1.4
``` ```

View File

@ -1,15 +1,13 @@
[project] [project]
vendor = bes vendor = bes
name = build name = build
version = 0.6 version = 0.13
license = "GNU GPL v3" license = "GNU GPL v3"
author = a-Sansara author = a-Sansara
type = application type = application
homepage = "https://git.pluie.org/meta-tech/bes-build" homepage = "https://gitea.meta-tech.academy/meta-tech/bes-build"
description = "bash bes build application for bash programs" description = "bash bes build application for bash programs"
keywords = "bash, bes, build" keywords = "bash, bes, build"
[require] [require]
bes.ini = 1.1 bes.install = 1.4
bes.echo = 1.1
bes.install = 1.0

786
dist/bes-build vendored
View File

@ -1,5 +1,166 @@
#!/bin/bash #!/bin/bash
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_BOOT=
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.exists () {
declare -f $1 > /dev/null
#~ [ x$(type -t $1) = xfunction ];
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.boot ()
{
for fn in $BES_BOOT; do
if bes.exists $fn.boot; then
$fn.boot
fi
done
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.reg ()
{
local sep=" "
if [ -z "$BES_BOOT" ]; then
sep=""
fi
BES_BOOT=$BES_BOOT$sep$1
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# @author a-Sansara - https://git.pluie.org/meta-tech/bes-color
# @app bes-color
# @license GNU GPL v3
# @date 2017-10-23 23:30:54 CET
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.color.boot () {
BES_NOCOLOR=${BES_NOCOLOR:-0}
if [ "$BES_NOCOLOR" -eq 0 ]; then
color.load
if [ $? -eq 1 ]; then
# by convention all colors begins with 'C' uppercase
# followed by a name in lowercase
# but in this calls you dont need to prefix names
#
# background foreground
# R G B R G B
color.set "head" 53 114 160 195 223 255
color.set "headsep" 53 114 160 252 212 102
# background
# R G B
color.bg "done" 63 172 138
color.bg "fail" 172 63 85
# foreground
# R G B
color.fg "title" 133 92 181
color.fg "headline" 22 74 133
color.fg "sep" 80 80 80
color.fg "err" 194 48 64
color.fg "val" 255 175 95
color.fg "key" 40 168 134
color.fg "action" 106 183 241
color.fg "symbol" 255 175 95
color.fg "item" 92 147 181
color.fg "usa" 255 172 0
color.fg "spe" 255 214 166
color.fg "opt" 94 215 255
color.fg "com" 175 135 175
color.fg "text" 0 132 101
color.fg "meta" 39 100 170
echo -e "$Cerr warning ${Coff}cannot load colors config file"
fi
Coff="\\033[m"
fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function color.fg()
{
local s=${1}
if [ ${s:0:1} = "C" ]; then s=${s:1}; fi
s=${s,,}
local -n var=C$1
var="\033[1;38;2;$2;$3;$4m"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function color.bg()
{
local s=${1}
if [ ${s:0:1} = "C" ]; then s=${s:1}; fi
s=${s,,}
local -n var=C$1
var="\033[1;48;2;$2;$3;$4m"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function color.set()
{
local s=${1}
if [ ${s:0:1} = "C" ]; then s=${s:1}; fi
s=${s,,}
local -n var=C$1
var="\033[1;48;2;$2;$3;$4;1;38;2;$5;$6;$7m"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function color.rgb ()
{
local c=${3:-0}
local v=$1
local -n r=${2}_r
local -n g=${2}_g
local -n b=${2}_b
if [ -z "$v" ]; then
r=$c
g=$c
b=$c
return
fi
r=${v%%;*}
[ "$v" = "$r" ] && v='' || v="${v#*;}"
if [ -z "$r" ]; then r=$c; fi
g=${v%%;*}
[ "$v" = "$g" ] && v='' || v="${v#*;}"
if [ -z "$g" ]; then g=$c; fi
b=${v%%;*}
if [ -z "$b" ]; then b=$c; fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function color.env () {
local -n var=${2:-shenv}
local v=ctx$1
local ctxPROD="174 8 49"
local ctxINT="218 84 0"
local ctxDEV="218 159 0"
local ctxLOCAL="122 122 122"
if [ -z "${!v}" ]; then
v=ctxLOCAL
SHENV_CTX=LOCAL
fi
var=${!v}
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function color.load () {
local file=${1:-/usr/share/bes/colors.ini}
if [ -f "$file" ]; then
local prefix="bes_colors"
bes.ini "$file" -p "$prefix" -b 1
for name in ${bes_colors_ALL_VARS}; do
key="${name:${#prefix}+1}"
if [ "${key:0:2}" = "fg" ]; then
color.fg "${key:3}" ${!name}
elif [ "${key:0:2}" == "bg" ]; then
color.bg "${key:3}" ${!name}
elif [ "${key:0:3}" == "set" ]; then
color.set "${key:4}" ${!name}
fi
done
else
return 1
fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
declare -f bes.reg > /dev/null
if [ $? -eq 0 ]; then
bes.reg bes.color
fi
# #
# @author a-Sansara - https://git.pluie.org/meta-tech/bes-echo # @author a-Sansara - https://git.pluie.org/meta-tech/bes-echo
# @app bes-echo # @app bes-echo
@ -9,80 +170,49 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.boot () function bes.echo.boot ()
{ {
BES_TERM_WIDTH=${BES_TERM_WIDTH:-105} BES_TERM_WIDTH=${COLUMNS:-130}
BES_NOCOLOR=${BES_NOCOLOR:-0} BES_TERM_WIDTH=$(($BES_TERM_WIDTH - 20))
if [ "$BES_NOCOLOR" -eq 0 ]; then
Cok="\033[0;38;5;43m"; Cko="\033[0;38;5;217m"
Coff="\033[m"; Ctitle="\033[1;48;5;24;1;38;5;15m"
Cdone="\033[1;48;5;36;1;38;5;15m"; Cfail="\033[1;48;5;196;1;38;5;15m"
Cspe="\033[1;38;5;223m"; Citem="\033[1;38;5;214m"
Cval="\033[1;38;5;215m"; Cusa="\033[1;38;5;214m"
Cbra="\033[1;38;5;203m"; Crepo="\033[1;38;5;223m"
Cmeta="\033[1;38;5;30m"; Ctext="\033[1;38;5;30m"
Copt="\033[1;38;5;81m"; Csep="\033[1;38;5;241m"
Cerr="\033[1;38;5;196m"; Ccom="\033[0;38;5;139m"
Csection="\033[1;38;5;97m"; Caction="\033[0;38;5;37m"
fi
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo () function echo.msg ()
{ {
local msg=${1:-''} local c=${2:-}
local isAction=${2:-'0'} local m=${1:-}
local symbol=${3:-' *'} echo -e " $c$m$Coff"
if [ ! "$BES_NOCOLOR" = 1 ]; then
local c=" "
if [ -z "$isAction" ] || [ "$isAction" = 1 ]; then
c=$Caction
fi
if [ ! "$isAction" = 0 ]; then
c=" $Citem$symbol $c"
fi
echo -e " $c$msg$Coff"
else
if [ ! "$isAction" = 0 ]; then
msg=" $symbol $msg"
fi
echo -e "$msg"
fi
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.action () function echo.state ()
{ {
bes.echo "$1" 1 local len=14
} echo -en " $Csep"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ printf "%0.s-" $(seq 1 $(($BES_TERM_WIDTH-${len})))
function bes.echo.title ()
{
echo
bes.echo " ${Citem}☪ ${Csection}$1 ${Cspe}$2${Coff}"
echo
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.keyval ()
{
local c=': '
if [ ! "$BES_NOCOLOR" = 1 ]; then
c="$Citem: ${Cval}"
fi
local len="%-15s "
# printf "%s %s [UP]\n" $PROC_NAME "${line:${#PROC_NAME}}"
bes.echo "$(printf $len $1) $c$2 " 1 " "
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.state ()
{
local len=8
printf "%0.s " $(seq 1 $(($BES_TERM_WIDTH-${len})))
if [ "$1" = 0 ]; then if [ "$1" = 0 ]; then
echo -e "${Cdone} OK ${Coff}" echo -e "$Coff $Cdone OK $Coff\n"
else else
echo -e "${Cfail} KO ${Coff}" echo -e "$Coff $Cfail KO $Coff\n"
fi fi
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.rs () function echo.action ()
{
local symbol=${3:-*}
local color=${4:-Citem}
echo -e " $Csymbol$symbol ${Caction}$1 ${!color}$2$Coff"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function echo.title ()
{
echo -e "\n $Csymbol☪ $Ctitle$1 $Coff$Cspe$2$Coff\n"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function echo.keyval ()
{
local len=${3:-20}
local c="$Ckey: ${Cval}"
echo -e " $Ckey $(printf "%-${len}s " "$1") ${c}${2} $Coff"
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function echo.rs ()
{ {
local rs=${1:-0} local rs=${1:-0}
if [ "$rs" -eq 0 ]; then if [ "$rs" -eq 0 ]; then
@ -92,50 +222,45 @@ function bes.echo.rs ()
fi fi
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.error () function echo.error ()
{ {
local leave=${2:-0}
echo -e "\n${Cerr} error : ${Coff}\n\t$1 ${Coff}\n" echo -e "\n${Cerr} error : ${Coff}\n\t$1 ${Coff}\n"
if [ "$leave" = "1" ]; then
exit 1;
fi
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.sepline () function echo.sepline ()
{ {
local char=${1:-'_'} local char=${1:-'_'}
local width=${2:-$BES_TERM_WIDTH} local width=${2:-$BES_TERM_WIDTH}
echo -ne "${Csep} " echo -ne "${Cheadline} "
printf "%0.s$char" $(seq 1 $width) printf "%0.s$char" $(seq 1 $width)
echo -e "${Coff}" echo -e "${Coff}"
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.app () function echo.app ()
{ {
local msg=${1:-''} local msg=${1:-''}
local version=${2:-''} local version=${2:-''}
local author=${3:-'a-Sansara'} local author=${3:-'a-Sansara'}
local license=${4:-'GNU GPL v3'}
if [ ! -z "$2" ]; then if [ ! -z "$2" ]; then
msg="$msg ${Cval}v$version" msg="$msg ${Cval}v$version"
fi fi
local len="$1${version}license : GNU GPL v3 author:$author" local len="$1${version}license : $license author:$author"
bes.echo.sepline echo.sepline
echo -ne "\n $Ctitle $msg $Coff" echo -ne "\n $Chead $msg $Coff"
printf "%0.s " $(seq 1 $(($BES_TERM_WIDTH-${#len}-15))) printf "%0.s " $(seq 1 $(($BES_TERM_WIDTH-${#len}-15)))
echo -e " ${Cmeta}license : ${Coff}GNU GPL v3 ${Cmeta}author : ${Cval}$author" echo -e " ${Cmeta}license : ${Coff}$license ${Cmeta}author : ${Cval}$author"
bes.echo.sepline echo.sepline
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.echo.colormap () declare -f bes.reg > /dev/null
{ if [ $? -eq 0 ]; then
for fgbg in 38 48 ; do bes.reg bes.echo
for color in {0..256} ; do fi
echo -en "\e[${fgbg};5;${color}m ${color}\t\e[0m"
if [ $((($color + 1) % 7)) == 0 ] ; then
echo
fi
done
echo
done
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bes.echo.boot
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# #
# @author a-Sansara - https://git.pluie.org/meta-tech/bes-echo # @author a-Sansara - https://git.pluie.org/meta-tech/bes-echo
@ -441,9 +566,12 @@ function bes.install ()
local app=${1} local app=${1}
local url=${2} local url=${2}
local path=${3:-/usr/local/bin} local path=${3:-/usr/local/bin}
local inst=${4:-}
local done=1 local done=1
bes.echo.title "Installing $app ${Coff}in" "$path" echo.title "Installing $app ${Coff}in" "$path"
if [ -z "$app" ] || [ -s "$url" ]; then
echo.error "in bes.install : \$app '$app' & \$url '$url' are required" 1
fi
if [ -f "./$app" ]; then if [ -f "./$app" ]; then
rm ./$app rm ./$app
fi fi
@ -453,38 +581,71 @@ function bes.install ()
if [ -d $path ]; then if [ -d $path ]; then
sudo mv ./$app $path/$app sudo mv ./$app $path/$app
local done=$? local done=$?
bes.echo.state $done echo.state $done
else else
bes.echo.error "install directory do not exists : ${Cspe}$path" echo.error "install directory do not exists : ${Cspe}$path"
fi
if [ ! -z "$inst" ]; then
if bes.exists "$inst"; then
$inst
fi
fi fi
else else
bes.echo.error "can not download latest version of app $app. please check url : $url" echo.error "can not download latest version of app $app. please check url : $url"
fi fi
bes.echo.rs $done echo.rs $done
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.build () function bes.build ()
{ {
bes.echo.title "building project" "$APP_NAME" echo.title "building project" "$APP_NAME"
if [ -d "$APP_DIR/src" ]; then if [ -d "$APP_DIR/src" ]; then
if [ ! -d "$APP_DIR/dist" ]; then if [ ! -d "$APP_DIR/dist" ]; then
bes.echo.action "creating dist directory" echo.action "creating dist directory"
mkdir $APP_DIR/dist mkdir $APP_DIR/dist
bes.echo.state $? echo.state $?
fi fi
if [ -f "$APP_BIN" ]; then if [ -f "$APP_BIN" ]; then
if [ "$1" = "backup" ] || [ "$1" = "-b" ]; then if [ "$1" = "backup" ] || [ "$1" = "-b" ]; then
bes.echo.action "backup last build to ${Coff}dist/$(date +%y%m%d)-$APP_NAME${Coff}" echo.action "backup last build to ${Coff}dist/$(date +%y%m%d)-$APP_NAME${Coff}"
mv $APP_BIN $APP_DIR/dist/$(date +%y%m%d)-$APP_NAME mv $APP_BIN $APP_DIR/dist/$(date +%y%m%d)-$APP_NAME
else else
bes.echo.action "removing ${Coff}dist/$APP_NAME${Coff}" echo.action "removing ${Coff}dist/$APP_NAME${Coff}"
rm $APP_BIN rm $APP_BIN
fi fi
bes.echo.state $? echo.state $?
fi fi
echo "#!/bin/bash" > $APP_BIN echo "#!/bin/bash
bes.echo.action "reading ${Coff}dependencies" # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_BOOT=
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.exists () {
declare -f \$1 > /dev/null
#~ [ x\$(type -t \$1) = xfunction ];
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.boot ()
{
for fn in \$BES_BOOT; do
if bes.exists \$fn.boot; then
\$fn.boot
fi
done
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.reg ()
{
local sep=\" \"
if [ -z \"\$BES_BOOT\" ]; then
sep=\"\"
fi
BES_BOOT=\$BES_BOOT\$sep\$1
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
" > $APP_BIN
#~ echo "#!/bin/bash" > $APP_BIN
echo.action "reading ${Coff}dependencies"
if [ -d "$APP_DIR/vendor" ]; then if [ -d "$APP_DIR/vendor" ]; then
for vendor in $(ls $APP_DIR/vendor/); do for vendor in $(ls $APP_DIR/vendor/); do
if [ "$vendor" != "." ] && [ "$vendor" != ".." ]; then if [ "$vendor" != "." ] && [ "$vendor" != ".." ]; then
@ -494,7 +655,7 @@ function bes.build ()
local entrypath="$APP_DIR/vendor/$vendor/$project/src/$(basename $entry)" local entrypath="$APP_DIR/vendor/$vendor/$project/src/$(basename $entry)"
if [ -f "$entrypath" ] && [ "${entrypath: -3}" = ".sh" ]; then if [ -f "$entrypath" ] && [ "${entrypath: -3}" = ".sh" ]; then
tail -n +2 "$entrypath" >> "$APP_BIN" tail -n +2 "$entrypath" >> "$APP_BIN"
bes.echo " ${Cspe}- ${Cok}appending ${Cusa}$vendorName/$project/${Coff}src/$(basename $entry)" echo.msg " ${Cspe}- ${Cok}appending ${Cusa}$vendorName/$project/${Coff}src/$(basename $entry)"
fi fi
done done
fi fi
@ -502,35 +663,183 @@ function bes.build ()
fi fi
done done
else else
bes.echo " no dependencies, did you forget to run bes-build update ?" echo.msg " no dependencies, did you forget to run bes-build update ?"
fi fi
bes.echo.state 0 echo.state 0
bes.echo.action "reading ${Coff}src/" echo.action "reading ${Coff}src/"
for entry in "$APP_DIR/src"/*.sh; do for entry in "$APP_DIR/src"/*.sh; do
if [ "$(basename $entry)" != "main.sh" ]; then if [ "$(basename $entry)" != "main.sh" ]; then
bes.echo " ${Cspe}- ${Cok}appending ${Coff}src/$(basename $entry)" echo.msg " ${Cspe}- ${Cok}appending ${Coff}src/$(basename $entry)"
tail -n +2 "$entry" >> "$APP_BIN" tail -n +2 "$entry" >> "$APP_BIN"
fi fi
done done
echo "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bes.boot" >> "$APP_BIN"
if [ -f "$APP_DIR/src/main.sh" ]; then if [ -f "$APP_DIR/src/main.sh" ]; then
tail -n +2 "$APP_DIR/src/main.sh" >> "$APP_BIN" tail -n +2 "$APP_DIR/src/main.sh" >> "$APP_BIN"
bes.echo " ${Cspe}- ${Cok}appending ${Coff}src/main.sh" echo.msg " ${Cspe}- ${Cok}appending ${Coff}src/main.sh"
fi fi
bes.echo.state 0 echo.state 0
bes.echo.action "set execution mode" echo.action "set execution mode"
chmod +x $APP_BIN chmod +x $APP_BIN
done=$? done=$?
bes.echo.state $done echo.state $done
bes.echo.rs $done echo.rs $done
else else
bes.echo.error "no src/ directory. exit" echo.error "no src/ directory. exit"
bes.echo.state 1 echo.state 1
fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.build.install ()
{
local path="/usr/share/bes/colors.ini"
if [ ! -f "$path" ]; then
local dir=$(dirname "$path")
if [ ! -d "$dir" ]; then
echo.action "Creating default bes share dir" "$Cspe$dir$Cofff"
sudo mkdir -p "$dir"
echo.state $?
fi
echo.action "Installing default colors file" "$Cspe$path$Cofff"
local tmp=$(mktemp)
echo "[set]
# background foreground
# R G B R G B
head = 53 114 160 195 223 255
headsep = 53 114 160 252 212 102
[bg]
# background
# R G B
done = 63 172 138
fail = 172 63 85
[fg]
# foreground
# R G B
title = 133 92 181
headline = 22 74 133
sep = 80 80 80
err = 194 48 64
val = 255 175 95
key = 40 168 134
action = 106 183 241
symbol = 255 175 95
item = 92 147 181
usa = 255 172 0
spe = 255 214 166
opt = 94 215 255
com = 175 135 175
text = 0 132 101
meta = 39 100 170" > "$tmp"
sudo mv "$tmp" "$path"
echo.state $?
else
echo.action "Installing default colors file" "$Cspe$path$Cofff"
echo.error "file already exists, do not rewrite."
echo.state 1
fi fi
} }
BES_LIB="echo install ini" function bes.build.new () {
local prj=${1}
echo.title "creating new project" "$prj"
if [ -d "$APP_DIR/$prj" ]; then
echo.error "directory $prj already exists" 1
else
echo.action "creating directory" "$prj" "*" "Cusa"
mkdir "$APP_DIR/$prj"
echo.state $?
echo.action "creating project config file" "bes.ini" "*" "Cusa"
echo -e "[project]
vendor =
name = $prj
version = 0.1
license = \"GNU GPL v3\"
author =
type = application
homepage =
description = \"bash bes $prj application\"
keywords = \"bash $prj\"
[require]
bes.install = 1.4
" > "$APP_DIR/$prj/bes.ini"
echo.state $?
echo.action "Creating directory" "src" "*" "Cusa"
mkdir $APP_DIR/$prj/src
echo.state $?
echo.action "Adding default templates" "main" "*" "Cusa"
echo "#!/bin/bash
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_VERSION=0.1
BES_AUTHOR=me
BES_LICENSE=MIT
BES_NAME=\"$prj\"
BES_URL=\"https://your.forge.git/vendor/\$BES_NAME/raw/latest/dist/\$BES_NAME\"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function $prj.main ()
{
echo.msg \"hello bes\" \"\$Citem\"
echo.rs \$?
echo
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.main ()
{
if [ \"\$1\" = \"version\" ] || [ \"\$1\" = \"-v\" ]; then
echo \$BES_VERSION
else
echo.app \"\$BES_NAME\" \"\$BES_VERSION\" \"\$BES_AUTHOR\" \"\$BES_LICENSE\"
echo
if [ \"\$1\" = \"install\" ] || [ \"\$1\" = \"-i\" ]; then
bes.install \"\$BES_NAME\" \"\$BES_URL\" \"\$2\"
elif [ \"\$1\" = \"help\" ] || [ \"\$1\" = \"-h\" ]; then
$prj.usage
else
$prj.main
fi
echo
fi
}
bes.main \$*
" > "$APP_DIR/$prj/src/main.sh"
echo.state $?
echo.action "Adding default template" "usage" "*" "Cusa"
echo "#!/bin/bash
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function $prj.usage ()
{
echo -e \" \${Cusa}Usage :\${Coff}\n
\${Ccom}\tInstall or update \$BES_NAME on specified BINDIR directory or in /usr/local/bin directory
\${Cspe}\t\$BES_NAME \${Copt}-i\${Ctext}, \${Copt}install \${Copt}[ \${Ctext}BINDIR\${Copt} ]
\${Ccom}\tDisplay program version
\${Cspe}\t\$BES_NAME \${Copt}-v\${Ctext}, \${Copt}version
\${Ccom}\tDisplay this help
\${Cspe}\t\$BES_NAME \${Copt}-h\${Ctext}, \${Copt}help\"
echo -e \"${Coff}\"
}
" > "$APP_DIR/$prj/src/usage.sh"
echo.state $?
echo.rs $?
echo
fi
}
function bes.build.require () {
local dep=${1}
echo.msg "coming soon"
echo.rs 1
}
BES_LIB="color echo install ini service secure dep1 dep2"
BES_LOADED_LIB=
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.inlist () function bes.inlist ()
{ {
@ -541,10 +850,119 @@ function bes.inlist ()
return $rs return $rs
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.addLoadedLib ()
{
local sep=" "
if [ -z "$BES_LOADED_LIB" ]; then
sep=""
fi
BES_LOADED_LIB=$BES_LOADED_LIB$sep$1
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.loadExtDep ()
{
local name=$1
local prefix=$2
local key=${name:${#prefix}+1}
local project=${key#*_}
local vendor=${key%_*}
local version=${!name}
if [ ! "$vendor" = "bes" ]; then
echo.title "Loading" "${key//_/.}${Cusa} ${!name}${Coff}"
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
echo.state $?
fi
if [ "${version:0:4}" = "http" ]; then
local req=${!name}
local path=${req#*:}
local tag=${req##*:}
local repo=${req%:*}
echo "$APP_DIR/vendor/$vendor/$project"
echo $(pwd)
if [ ! -d "$APP_DIR/vendor/$vendor/$project" ]; then
mkdir "$APP_DIR/vendor/$vendor"
cd $_
git clone $repo $project
fi
cd "$APP_DIR/vendor/$vendor/$project"
git checkout $tag
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
echo.msg " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
echo.state $?
fi
fi
echo.rs
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.loadDep ()
{
local name=$1
local prefix=$2
local key=${name:${#prefix}+1}
local project=${key#*_}
local vendor=${key%_*}
local version=${!name}
if [ "$vendor" = "bes" ]; then
echo.title "Loading" "${key//_/.}${Cusa} ${!name}${Coff}"
if bes.inlist "$project" "$BES_LIB"; then
if bes.inlist "$project" "$BES_LOADED_LIB"; then
echo.action "dependencies already loaded for ${Cusa}$project"
echo
else
if [ "$bescheck" = "1" ]; then
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
else
echo.action "checking vendor directory ${Cusa}$vendor"
fi
echo.state $?
bescheck=0
echo "[bes_vendor]" > $APP_DIR/vendor/.bes
fi
echo "$project = $version" >> $APP_DIR/vendor/.bes
cd "$APP_DIR/vendor/$vendor"
echo.action "updating repository $Cusa$vendor.$project ${Coff}:$Cusa $version"
if [ ! -d "$project" ]; then
git clone -q "https://gitea.meta-tech.academy/meta-tech/$vendor-$project" "$project" 2>&1 >/dev/null
#~ echo.state $?
cd $project
else
cd $project
git fetch --all -q 2>&1 >/dev/null
#~ echo.state $?
fi
#~ echo.action "checkout to version $Cusa$version"
local branch=$(git branch --no-color | grep \* | cut -d ' ' -f2-)
# branch=${branch:5: -3}
if [ "$branch" != "$version" ]; then
git checkout -q $version 2>&1 >/dev/null
fi
echo.state $?
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
echo.msg " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
echo.state $?
bes.addLoadedLib $project
bes.ini "$APP_DIR/vendor/$vendor/$project/bes.ini" require -p bes$project -b 1
local suballvarname=bes${project}_ALL_VARS
for subname in ${!suballvarname}; do
bes.loadDep "$subname" "bes${project}_require"
done
fi
fi
fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.update () function bes.update ()
{ {
bes.echo.title "Reading Project" $APP_NAME echo.title "Reading Project" $APP_NAME
bes.echo.keyval path $APP_DIR echo.keyval path $APP_DIR
if [ -f $APP_DIR/bes.ini ]; then if [ -f $APP_DIR/bes.ini ]; then
bes.ini $APP_DIR/bes.ini -p bes -b 1 bes.ini $APP_DIR/bes.ini -p bes -b 1
@ -554,98 +972,40 @@ function bes.update ()
for key in $keys; do for key in $keys; do
value="bes_project_$key" value="bes_project_$key"
if [ ! -z "${!value}" ]; then if [ ! -z "${!value}" ]; then
bes.echo.keyval $key "${!value}" echo.keyval $key "${!value}"
fi fi
done done
if [ -f "$APP_DIR/vendor/.bes" ]; then
bes.ini "$APP_DIR/vendor/.bes" bes_vendor -p bessed -b 1
local prefix="bes_vendor"
for name in ${bessed_ALL_VARS}; do
local key=${name:${#prefix}+1}
local project=${key#*_}
bes.addLoadedLib "$project"
done
fi
bes.ini "$APP_DIR/bes.ini" require -p bes -b 1 bes.ini "$APP_DIR/bes.ini" require -p bes -b 1
local prefix="bes_require" local prefix="bes_require"
local key="" local key=""
local bescheck=1; local bescheck=1;
if [ ! -z "${bes_ALL_VARS}" ]; then if [ ! -z "${bes_ALL_VARS}" ]; then
bes.echo.title "Checking Dependencies" echo.title "Checking Dependencies"
for name in ${bes_ALL_VARS}; do for name in ${bes_ALL_VARS}; do
key=${name:${#prefix}+1} key=${name:${#prefix}+1}
bes.echo.keyval ${key//_/.} ${!name} echo.keyval ${key//_/.} ${!name}
done done
echo echo
for name in ${bes_ALL_VARS}; do for name in ${bes_ALL_VARS}; do
key=${name:${#prefix}+1} bes.loadDep "$name" "$prefix"
bes.echo.title "Loading" "${key//_/.}${Cusa} ${!name}${Coff}" bes.loadExtDep "$name" "$prefix"
local project=${key#*_}
local vendor=${key%_*}
local version=${!name}
bes.inlist "$project" "$BES_LIB"
if [ "$vendor" = "bes" ]; then
if bes.inlist "$project" "$BES_LIB"; then
if [ "$bescheck" = "1" ]; then
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
bes.echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
else
bes.echo.action "checking vendor directory ${Cusa}$vendor"
fi
bes.echo.state $?
bescheck=0
fi
cd "$APP_DIR/vendor/$vendor"
bes.echo.action "updating repository $Cusa$vendor.$project ${Coff}:$Cusa $version"
if [ ! -d "$project" ]; then
git clone -q "https://git.pluie.org/meta-tech/$vendor-$project" "$project" 2>&1 >/dev/null
#~ bes.echo.state $?
cd $project
else
cd $project
git fetch --all -q 2>&1 >/dev/null
#~ bes.echo.state $?
fi
#~ bes.echo.action "checkout to version $Cusa$version"
local branch=$(git branch --no-color | grep \* | cut -d ' ' -f2-)
# branch=${branch:5: -3}
if [ "$branch" != "$version" ]; then
git checkout -q $version 2>&1 >/dev/null
fi
bes.echo.state $?
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
bes.echo " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
bes.echo.state $?
fi
else
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
bes.echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
bes.echo.state $?
fi
if [ "${version:0:4}" = "http" ]; then
local req=${!name}
local path=${req#*:}
local tag=${req##*:}
local repo=${req%:*}
echo "$APP_DIR/vendor/$vendor/$project"
echo $(pwd)
if [ ! -d "$APP_DIR/vendor/$vendor/$project" ]; then
mkdir "$APP_DIR/vendor/$vendor"
cd $_
git clone $repo $project
fi
cd "$APP_DIR/vendor/$vendor/$project"
git checkout $tag
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
bes.echo " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
bes.echo.state $?
fi
fi
bes.echo.rs
done done
fi fi
else else
echo echo
bes.echo ' no bes.ini file for your project' echo.msg ' no bes.ini file for your project'
bes.echo.state echo.state
fi fi
} }
@ -653,30 +1013,36 @@ function bes.update ()
function bes.usage () function bes.usage ()
{ {
echo -e " ${Cusa}Usage :${Coff}\n echo -e " ${Cusa}Usage :${Coff}\n
${Ccom}\tCreate new bes project
${Cspe}\t$BES_NAME ${Copt}-n${Ctext}, ${Copt}new ${Copt}[ ${Ctext}PROJECT_NAME${Copt} ]
${Ccom}\tUpdate current project dependencies
${Cspe}\t$BES_NAME ${Copt}-u${Ctext}, ${Copt}update
${Ccom}\tBuild current project (overwrite existing build) ${Ccom}\tBuild current project (overwrite existing build)
${Cspe}\t$APP_NAME ${Copt} ${Cspe}\t$BES_NAME ${Copt}
${Ccom}\tBuild current project and backup existing build ${Ccom}\tBuild current project and backup existing build
${Cspe}\t$APP_NAME ${Copt}-b${Ctext}, ${Copt}backup ${Cspe}\t$BES_NAME ${Copt}-b${Ctext}, ${Copt}backup
${Ccom}\tInstall or update $APP_NAME on specified BINDIR directory or in /etc/local/bin directory ${Ccom}\tInstall or update $APP_NAME on specified BINDIR directory or in /usr/local/bin directory
${Cspe}\t$APP_NAME ${Copt}-i${Ctext}, ${Copt}install ${Copt}[ ${Ctext}BINDIR${Copt} ] ${Cspe}\t$BES_NAME ${Copt}-i${Ctext}, ${Copt}install ${Copt}[ ${Ctext}BINDIR${Copt} ]
${Ccom}\tDisplay program version ${Ccom}\tDisplay program version
${Cspe}\t$APP_NAME ${Copt}-v${Ctext}, ${Copt}version ${Cspe}\t$BES_NAME ${Copt}-v${Ctext}, ${Copt}version
${Ccom}\tDisplay this help ${Ccom}\tDisplay this help
${Cspe}\t$APP_NAME ${Copt}-h${Ctext}, ${Copt}help" ${Cspe}\t$BES_NAME ${Copt}-h${Ctext}, ${Copt}help"
echo -e "${Coff}" echo -e "${Coff}"
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bes.boot
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# #
# @author a-Sansara - https://git.pluie.org/meta-tech/bes-build # @author a-Sansara - https://gitea.meta-tech.academy/meta-tech/bes-build
# @app bes-build # @app bes-build
# @license GNU GPL v3 # @license GNU GPL v3
# @date 2017-06-16 04:38:52 CET # @date 2017-06-16 04:38:52 CET
# #
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_VERSION=0.7 BES_VERSION=0.13
BES_NAME="bes-build" BES_NAME="bes-build"
BES_URL="https://git.pluie.org/meta-tech/$BES_NAME/raw/latest/dist/$BES_NAME" BES_URL="https://gitea.meta-tech.academy/meta-tech/$BES_NAME/raw/latest/dist/$BES_NAME"
APP_DIR=$(pwd) APP_DIR=$(pwd)
APP_NAME=$(basename $(pwd)) APP_NAME=$(basename $(pwd))
APP_BIN=$APP_DIR/dist/$APP_NAME APP_BIN=$APP_DIR/dist/$APP_NAME
@ -687,17 +1053,33 @@ function bes.main ()
if [ "$1" = "version" ] || [ "$1" = "-v" ]; then if [ "$1" = "version" ] || [ "$1" = "-v" ]; then
echo $BES_VERSION echo $BES_VERSION
else else
bes.echo.app "$BES_NAME" "$BES_VERSION" echo.app "$BES_NAME" "$BES_VERSION"
echo echo
enusage=0
if [ "$1" = "install" ] || [ "$1" = "-i" ]; then if [ "$1" = "install" ] || [ "$1" = "-i" ]; then
bes.install "$BES_NAME" "$BES_URL" "$2" bes.install "$BES_NAME" "$BES_URL" "$2" "bes.build.install"
elif [ "$1" = "help" ] || [ "$1" = "-h" ]; then elif [ "$1" = "help" ] || [ "$1" = "-h" ]; then
bes.usage enusage=1
elif [ "$1" = "update" ] || [ "$1" = "-u" ]; then elif [ "$1" = "update" ] || [ "$1" = "-u" ]; then
bes.update bes.update
elif [ "$1" = "new" ] || [ "$1" = "-n" ]; then
if [ ! -z "$2" ]; then
bes.build.new $2
else
enusage=1
fi
elif [ "$1" = "require" ] || [ "$1" = "-r" ]; then
if [ ! -z "$2" ]; then
bes.build.require $2
else
enusage=1
fi
elif [ -z "$1" ] || [ "$1" = "backup" ] || [ "$1" = "-b" ]; then elif [ -z "$1" ] || [ "$1" = "backup" ] || [ "$1" = "-b" ]; then
bes.build "$1" bes.build "$1"
fi fi
if [ "$enusage" = "1" ]; then
bes.usage
fi
echo echo
fi fi
} }

View File

@ -3,25 +3,53 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.build () function bes.build ()
{ {
bes.echo.title "building project" "$APP_NAME" echo.title "building project" "$APP_NAME"
if [ -d "$APP_DIR/src" ]; then if [ -d "$APP_DIR/src" ]; then
if [ ! -d "$APP_DIR/dist" ]; then if [ ! -d "$APP_DIR/dist" ]; then
bes.echo.action "creating dist directory" echo.action "creating dist directory"
mkdir $APP_DIR/dist mkdir $APP_DIR/dist
bes.echo.state $? echo.state $?
fi fi
if [ -f "$APP_BIN" ]; then if [ -f "$APP_BIN" ]; then
if [ "$1" = "backup" ] || [ "$1" = "-b" ]; then if [ "$1" = "backup" ] || [ "$1" = "-b" ]; then
bes.echo.action "backup last build to ${Coff}dist/$(date +%y%m%d)-$APP_NAME${Coff}" echo.action "backup last build to ${Coff}dist/$(date +%y%m%d)-$APP_NAME${Coff}"
mv $APP_BIN $APP_DIR/dist/$(date +%y%m%d)-$APP_NAME mv $APP_BIN $APP_DIR/dist/$(date +%y%m%d)-$APP_NAME
else else
bes.echo.action "removing ${Coff}dist/$APP_NAME${Coff}" echo.action "removing ${Coff}dist/$APP_NAME${Coff}"
rm $APP_BIN rm $APP_BIN
fi fi
bes.echo.state $? echo.state $?
fi fi
echo "#!/bin/bash" > $APP_BIN echo "#!/bin/bash
bes.echo.action "reading ${Coff}dependencies" # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_BOOT=
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.exists () {
declare -f \$1 > /dev/null
#~ [ x\$(type -t \$1) = xfunction ];
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.boot ()
{
for fn in \$BES_BOOT; do
if bes.exists \$fn.boot; then
\$fn.boot
fi
done
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.reg ()
{
local sep=\" \"
if [ -z \"\$BES_BOOT\" ]; then
sep=\"\"
fi
BES_BOOT=\$BES_BOOT\$sep\$1
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
" > $APP_BIN
#~ echo "#!/bin/bash" > $APP_BIN
echo.action "reading ${Coff}dependencies"
if [ -d "$APP_DIR/vendor" ]; then if [ -d "$APP_DIR/vendor" ]; then
for vendor in $(ls $APP_DIR/vendor/); do for vendor in $(ls $APP_DIR/vendor/); do
if [ "$vendor" != "." ] && [ "$vendor" != ".." ]; then if [ "$vendor" != "." ] && [ "$vendor" != ".." ]; then
@ -31,7 +59,7 @@ function bes.build ()
local entrypath="$APP_DIR/vendor/$vendor/$project/src/$(basename $entry)" local entrypath="$APP_DIR/vendor/$vendor/$project/src/$(basename $entry)"
if [ -f "$entrypath" ] && [ "${entrypath: -3}" = ".sh" ]; then if [ -f "$entrypath" ] && [ "${entrypath: -3}" = ".sh" ]; then
tail -n +2 "$entrypath" >> "$APP_BIN" tail -n +2 "$entrypath" >> "$APP_BIN"
bes.echo " ${Cspe}- ${Cok}appending ${Cusa}$vendorName/$project/${Coff}src/$(basename $entry)" echo.msg " ${Cspe}- ${Cok}appending ${Cusa}$vendorName/$project/${Coff}src/$(basename $entry)"
fi fi
done done
fi fi
@ -39,29 +67,82 @@ function bes.build ()
fi fi
done done
else else
bes.echo " no dependencies, did you forget to run bes-build update ?" echo.msg " no dependencies, did you forget to run bes-build update ?"
fi fi
bes.echo.state 0 echo.state 0
bes.echo.action "reading ${Coff}src/" echo.action "reading ${Coff}src/"
for entry in "$APP_DIR/src"/*.sh; do for entry in "$APP_DIR/src"/*.sh; do
if [ "$(basename $entry)" != "main.sh" ]; then if [ "$(basename $entry)" != "main.sh" ]; then
bes.echo " ${Cspe}- ${Cok}appending ${Coff}src/$(basename $entry)" echo.msg " ${Cspe}- ${Cok}appending ${Coff}src/$(basename $entry)"
tail -n +2 "$entry" >> "$APP_BIN" tail -n +2 "$entry" >> "$APP_BIN"
fi fi
done done
echo "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bes.boot" >> "$APP_BIN"
if [ -f "$APP_DIR/src/main.sh" ]; then if [ -f "$APP_DIR/src/main.sh" ]; then
tail -n +2 "$APP_DIR/src/main.sh" >> "$APP_BIN" tail -n +2 "$APP_DIR/src/main.sh" >> "$APP_BIN"
bes.echo " ${Cspe}- ${Cok}appending ${Coff}src/main.sh" echo.msg " ${Cspe}- ${Cok}appending ${Coff}src/main.sh"
fi fi
bes.echo.state 0 echo.state 0
bes.echo.action "set execution mode" echo.action "set execution mode"
chmod +x $APP_BIN chmod +x $APP_BIN
done=$? done=$?
bes.echo.state $done echo.state $done
bes.echo.rs $done echo.rs $done
else else
bes.echo.error "no src/ directory. exit" echo.error "no src/ directory. exit"
bes.echo.state 1 echo.state 1
fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.build.install ()
{
local path="/usr/share/bes/colors.ini"
if [ ! -f "$path" ]; then
local dir=$(dirname "$path")
if [ ! -d "$dir" ]; then
echo.action "Creating default bes share dir" "$Cspe$dir$Cofff"
sudo mkdir -p "$dir"
echo.state $?
fi
echo.action "Installing default colors file" "$Cspe$path$Cofff"
local tmp=$(mktemp)
echo "[set]
# background foreground
# R G B R G B
head = 53 114 160 195 223 255
headsep = 53 114 160 252 212 102
[bg]
# background
# R G B
done = 63 172 138
fail = 172 63 85
[fg]
# foreground
# R G B
title = 133 92 181
headline = 22 74 133
sep = 80 80 80
err = 194 48 64
val = 255 175 95
key = 40 168 134
action = 106 183 241
symbol = 255 175 95
item = 92 147 181
usa = 255 172 0
spe = 255 214 166
opt = 94 215 255
com = 175 135 175
text = 0 132 101
meta = 39 100 170" > "$tmp"
sudo mv "$tmp" "$path"
echo.state $?
else
echo.action "Installing default colors file" "$Cspe$path$Cofff"
echo.error "file already exists, do not rewrite."
echo.state 1
fi fi
} }

View File

@ -1,15 +1,15 @@
#!/bin/bash #!/bin/bash
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# #
# @author a-Sansara - https://git.pluie.org/meta-tech/bes-build # @author a-Sansara - https://gitea.meta-tech.academy/meta-tech/bes-build
# @app bes-build # @app bes-build
# @license GNU GPL v3 # @license GNU GPL v3
# @date 2017-06-16 04:38:52 CET # @date 2017-06-16 04:38:52 CET
# #
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_VERSION=0.7 BES_VERSION=0.13
BES_NAME="bes-build" BES_NAME="bes-build"
BES_URL="https://git.pluie.org/meta-tech/$BES_NAME/raw/latest/dist/$BES_NAME" BES_URL="https://gitea.meta-tech.academy/meta-tech/$BES_NAME/raw/latest/dist/$BES_NAME"
APP_DIR=$(pwd) APP_DIR=$(pwd)
APP_NAME=$(basename $(pwd)) APP_NAME=$(basename $(pwd))
APP_BIN=$APP_DIR/dist/$APP_NAME APP_BIN=$APP_DIR/dist/$APP_NAME
@ -20,17 +20,33 @@ function bes.main ()
if [ "$1" = "version" ] || [ "$1" = "-v" ]; then if [ "$1" = "version" ] || [ "$1" = "-v" ]; then
echo $BES_VERSION echo $BES_VERSION
else else
bes.echo.app "$BES_NAME" "$BES_VERSION" echo.app "$BES_NAME" "$BES_VERSION"
echo echo
enusage=0
if [ "$1" = "install" ] || [ "$1" = "-i" ]; then if [ "$1" = "install" ] || [ "$1" = "-i" ]; then
bes.install "$BES_NAME" "$BES_URL" "$2" bes.install "$BES_NAME" "$BES_URL" "$2" "bes.build.install"
elif [ "$1" = "help" ] || [ "$1" = "-h" ]; then elif [ "$1" = "help" ] || [ "$1" = "-h" ]; then
bes.usage enusage=1
elif [ "$1" = "update" ] || [ "$1" = "-u" ]; then elif [ "$1" = "update" ] || [ "$1" = "-u" ]; then
bes.update bes.update
elif [ "$1" = "new" ] || [ "$1" = "-n" ]; then
if [ ! -z "$2" ]; then
bes.build.new $2
else
enusage=1
fi
elif [ "$1" = "require" ] || [ "$1" = "-r" ]; then
if [ ! -z "$2" ]; then
bes.build.require $2
else
enusage=1
fi
elif [ -z "$1" ] || [ "$1" = "backup" ] || [ "$1" = "-b" ]; then elif [ -z "$1" ] || [ "$1" = "backup" ] || [ "$1" = "-b" ]; then
bes.build "$1" bes.build "$1"
fi fi
if [ "$enusage" = "1" ]; then
bes.usage
fi
echo echo
fi fi
} }

90
src/new.sh Normal file
View File

@ -0,0 +1,90 @@
#!/bin/bash
function bes.build.new () {
local prj=${1}
echo.title "creating new project" "$prj"
if [ -d "$APP_DIR/$prj" ]; then
echo.error "directory $prj already exists" 1
else
echo.action "creating directory" "$prj" "*" "Cusa"
mkdir "$APP_DIR/$prj"
echo.state $?
echo.action "creating project config file" "bes.ini" "*" "Cusa"
echo -e "[project]
vendor =
name = $prj
version = 0.1
license = \"GNU GPL v3\"
author =
type = application
homepage =
description = \"bash bes $prj application\"
keywords = \"bash $prj\"
[require]
bes.install = 1.4
" > "$APP_DIR/$prj/bes.ini"
echo.state $?
echo.action "Creating directory" "src" "*" "Cusa"
mkdir $APP_DIR/$prj/src
echo.state $?
echo.action "Adding default templates" "main" "*" "Cusa"
echo "#!/bin/bash
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BES_VERSION=0.1
BES_AUTHOR=me
BES_LICENSE=MIT
BES_NAME=\"$prj\"
BES_URL=\"https://your.forge.git/vendor/\$BES_NAME/raw/latest/dist/\$BES_NAME\"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function $prj.main ()
{
echo.msg \"hello bes\" \"\$Citem\"
echo.rs \$?
echo
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.main ()
{
if [ \"\$1\" = \"version\" ] || [ \"\$1\" = \"-v\" ]; then
echo \$BES_VERSION
else
echo.app \"\$BES_NAME\" \"\$BES_VERSION\" \"\$BES_AUTHOR\" \"\$BES_LICENSE\"
echo
if [ \"\$1\" = \"install\" ] || [ \"\$1\" = \"-i\" ]; then
bes.install \"\$BES_NAME\" \"\$BES_URL\" \"\$2\"
elif [ \"\$1\" = \"help\" ] || [ \"\$1\" = \"-h\" ]; then
$prj.usage
else
$prj.main
fi
echo
fi
}
bes.main \$*
" > "$APP_DIR/$prj/src/main.sh"
echo.state $?
echo.action "Adding default template" "usage" "*" "Cusa"
echo "#!/bin/bash
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function $prj.usage ()
{
echo -e \" \${Cusa}Usage :\${Coff}\n
\${Ccom}\tInstall or update \$BES_NAME on specified BINDIR directory or in /usr/local/bin directory
\${Cspe}\t\$BES_NAME \${Copt}-i\${Ctext}, \${Copt}install \${Copt}[ \${Ctext}BINDIR\${Copt} ]
\${Ccom}\tDisplay program version
\${Cspe}\t\$BES_NAME \${Copt}-v\${Ctext}, \${Copt}version
\${Ccom}\tDisplay this help
\${Cspe}\t\$BES_NAME \${Copt}-h\${Ctext}, \${Copt}help\"
echo -e \"${Coff}\"
}
" > "$APP_DIR/$prj/src/usage.sh"
echo.state $?
echo.rs $?
echo
fi
}

7
src/require.sh Normal file
View File

@ -0,0 +1,7 @@
#!/bin/bash
function bes.build.require () {
local dep=${1}
echo.msg "coming soon"
echo.rs 1
}

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
BES_LIB="echo install ini" BES_LIB="color echo install ini service secure dep1 dep2"
BES_LOADED_LIB=
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.inlist () function bes.inlist ()
{ {
@ -12,10 +12,119 @@ function bes.inlist ()
return $rs return $rs
} }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.addLoadedLib ()
{
local sep=" "
if [ -z "$BES_LOADED_LIB" ]; then
sep=""
fi
BES_LOADED_LIB=$BES_LOADED_LIB$sep$1
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.loadExtDep ()
{
local name=$1
local prefix=$2
local key=${name:${#prefix}+1}
local project=${key#*_}
local vendor=${key%_*}
local version=${!name}
if [ ! "$vendor" = "bes" ]; then
echo.title "Loading" "${key//_/.}${Cusa} ${!name}${Coff}"
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
echo.state $?
fi
if [ "${version:0:4}" = "http" ]; then
local req=${!name}
local path=${req#*:}
local tag=${req##*:}
local repo=${req%:*}
echo "$APP_DIR/vendor/$vendor/$project"
echo $(pwd)
if [ ! -d "$APP_DIR/vendor/$vendor/$project" ]; then
mkdir "$APP_DIR/vendor/$vendor"
cd $_
git clone $repo $project
fi
cd "$APP_DIR/vendor/$vendor/$project"
git checkout $tag
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
echo.msg " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
echo.state $?
fi
fi
echo.rs
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.loadDep ()
{
local name=$1
local prefix=$2
local key=${name:${#prefix}+1}
local project=${key#*_}
local vendor=${key%_*}
local version=${!name}
if [ "$vendor" = "bes" ]; then
echo.title "Loading" "${key//_/.}${Cusa} ${!name}${Coff}"
if bes.inlist "$project" "$BES_LIB"; then
if bes.inlist "$project" "$BES_LOADED_LIB"; then
echo.action "dependencies already loaded for ${Cusa}$project"
echo
else
if [ "$bescheck" = "1" ]; then
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
else
echo.action "checking vendor directory ${Cusa}$vendor"
fi
echo.state $?
bescheck=0
echo "[bes_vendor]" > $APP_DIR/vendor/.bes
fi
echo "$project = $version" >> $APP_DIR/vendor/.bes
cd "$APP_DIR/vendor/$vendor"
echo.action "updating repository $Cusa$vendor.$project ${Coff}:$Cusa $version"
if [ ! -d "$project" ]; then
git clone -q "https://gitea.meta-tech.academy/meta-tech/$vendor-$project" "$project" 2>&1 >/dev/null
#~ echo.state $?
cd $project
else
cd $project
git fetch --all -q 2>&1 >/dev/null
#~ echo.state $?
fi
#~ echo.action "checkout to version $Cusa$version"
local branch=$(git branch --no-color | grep \* | cut -d ' ' -f2-)
# branch=${branch:5: -3}
if [ "$branch" != "$version" ]; then
git checkout -q $version 2>&1 >/dev/null
fi
echo.state $?
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
echo.msg " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
echo.state $?
bes.addLoadedLib $project
bes.ini "$APP_DIR/vendor/$vendor/$project/bes.ini" require -p bes$project -b 1
local suballvarname=bes${project}_ALL_VARS
for subname in ${!suballvarname}; do
bes.loadDep "$subname" "bes${project}_require"
done
fi
fi
fi
}
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function bes.update () function bes.update ()
{ {
bes.echo.title "Reading Project" $APP_NAME echo.title "Reading Project" $APP_NAME
bes.echo.keyval path $APP_DIR echo.keyval path $APP_DIR
if [ -f $APP_DIR/bes.ini ]; then if [ -f $APP_DIR/bes.ini ]; then
bes.ini $APP_DIR/bes.ini -p bes -b 1 bes.ini $APP_DIR/bes.ini -p bes -b 1
@ -25,97 +134,39 @@ function bes.update ()
for key in $keys; do for key in $keys; do
value="bes_project_$key" value="bes_project_$key"
if [ ! -z "${!value}" ]; then if [ ! -z "${!value}" ]; then
bes.echo.keyval $key "${!value}" echo.keyval $key "${!value}"
fi fi
done done
if [ -f "$APP_DIR/vendor/.bes" ]; then
bes.ini "$APP_DIR/vendor/.bes" bes_vendor -p bessed -b 1
local prefix="bes_vendor"
for name in ${bessed_ALL_VARS}; do
local key=${name:${#prefix}+1}
local project=${key#*_}
bes.addLoadedLib "$project"
done
fi
bes.ini "$APP_DIR/bes.ini" require -p bes -b 1 bes.ini "$APP_DIR/bes.ini" require -p bes -b 1
local prefix="bes_require" local prefix="bes_require"
local key="" local key=""
local bescheck=1; local bescheck=1;
if [ ! -z "${bes_ALL_VARS}" ]; then if [ ! -z "${bes_ALL_VARS}" ]; then
bes.echo.title "Checking Dependencies" echo.title "Checking Dependencies"
for name in ${bes_ALL_VARS}; do for name in ${bes_ALL_VARS}; do
key=${name:${#prefix}+1} key=${name:${#prefix}+1}
bes.echo.keyval ${key//_/.} ${!name} echo.keyval ${key//_/.} ${!name}
done done
echo echo
for name in ${bes_ALL_VARS}; do for name in ${bes_ALL_VARS}; do
key=${name:${#prefix}+1} bes.loadDep "$name" "$prefix"
bes.echo.title "Loading" "${key//_/.}${Cusa} ${!name}${Coff}" bes.loadExtDep "$name" "$prefix"
local project=${key#*_}
local vendor=${key%_*}
local version=${!name}
bes.inlist "$project" "$BES_LIB"
if [ "$vendor" = "bes" ]; then
if bes.inlist "$project" "$BES_LIB"; then
if [ "$bescheck" = "1" ]; then
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
bes.echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
else
bes.echo.action "checking vendor directory ${Cusa}$vendor"
fi
bes.echo.state $?
bescheck=0
fi
cd "$APP_DIR/vendor/$vendor"
bes.echo.action "updating repository $Cusa$vendor.$project ${Coff}:$Cusa $version"
if [ ! -d "$project" ]; then
git clone -q "https://git.pluie.org/meta-tech/$vendor-$project" "$project" 2>&1 >/dev/null
#~ bes.echo.state $?
cd $project
else
cd $project
git fetch --all -q 2>&1 >/dev/null
#~ bes.echo.state $?
fi
#~ bes.echo.action "checkout to version $Cusa$version"
local branch=$(git branch --no-color | grep \* | cut -d ' ' -f2-)
# branch=${branch:5: -3}
if [ "$branch" != "$version" ]; then
git checkout -q $version 2>&1 >/dev/null
fi
bes.echo.state $?
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
bes.echo " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
bes.echo.state $?
fi
else
if [ ! -d "$APP_DIR/vendor/$vendor" ]; then
bes.echo.action "creating vendor directory ${Cusa}$vendor"
mkdir -p "$APP_DIR/vendor/$vendor"
bes.echo.state $?
fi
if [ "${version:0:4}" = "http" ]; then
local req=${!name}
local path=${req#*:}
local tag=${req##*:}
local repo=${req%:*}
echo "$APP_DIR/vendor/$vendor/$project"
echo $(pwd)
if [ ! -d "$APP_DIR/vendor/$vendor/$project" ]; then
mkdir "$APP_DIR/vendor/$vendor"
cd $_
git clone $repo $project
fi
cd "$APP_DIR/vendor/$vendor/$project"
git checkout $tag
for entry in "$APP_DIR/vendor/$vendor/$project/src"/*.sh; do
bes.echo " ${Cspe}- ${Cok}set for autoloading ${Coff}src/$(basename $entry)"
# tail -n +2 "$entry" >> "$APP_BIN"
done
bes.echo.state $?
fi
fi
bes.echo.rs
done done
fi fi
else else
echo echo
bes.echo ' no bes.ini file for your project' echo.msg ' no bes.ini file for your project'
bes.echo.state echo.state
fi fi
} }

View File

@ -4,16 +4,20 @@
function bes.usage () function bes.usage ()
{ {
echo -e " ${Cusa}Usage :${Coff}\n echo -e " ${Cusa}Usage :${Coff}\n
${Ccom}\tCreate new bes project
${Cspe}\t$BES_NAME ${Copt}-n${Ctext}, ${Copt}new ${Copt}[ ${Ctext}PROJECT_NAME${Copt} ]
${Ccom}\tUpdate current project dependencies
${Cspe}\t$BES_NAME ${Copt}-u${Ctext}, ${Copt}update
${Ccom}\tBuild current project (overwrite existing build) ${Ccom}\tBuild current project (overwrite existing build)
${Cspe}\t$APP_NAME ${Copt} ${Cspe}\t$BES_NAME ${Copt}
${Ccom}\tBuild current project and backup existing build ${Ccom}\tBuild current project and backup existing build
${Cspe}\t$APP_NAME ${Copt}-b${Ctext}, ${Copt}backup ${Cspe}\t$BES_NAME ${Copt}-b${Ctext}, ${Copt}backup
${Ccom}\tInstall or update $APP_NAME on specified BINDIR directory or in /etc/local/bin directory ${Ccom}\tInstall or update $APP_NAME on specified BINDIR directory or in /usr/local/bin directory
${Cspe}\t$APP_NAME ${Copt}-i${Ctext}, ${Copt}install ${Copt}[ ${Ctext}BINDIR${Copt} ] ${Cspe}\t$BES_NAME ${Copt}-i${Ctext}, ${Copt}install ${Copt}[ ${Ctext}BINDIR${Copt} ]
${Ccom}\tDisplay program version ${Ccom}\tDisplay program version
${Cspe}\t$APP_NAME ${Copt}-v${Ctext}, ${Copt}version ${Cspe}\t$BES_NAME ${Copt}-v${Ctext}, ${Copt}version
${Ccom}\tDisplay this help ${Ccom}\tDisplay this help
${Cspe}\t$APP_NAME ${Copt}-h${Ctext}, ${Copt}help" ${Cspe}\t$BES_NAME ${Copt}-h${Ctext}, ${Copt}help"
echo -e "${Coff}" echo -e "${Coff}"
} }