mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
added build script for Travis CI
This commit is contained in:
189
scripts/build.sh
Normal file
189
scripts/build.sh
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
|
||||||
|
is_git() {
|
||||||
|
command -v git >/dev/null 2>&1 || return 1
|
||||||
|
command git rev-parse >/dev/null 2>&1 || return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_bytes() {
|
||||||
|
echo "size is:"
|
||||||
|
case "$(uname -s)" in
|
||||||
|
Darwin) stat -f %z "$1";;
|
||||||
|
*) stat -c %s "$1";;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Available environments
|
||||||
|
list_envs() {
|
||||||
|
grep env: ../platformio.ini | sed 's/\[env:\(.*\)\]/\1/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
print_available() {
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "Available environments:"
|
||||||
|
for environment in $available; do
|
||||||
|
echo "-> $environment"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
print_environments() {
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "Current environments:"
|
||||||
|
for environment in $environments; do
|
||||||
|
echo "-> $environment"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
set_default_environments() {
|
||||||
|
# Hook to build in parallel when using travis
|
||||||
|
if [[ "${TRAVIS_BUILD_STAGE_NAME}" = "Release" ]] && ${par_build}; then
|
||||||
|
environments=$(echo ${available} | \
|
||||||
|
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; }')
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only build travis target
|
||||||
|
if [[ "${TRAVIS_BUILD_STAGE_NAME}" = "Test" ]]; then
|
||||||
|
environments=$travis
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fallback to all available environments
|
||||||
|
environments=$available
|
||||||
|
}
|
||||||
|
|
||||||
|
build_webui() {
|
||||||
|
cd ../tools/webfilesbuilder
|
||||||
|
|
||||||
|
# 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 - "node ./tools/webfilesbuilder/node_modules/gulp/bin/gulp.js --cwd ./tools/webfilesbuilder"
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "Building web interface..."
|
||||||
|
node node_modules/gulp/bin/gulp.js || exit
|
||||||
|
|
||||||
|
# TODO: do something if webui files are different
|
||||||
|
# for now, just print in travis log
|
||||||
|
if ${TRAVIS:-false}; then
|
||||||
|
git --no-pager diff --stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ../..
|
||||||
|
}
|
||||||
|
|
||||||
|
build_environments() {
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "Building firmware images..."
|
||||||
|
mkdir -p $destination/EMS-ESP-$version
|
||||||
|
|
||||||
|
for environment in $environments; do
|
||||||
|
echo -n "* EMS-ESP-$version-$environment.bin --- "
|
||||||
|
platformio run --silent --environment $environment || exit 1
|
||||||
|
stat_bytes .pio/build/$environment/firmware.bin
|
||||||
|
[[ "${TRAVIS_BUILD_STAGE_NAME}" = "Test" ]] || \
|
||||||
|
mv .pio/build/$environment/firmware.bin $destination/EMS-ESP-$version/EMS-ESP-$version-$environment.bin
|
||||||
|
done
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
####### MAIN
|
||||||
|
|
||||||
|
destination=firmware
|
||||||
|
version_file=../src/version.h
|
||||||
|
version=$(grep -E '^#define APP_VERSION' $version_file | awk '{print $3}' | sed 's/"//g')
|
||||||
|
|
||||||
|
if ${TRAVIS:-false}; then
|
||||||
|
git_revision=${TRAVIS_COMMIT::7}
|
||||||
|
git_tag=${TRAVIS_TAG}
|
||||||
|
elif is_git; then
|
||||||
|
git_revision=$(git rev-parse --short HEAD)
|
||||||
|
git_tag=$(git tag --contains HEAD)
|
||||||
|
else
|
||||||
|
git_revision=unknown
|
||||||
|
git_tag=
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n $git_tag ]]; then
|
||||||
|
new_version=${version/-*}
|
||||||
|
sed -i -e "s@$version@$new_version@" $version_file
|
||||||
|
version=$new_version
|
||||||
|
trap "git checkout -- $version_file" EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
par_build=false
|
||||||
|
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
|
||||||
|
|
||||||
|
travis=$(list_envs | grep travis | sort)
|
||||||
|
available=$(list_envs | grep -Ev -- 'travis|debug' | sort)
|
||||||
|
|
||||||
|
export PLATFORMIO_BUILD_FLAGS="${PLATFORMIO_BUILD_FLAGS}"
|
||||||
|
|
||||||
|
# get command line Parameters
|
||||||
|
# l prints environments
|
||||||
|
# 2 does parallel builds
|
||||||
|
# d uses next arg as destination folder
|
||||||
|
while getopts "lpd:" opt; do
|
||||||
|
case $opt in
|
||||||
|
l)
|
||||||
|
print_available
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
par_build=true
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
destination=$OPTARG
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
|
# Welcome message
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "EMS-ESP FIRMWARE BUILDER"
|
||||||
|
echo "Building for version ${version}" ${git_revision:+($git_revision)}
|
||||||
|
|
||||||
|
# Environments to build
|
||||||
|
environments=$@
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
set_default_environments
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ${CI:-false}; then
|
||||||
|
print_environments
|
||||||
|
fi
|
||||||
|
|
||||||
|
# for debugging
|
||||||
|
echo "* git_revision = $git_revision"
|
||||||
|
echo "* git_tag = $git_tag"
|
||||||
|
echo "* TRAVIS_EVENT_TYPE = $TRAVIS_EVENT_TYPE"
|
||||||
|
echo "* TRAVIS_TAG = $TRAVIS_TAG"
|
||||||
|
echo "* TRAVIS_BRANCH = $TRAVIS_BRANCH"
|
||||||
|
echo "* TRAVIS_BUILD_STAGE_NAME = $TRAVIS_BUILD_STAGE_NAME"
|
||||||
|
|
||||||
|
build_webui
|
||||||
|
build_environments
|
||||||
Reference in New Issue
Block a user