mirror of
https://github.com/TangentFoxy/love-release.git
synced 2025-07-28 11:02:20 +00:00
Modules and functions have return values
Modules can now use return values with the exit_module function. Some return values are predefined, use them by passing special string to the function. Most of the functions also switched from a echo "true" to return 0 scheme, which means that every test involving theses functions was rewritten. No more need for the reset_vars function, as modules are run in subshells, thus providing a new scope level. The case when no modules is specified is better handled, a LÖVE file is created by default.
This commit is contained in:
2
Makefile
2
Makefile
@@ -28,7 +28,7 @@ embedded: clean
|
|||||||
sed 's/EMBEDDED=false/EMBEDDED=true/' love-release.sh > '$(BUILD_DIR)/love-release.sh'
|
sed 's/EMBEDDED=false/EMBEDDED=true/' love-release.sh > '$(BUILD_DIR)/love-release.sh'
|
||||||
for file in scripts/*.sh; do \
|
for file in scripts/*.sh; do \
|
||||||
module="$$(basename -s '.sh' "$$file")"; \
|
module="$$(basename -s '.sh' "$$file")"; \
|
||||||
content='(source <(cat <<\EndOfModule'$$'\n'"$$(cat $$file)"$$'\n''EndOfModule'$$'\n''))'$$'\n\n'; \
|
content='(source <(cat <<\EndOfModule'$$'\n'"$$(cat $$file)"$$'\n''EndOfModule'$$'\n''))'$$'\n''default_module'$$'\n\n'; \
|
||||||
echo "$$content" >> "$(BUILD_DIR)/tmp"; \
|
echo "$$content" >> "$(BUILD_DIR)/tmp"; \
|
||||||
done
|
done
|
||||||
sed -i.bak -e '/include_scripts_here$$/r $(BUILD_DIR)/tmp' '$(BUILD_DIR)/love-release.sh';
|
sed -i.bak -e '/include_scripts_here$$/r $(BUILD_DIR)/tmp' '$(BUILD_DIR)/love-release.sh';
|
||||||
|
148
love-release.sh
148
love-release.sh
@@ -8,8 +8,7 @@ LOVE_DEF_VERSION=0.9.2
|
|||||||
# Helper functions
|
# Helper functions
|
||||||
|
|
||||||
# Dependencies check
|
# Dependencies check
|
||||||
check_deps ()
|
check_deps () {
|
||||||
{
|
|
||||||
command -v curl > /dev/null 2>&1 || {
|
command -v curl > /dev/null 2>&1 || {
|
||||||
echo "curl is not installed. Aborting."
|
echo "curl is not installed. Aborting."
|
||||||
local EXIT=true
|
local EXIT=true
|
||||||
@@ -32,35 +31,27 @@ check_deps ()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Reset script variables
|
|
||||||
reset_vars () {
|
|
||||||
TITLE="$(basename $(pwd))"
|
|
||||||
MODULE=
|
|
||||||
RELEASE_DIR=releases
|
|
||||||
CACHE_DIR=~/.cache/love-release
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get user confirmation, simple Yes/No question
|
# Get user confirmation, simple Yes/No question
|
||||||
## $1: message, usually just a question
|
## $1: message, usually just a question
|
||||||
## $2: default choice, 0 - no; 1 - yes, default - yes
|
## $2: default choice, 0 - yes; 1 - no, default - yes
|
||||||
## return: true - yes
|
## return: 0 - yes, 1 - no
|
||||||
get_user_confirmation () {
|
get_user_confirmation () {
|
||||||
if [[ $2 == "0" ]]; then
|
if [[ -z $2 || $2 == "0" ]]; then
|
||||||
read -n 1 -p "$1 [y/N]: " yn
|
|
||||||
local default=false
|
|
||||||
else
|
|
||||||
read -n 1 -p "$1 [Y/n]: " yn
|
read -n 1 -p "$1 [Y/n]: " yn
|
||||||
local default=true
|
local default=0
|
||||||
|
else
|
||||||
|
read -n 1 -p "$1 [y/N]: " yn
|
||||||
|
local default=1
|
||||||
fi
|
fi
|
||||||
case $yn in
|
case $yn in
|
||||||
[Yy]* )
|
[Yy]* )
|
||||||
echo "true"; echo >> "$(tty)";;
|
echo; return 0;;
|
||||||
[Nn]* )
|
[Nn]* )
|
||||||
echo "false"; echo >> "$(tty)";;
|
echo; return 1;;
|
||||||
"" )
|
"" )
|
||||||
echo "$default";;
|
return $default;;
|
||||||
* )
|
* )
|
||||||
echo "$default"; echo >> "$(tty)";;
|
echo; return $default;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,54 +74,52 @@ gen_version () {
|
|||||||
## "ge", "le", "gt" "lt"
|
## "ge", "le", "gt" "lt"
|
||||||
## ">=", "<=", ">", "<"
|
## ">=", "<=", ">", "<"
|
||||||
## $3: Second LÖVE version
|
## $3: Second LÖVE version
|
||||||
## return: "true" or "false"
|
## return: 0 - true, 1 - false
|
||||||
compare_version () {
|
compare_version () {
|
||||||
if [[ $1 =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
if [[ $1 =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
||||||
local v1_maj=${BASH_REMATCH[1]}
|
local v1_maj=${BASH_REMATCH[1]}
|
||||||
local v1_min=${BASH_REMATCH[2]}
|
local v1_min=${BASH_REMATCH[2]}
|
||||||
local v1_rev=${BASH_REMATCH[3]}
|
local v1_rev=${BASH_REMATCH[3]}
|
||||||
else
|
else
|
||||||
echo "false"
|
return 1
|
||||||
return
|
|
||||||
fi
|
fi
|
||||||
if [[ $2 =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
if [[ $2 =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
||||||
local v2_maj=${BASH_REMATCH[1]}
|
local v2_maj=${BASH_REMATCH[1]}
|
||||||
local v2_min=${BASH_REMATCH[2]}
|
local v2_min=${BASH_REMATCH[2]}
|
||||||
local v2_rev=${BASH_REMATCH[3]}
|
local v2_rev=${BASH_REMATCH[3]}
|
||||||
else
|
else
|
||||||
echo "false"
|
return 1
|
||||||
return
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case $2 in
|
case $2 in
|
||||||
ge|\>= )
|
ge|\>= )
|
||||||
if (( $v1_maj >= $v2_maj && $v1_min >= $v2_min && $v1_rev >= $v2_rev )); then
|
if (( $v1_maj >= $v2_maj && $v1_min >= $v2_min && $v1_rev >= $v2_rev )); then
|
||||||
echo "true"
|
return 0
|
||||||
else
|
else
|
||||||
echo "false"
|
return 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
le|\<= )
|
le|\<= )
|
||||||
if (( $v1_maj <= $v2_maj && $v1_min <= $v2_min && $v1_rev <= $v2_rev )); then
|
if (( $v1_maj <= $v2_maj && $v1_min <= $v2_min && $v1_rev <= $v2_rev )); then
|
||||||
echo "true"
|
return 0
|
||||||
else
|
else
|
||||||
echo "false"
|
return 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
gt|\> )
|
gt|\> )
|
||||||
if (( $v1_maj > $v2_maj || ( $v1_max == $v2_max && $v1_min > $v2_min ) ||
|
if (( $v1_maj > $v2_maj || ( $v1_max == $v2_max && $v1_min > $v2_min ) ||
|
||||||
( $v1_max == $v2_max && $v1_min == $v2_min && $v1_rev > $v2_rev ) )); then
|
( $v1_max == $v2_max && $v1_min == $v2_min && $v1_rev > $v2_rev ) )); then
|
||||||
echo "true"
|
return 0
|
||||||
else
|
else
|
||||||
echo "false"
|
return 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
lt|\< )
|
lt|\< )
|
||||||
if (( $v1_maj < $v2_maj || ( $v1_max == $v2_max && $v1_min < $v2_min ) ||
|
if (( $v1_maj < $v2_maj || ( $v1_max == $v2_max && $v1_min < $v2_min ) ||
|
||||||
( $v1_max == $v2_max && $v1_min == $v2_min && $v1_rev < $v2_rev ) )); then
|
( $v1_max == $v2_max && $v1_min == $v2_min && $v1_rev < $v2_rev ) )); then
|
||||||
echo "true"
|
return 0
|
||||||
else
|
else
|
||||||
echo "false"
|
return 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -139,7 +128,7 @@ compare_version () {
|
|||||||
|
|
||||||
# Escape directory name for zip
|
# Escape directory name for zip
|
||||||
## $1: directory path
|
## $1: directory path
|
||||||
## return: escaped directory path
|
## echo: escaped directory path
|
||||||
dir_escape () {
|
dir_escape () {
|
||||||
local dir="$1"
|
local dir="$1"
|
||||||
if [ -d "$dir" ]; then
|
if [ -d "$dir" ]; then
|
||||||
@@ -183,7 +172,11 @@ for _, v in ipairs(t.os) do
|
|||||||
t.os[v] = {}
|
t.os[v] = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
if not t.os or #t.os == 0 then t.os.love = {} end
|
if os == "default" then
|
||||||
|
if not t.os then t.os = {} end
|
||||||
|
if not t.os.love then t.os.love = {} end
|
||||||
|
os = "love"
|
||||||
|
end
|
||||||
|
|
||||||
if t.os[os] then
|
if t.os[os] then
|
||||||
print(os:upper()..'=true')
|
print(os:upper()..'=true')
|
||||||
@@ -220,6 +213,13 @@ EOF
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Test if default module should be executed
|
||||||
|
default_module () {
|
||||||
|
if [[ $? -ne 2 ]]; then
|
||||||
|
DEFAULT_MODULE=false
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
dump_var () {
|
dump_var () {
|
||||||
echo "LOVE_VERSION=$LOVE_VERSION"
|
echo "LOVE_VERSION=$LOVE_VERSION"
|
||||||
echo "LOVE_DEF_VERSION=$LOVE_DEF_VERSION"
|
echo "LOVE_DEF_VERSION=$LOVE_DEF_VERSION"
|
||||||
@@ -244,38 +244,26 @@ dump_var () {
|
|||||||
|
|
||||||
# Test if module should be executed
|
# Test if module should be executed
|
||||||
## $1: Module name
|
## $1: Module name
|
||||||
## return: true if module should be executed
|
## return: 0 - if module should be executed, else exit 2
|
||||||
execute_module ()
|
execute_module () {
|
||||||
{
|
|
||||||
reset_vars
|
|
||||||
local module="$1"
|
local module="$1"
|
||||||
read_config "$module"
|
read_config "$module"
|
||||||
module=${module^^}
|
module=${module^^}
|
||||||
if [[ ${!module} == true ]]; then
|
if [[ ${!module} == true ]]; then
|
||||||
if [[ -z $DEFAULT_MODULE ]]; then
|
if compare_version "$LOVE_VERSION" ">" "$VERSION"; then
|
||||||
if [[ ${module} == "LOVE" ]]; then
|
echo "LÖVE $LOVE_VERSION is out ! Your project uses LÖVE ${VERSION}."
|
||||||
DEFAULT_MODULE=true
|
|
||||||
else
|
|
||||||
DEFAULT_MODULE=false
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ $(compare_version "$LOVE_VERSION" ">" "$VERSION") == true ]]; then
|
|
||||||
if [[ $(get_user_confirmation "LÖVE $LOVE_VERSION is out ! Your project uses LÖVE $VERSION. Continue ?") == false ]]; then
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
gen_version $VERSION
|
gen_version $VERSION
|
||||||
unset VERSION
|
unset VERSION
|
||||||
fi
|
fi
|
||||||
|
return 0
|
||||||
else
|
else
|
||||||
reset_vars
|
exit_module "execute"
|
||||||
fi
|
fi
|
||||||
echo "${!module}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Init module
|
# Init module
|
||||||
## $1: Pretty module name
|
## $1: Pretty module name
|
||||||
init_module ()
|
init_module () {
|
||||||
{
|
|
||||||
MODULE="$1"
|
MODULE="$1"
|
||||||
mkdir -p "$RELEASE_DIR"
|
mkdir -p "$RELEASE_DIR"
|
||||||
mkdir -p "$CACHE_DIR"
|
mkdir -p "$CACHE_DIR"
|
||||||
@@ -284,8 +272,7 @@ init_module ()
|
|||||||
|
|
||||||
# Create the LÖVE file
|
# Create the LÖVE file
|
||||||
## $1: Compression level 0-9
|
## $1: Compression level 0-9
|
||||||
create_love_file ()
|
create_love_file () {
|
||||||
{
|
|
||||||
LOVE_FILE="$RELEASE_DIR"/"$TITLE".love
|
LOVE_FILE="$RELEASE_DIR"/"$TITLE".love
|
||||||
zip -FS -$1 -r "$LOVE_FILE" \
|
zip -FS -$1 -r "$LOVE_FILE" \
|
||||||
-x "$0" "${RELEASE_DIR#$PWD/}/*" \
|
-x "$0" "${RELEASE_DIR#$PWD/}/*" \
|
||||||
@@ -294,22 +281,25 @@ create_love_file ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Exit module
|
# Exit module
|
||||||
## $1: exit code.
|
## $1: optional error identifier
|
||||||
## 0 - success
|
## $2: optional error message, printed if $1=="undef" or unidentified error
|
||||||
## 1 - binary not found or downloaded
|
exit_module () {
|
||||||
## other - failure
|
if [[ -z $1 ]]; then
|
||||||
## $2: error message
|
|
||||||
exit_module ()
|
|
||||||
{
|
|
||||||
if [[ -z $1 || "$1" == "0" ]]; then
|
|
||||||
echo "Done !"
|
echo "Done !"
|
||||||
elif [[ "$1" == "1" ]]; then
|
exit 0
|
||||||
>&2 echo -e "$2"
|
|
||||||
>&2 echo "LÖVE $LOVE_VERSION could not be found or downloaded."
|
|
||||||
else
|
|
||||||
>&2 echo -e "$2"
|
|
||||||
exit $1
|
|
||||||
fi
|
fi
|
||||||
|
case $1 in
|
||||||
|
execute )
|
||||||
|
exit 2 ;;
|
||||||
|
binary )
|
||||||
|
>&2 echo "LÖVE $LOVE_VERSION could not be found or downloaded."
|
||||||
|
exit 3 ;;
|
||||||
|
undef|* )
|
||||||
|
if [[ -n $2 ]]; then
|
||||||
|
>&2 echo "$2"
|
||||||
|
fi
|
||||||
|
exit 1 ;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -326,7 +316,11 @@ gen_version $LOVE_WEB_VERSION
|
|||||||
INSTALLED=false
|
INSTALLED=false
|
||||||
EMBEDDED=false
|
EMBEDDED=false
|
||||||
|
|
||||||
DEFAULT_MODULE=
|
DEFAULT_MODULE=true
|
||||||
|
|
||||||
|
TITLE="$(basename $(pwd))"
|
||||||
|
RELEASE_DIR=releases
|
||||||
|
CACHE_DIR=~/.cache/love-release
|
||||||
|
|
||||||
if [[ $INSTALLED == false && $EMBEDDED == false ]]; then
|
if [[ $INSTALLED == false && $EMBEDDED == false ]]; then
|
||||||
>&2 echo "love-release has not been installed, and is not embedded into one script. Consider doing one of the two."
|
>&2 echo "love-release has not been installed, and is not embedded into one script. Consider doing one of the two."
|
||||||
@@ -339,18 +333,20 @@ elif [[ $INSTALLED == true ]]; then
|
|||||||
SCRIPTS_DIR="scripts"
|
SCRIPTS_DIR="scripts"
|
||||||
for file in "$SCRIPTS_DIR"/*.sh; do
|
for file in "$SCRIPTS_DIR"/*.sh; do
|
||||||
(source "$file")
|
(source "$file")
|
||||||
|
default_module
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z $DEFAULT_MODULE || $DEFAULT_MODULE == true ]]; then
|
|
||||||
(
|
(
|
||||||
reset_vars
|
(execute_module "love")
|
||||||
read_config "love"
|
if [[ $? -eq 0 || $DEFAULT_MODULE == true ]]; then
|
||||||
|
read_config "default"
|
||||||
init_module "LÖVE"
|
init_module "LÖVE"
|
||||||
create_love_file 9
|
create_love_file 9
|
||||||
exit_module
|
exit_module
|
||||||
)
|
|
||||||
fi
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
# Android debug package
|
# Android debug package
|
||||||
if [[ $(execute_module "android") == false ]]; then
|
execute_module "android"
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
init_module "Android"
|
init_module "Android"
|
||||||
|
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
# Debian package
|
# Debian package
|
||||||
if [[ $(execute_module "debian") == false ]]; then
|
execute_module "debian"
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
init_module "Debian"
|
init_module "Debian"
|
||||||
|
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
# Mac OS X
|
# Mac OS X
|
||||||
if [[ $(execute_module "osx") == false ]]; then
|
execute_module "osx"
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
init_module "Mac OS X"
|
init_module "Mac OS X"
|
||||||
|
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
# Windows
|
# Windows
|
||||||
if [[ $(execute_module "windows") == false ]]; then
|
execute_module "windows"
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
init_module "Windows"
|
init_module "Windows"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user