Mirror of espurna firmware for wireless switches and more
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

155 lines
4.2 KiB

#!/bin/bash
set -e
# defaults
script_build_environments=true
script_build_webui=true
script_build_release=false
destination=../firmware
release_args=""
# ALL env: sections from the .ini, even including those we don't want to build
list_all_envs() {
grep -E '^\[env:' platformio.ini | sed 's/\[env:\(.*\)\]/\1/g'
}
# -base is only supposed to be used through `extends = ...-base` for another env:
# -ssl / -secure-client hard-code certificates, so not very useful to distribute those
# -ota is a legacy option to conditionally load upload args, no longer needed
list_available_envs() {
list_all_envs | grep -Ev -- '-ota$|-ssl$|-secure-client.*$|^esp8266-.*base$' | sort
}
print_available() {
echo "--------------------------------------------------------------"
echo "Available environments:"
for environment in $(list_available_envs); do
echo "* $environment"
done
}
set_default_environments() {
environments=$(list_available_envs)
}
build_webui() {
# Build system uses gulpscript.js to build web interface
if [ ! -e node_modules/gulp/bin/gulp.js ]; then
echo "--------------------------------------------------------------"
echo "Installing dependencies..."
npm ci
fi
# Recreate web interface (espurna/data/index.html.*.gz.h)
echo "--------------------------------------------------------------"
echo "Building web interface..."
node node_modules/gulp/bin/gulp.js || exit
}
build_release() {
echo "--------------------------------------------------------------"
echo "Building release images..."
set -x
python scripts/generate_release_sh.py $release_args > release.sh
bash release.sh
set +x
echo "--------------------------------------------------------------"
}
build_environments() {
echo "--------------------------------------------------------------"
echo "Building environment images..."
local environments=$@
if [ $# -eq 0 ]; then
environments=$(list_available_envs)
fi
set -x
for environment in $environments; do
env ESPURNA_BUILD_NAME=$environment \
ESPURNA_BUILD_DESTINATION="$destination" \
ESPURNA_BUILD_SINGLE_SOURCE="1" \
pio run --silent --environment $environment -t build-and-copy
done
set +x
echo "--------------------------------------------------------------"
}
# Parameters
print_getopts_help() {
cat <<EOF
Usage: $(basename "$0") [OPTION] <ENVIRONMENT>...
Where ENVIRONMENT is environment name(s) from platformio.ini
Options:
-f VALUE Filter build stage by name to skip it
Supported VALUEs are "environments" and "webui"
Can be specified multiple times.
-r Release mode. Instead of building specified environments,
build every available one with an external script (ref. scripts/generate_release_sh.py)
-a When in 'Release mode', append the string to the builder script arguments list
-l Print available environments
-d VALUE Destination to move the .bin file after building the environment
-h Display this message
EOF
}
while getopts "f:lra:pd:h" opt; do
case $opt in
f)
case "$OPTARG" in
webui) script_build_webui=false ;;
environments) script_build_environments=false ;;
*)
echo Must be either webui or environments
exit
;;
esac
;;
l)
print_available
exit
;;
d)
destination=$OPTARG
;;
r)
script_build_environments=false
script_build_release=true
;;
a)
if ! $script_build_release ; then
echo Must be in release mode to append arguments
exit 1
fi
release_args="$release_args $OPTARG"
;;
h)
print_getopts_help
exit
esac
done
shift $((OPTIND-1))
# Welcome
echo "--------------------------------------------------------------"
echo "ESPURNA FIRMWARE BUILDER"
if $script_build_webui ; then
build_webui
fi
if $script_build_release ; then
build_release
elif $script_build_environments ; then
build_environments $@
fi