#!/bin/bash
|
|
|
|
# Welcome
|
|
echo "--------------------------------------------------------------"
|
|
echo "ESPURNA FIRMWARE BUILDER"
|
|
|
|
# Available environments
|
|
travis=$(grep env: platformio.ini | grep travis | sed 's/\[env://' | sed 's/\]/ /' | sort)
|
|
available=$(grep env: platformio.ini | grep -v ota | grep -v ssl | grep -v travis | sed 's/\[env://' | sed 's/\]/ /' | sort)
|
|
|
|
# Parameters
|
|
while getopts "lp" opt; do
|
|
case $opt in
|
|
l)
|
|
echo "--------------------------------------------------------------"
|
|
echo "Available environments:"
|
|
for environment in $available; do
|
|
echo "* $environment"
|
|
done
|
|
exit
|
|
;;
|
|
p)
|
|
par_build=1
|
|
par_thread=${BUILDER_THREAD:-0}
|
|
par_total_threads=${BUILDER_TOTAL_THREADS:-4}
|
|
if [ ${par_thread} -ne ${par_thread} -o \
|
|
${par_total_threads} -ne ${par_total_threads} ]; then
|
|
echo "Parallel threads should be a number."
|
|
exit
|
|
fi
|
|
if [ ${par_thread} -ge ${par_total_threads} ]; then
|
|
echo "Current thread is greater than total threads. Doesn't make sense"
|
|
exit
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND-1))
|
|
|
|
environments=$@
|
|
|
|
# Environments to build
|
|
if [ $# -eq 0 ]; then
|
|
|
|
environments=$available
|
|
|
|
# Hook to build travis test envs
|
|
if [[ "${TRAVIS_BRANCH}" != "" ]]; then
|
|
re='^[0-9]+\.[0-9]+\.[0-9]+$'
|
|
if ! [[ ${TRAVIS_BRANCH} =~ $re ]]; then
|
|
environments=$travis
|
|
fi
|
|
fi
|
|
|
|
fi
|
|
|
|
# Get current version
|
|
version=$(grep APP_VERSION espurna/config/version.h | awk '{print $3}' | sed 's/"//g')
|
|
echo "Building for version $version"
|
|
|
|
# Create output folder
|
|
mkdir -p firmware
|
|
|
|
if [ ! -e node_modules/gulp/bin/gulp.js ]; then
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installing dependencies..."
|
|
npm install --only=dev
|
|
fi
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "Get revision..."
|
|
revision=$(git rev-parse HEAD)
|
|
revision=${revision:0:7}
|
|
cp espurna/config/version.h espurna/config/version.h.original
|
|
sed -i -e "s/APP_REVISION \".*\"/APP_REVISION \"$revision\"/g" espurna/config/version.h
|
|
|
|
# Recreate web interface
|
|
echo "--------------------------------------------------------------"
|
|
echo "Building web interface..."
|
|
node node_modules/gulp/bin/gulp.js || exit
|
|
|
|
# Build all the required firmware images
|
|
echo "--------------------------------------------------------------"
|
|
echo "Building firmware images..."
|
|
mkdir -p ../firmware/espurna-$version
|
|
if [ ${par_build} ]; then
|
|
to_build=$(echo ${environments} | awk -v par_thread=${par_thread} -v par_total_threads=${par_total_threads} '{ for (i = 1; i <= NF; i++) if (++j % par_total_threads == par_thread ) print $i; }')
|
|
else
|
|
to_build=${environments}
|
|
fi
|
|
|
|
for environment in $to_build; do
|
|
echo -n "* espurna-$version-$environment.bin --- "
|
|
platformio run --silent --environment $environment || exit 1
|
|
stat -c %s .pioenvs/$environment/firmware.bin
|
|
mv .pioenvs/$environment/firmware.bin ../firmware/espurna-$version/espurna-$version-$environment.bin
|
|
done
|
|
echo "--------------------------------------------------------------"
|
|
|
|
mv espurna/config/version.h.original espurna/config/version.h
|