mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-06-30 12:30:59 +02:00
Use Github Actions for release (#3309)
* move scripts and tone down travis * Update and rename main.yml to push.yml * Create release.yml
This commit is contained in:
@ -1,379 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$TRAVIS_TAG" ]; then
|
||||
echo "Skipping Packaging: Regular build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
############################################################
|
||||
# $1 - download link
|
||||
# $2 - JSON output file
|
||||
function downloadAndMergePackageJSON()
|
||||
{
|
||||
echo
|
||||
echo " ---Package JSON definition merge BEGIN--->"
|
||||
|
||||
jsonLink=$1
|
||||
jsonOut=$2
|
||||
curlAuthToken=$3
|
||||
outDirectory=$4
|
||||
|
||||
echo " - remote package JSON: $jsonLink (source)"
|
||||
echo " - current package JSON: $jsonOut (target)"
|
||||
|
||||
old_json=$outDirectory/oldJson.json
|
||||
merged_json=$outDirectory/mergedJson.json
|
||||
|
||||
#DEBUG
|
||||
#echo " Local tmp for remote JSON: $old_json"
|
||||
#echo " Merge output JSON: $merged_json"
|
||||
|
||||
echo " - downloading JSON package definition: $jsonLink ..."
|
||||
|
||||
# Authentication through HTTP headers might fail on redirection due to bug in cURL (https://curl.haxx.se/docs/adv_2018-b3bf.html - headers are resent to the target location including the original authentication)
|
||||
# Notes:
|
||||
# - eg AmazonAWS fails with Bad Request due to having maximum 1 authentication mechanism per a request, might be general issue
|
||||
# - it's a first-class credential leakage
|
||||
# - the fix is available in cURL 7.58.0+, however, TravisCI is not yet updated (May 29, 2018) - see https://docs.travis-ci.com/user/build-environment-updates
|
||||
# - TravisCI workaround: updating build environment through .travis.yml (ie install required version of cURL using apt-get, see https://docs.travis-ci.com/user/installing-dependencies/)
|
||||
# - previous point not used on purpose (build time increase, possible failure corrupts whole build, etc) but it's good to know there's a way out of hell
|
||||
# - local workaround: authentication through 'access_token' as GET parameter works smoothly, however, HTTP headers are preferred
|
||||
|
||||
#curl --verbose -sH "Authorization: token $curlAuthToken" -L -o "$old_json" "$jsonLink"
|
||||
curl -L -o "$old_json" "$jsonLink?access_token=$curlAuthToken"
|
||||
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
|
||||
|
||||
|
||||
#curl -L -o "$old_json" "$jsonLink"
|
||||
|
||||
echo " - merging $old_json into $jsonOut ..."
|
||||
|
||||
echo
|
||||
set +e
|
||||
stdbuf -oL python package/merge_packages.py "$jsonOut" "$old_json" > "$merged_json"
|
||||
set -e #supposed to be ON by default
|
||||
echo
|
||||
|
||||
set -v
|
||||
if [ ! -s $merged_json ]; then
|
||||
rm -f "$merged_json"
|
||||
echo " Done: nothing to merge ($merged_json empty) => $jsonOut remains unchanged"
|
||||
else
|
||||
rm -f "$jsonOut"
|
||||
mv "$merged_json" "$jsonOut"
|
||||
echo " Done: JSON data successfully merged to $jsonOut"
|
||||
fi
|
||||
|
||||
rm -f "$old_json"
|
||||
set +v
|
||||
echo " <---Package JSON definition merge END---"
|
||||
echo
|
||||
}
|
||||
############################################################
|
||||
|
||||
#Cmdline options
|
||||
# -a: GitHub API access token
|
||||
# -d: output directory to store the (pre)release filedir set
|
||||
|
||||
set -e
|
||||
|
||||
echo
|
||||
echo "==================================================================="
|
||||
echo "RELEASE PACKAGE PUBLISHING ARRANGEMENTS (GitHub/Arduino compliance)"
|
||||
echo "==================================================================="
|
||||
echo
|
||||
cmdLine=`basename $0 $@`
|
||||
echo "Cmdline: ${cmdLine}"
|
||||
|
||||
# cURL authentication token
|
||||
while getopts ":a:,:d:" opt; do
|
||||
case $opt in
|
||||
a)
|
||||
curlAuth=$OPTARG
|
||||
#echo " ACCESS TOKEN: $curlAuth" >&2
|
||||
;;
|
||||
d)
|
||||
releaseDir=$OPTARG
|
||||
#echo " RELEASE OUTPUT DIRECTORY: $releaseDir" >&2
|
||||
;;
|
||||
\?)
|
||||
echo "Error: invalid option -$OPTARG => aborting" >&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Error: option -$OPTARG requires an argument => aborting" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# where we at?
|
||||
echo
|
||||
echo "Prequisite check:"
|
||||
if [ -z "$TRAVIS_BUILD_DIR" ]; then
|
||||
echo " - non-TravisCI environment"
|
||||
cd "$( dirname ${BASH_SOURCE[0]} )"/..
|
||||
bTravisRun=0
|
||||
else
|
||||
echo " - TravisCI run"
|
||||
cd $TRAVIS_BUILD_DIR
|
||||
bTravisRun=1
|
||||
fi
|
||||
|
||||
# no tag, no love
|
||||
if [ -z "$TRAVIS_TAG" ] && [ $bTravisRun -eq 1 ]; then
|
||||
echo "Warning: non-tagged builds not supported in Travis CI environment => exiting"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Package build settings:"
|
||||
echo "======================="
|
||||
|
||||
# source directory
|
||||
srcdir=`pwd`
|
||||
echo "Current working directory: ${srcdir}"
|
||||
|
||||
# target directory for actual release fileset
|
||||
if [ -z "$releaseDir" ]; then
|
||||
releaseDir=release
|
||||
fi
|
||||
echo "Release output directory: $releaseDir"
|
||||
|
||||
# Git versions, branch names, tags
|
||||
branch_name=""
|
||||
verx=""
|
||||
extent=""
|
||||
|
||||
if [ -z "$TRAVIS_TAG" ]; then
|
||||
branch_name=`git rev-parse --abbrev-ref HEAD 2>/dev/null`
|
||||
ver=`sed -n -E 's/version=([0-9.]+)/\1/p' platform.txt`
|
||||
else
|
||||
ver=$TRAVIS_TAG
|
||||
fi
|
||||
verx=`git rev-parse --short=8 HEAD 2>/dev/null`
|
||||
|
||||
# Package name resolving (case-insensitive):
|
||||
# - unknown branch, master branch or branch in detached state (HEAD revision) use only the tag's name as version string (esp32-$TAG_NAME, eg 'esp32-1.0.0-RC1')
|
||||
# - all other branches use long-version string (esp32-$BRANCH_NAME-$GITREV_NUMBER_SHORT, eg 'esp32-idf_update-cde668da')
|
||||
|
||||
shopt -s nocasematch
|
||||
|
||||
if [ ! -z "$branch_name" ] && [ "$branch_name" != "master" ] && [ "$branch_name" != "head" ]; then
|
||||
extent="-$branch_name-$verx"
|
||||
fi
|
||||
|
||||
package_name=esp32-$ver$extent
|
||||
|
||||
shopt -u nocasematch
|
||||
|
||||
echo "Package version: $ver"
|
||||
echo "Git branch name: $branch_name"
|
||||
echo "Git revision number: $verx"
|
||||
echo "Package name extension: $extent"
|
||||
echo "Travis CI tag: $TRAVIS_TAG"
|
||||
echo "Release package name: $package_name"
|
||||
|
||||
# Set REMOTE_URL environment variable to the address where the package will be
|
||||
# available for download. This gets written into package json file.
|
||||
|
||||
if [ -z "$REMOTE_URL" ]; then
|
||||
REMOTE_URL="http://localhost:8000"
|
||||
remoteEchoOut="${REMOTE_URL} (REMOTE_URL variable not defined, using default)"
|
||||
else
|
||||
remoteEchoOut="${REMOTE_URL}"
|
||||
fi
|
||||
echo "Target URL for download (JSON incl): ${remoteEchoOut}"
|
||||
|
||||
# Create directory for the package
|
||||
outdir=$releaseDir/$package_name
|
||||
echo "Local temp directory: $outdir"
|
||||
|
||||
rm -rf $releaseDir
|
||||
mkdir -p $outdir
|
||||
|
||||
# Copy files required for the package release:
|
||||
echo
|
||||
echo "Package build processing:"
|
||||
echo "========================="
|
||||
echo
|
||||
echo "Prepare files for the package main archive:"
|
||||
echo " - copying neccessary files from current Git repository..."
|
||||
|
||||
# <PACKAGE ROOT>
|
||||
cp -f $srcdir/boards.txt $outdir/
|
||||
cp -f $srcdir/platform.txt $outdir/
|
||||
cp -f $srcdir/programmers.txt $outdir/
|
||||
|
||||
# <COMPLETE DIRS>
|
||||
# cores/
|
||||
# libraries/
|
||||
# variants/
|
||||
# tools/partitions/
|
||||
cp -Rf $srcdir/cores $outdir/
|
||||
cp -Rf $srcdir/libraries $outdir/
|
||||
cp -Rf $srcdir/variants $outdir/
|
||||
mkdir -p $outdir/tools
|
||||
cp -Rf $srcdir/tools/partitions $outdir/tools/
|
||||
|
||||
# <DIR & FILES>
|
||||
# tools/sdk/
|
||||
cp -Rf $srcdir/tools/sdk $outdir/tools/
|
||||
|
||||
# tools/
|
||||
cp -f $srcdir/tools/espota.exe $outdir/tools/
|
||||
cp -f $srcdir/tools/espota.py $outdir/tools/
|
||||
cp -f $srcdir/tools/esptool.py $outdir/tools/
|
||||
cp -f $srcdir/tools/gen_esp32part.py $outdir/tools/
|
||||
cp -f $srcdir/tools/gen_esp32part.exe $outdir/tools/
|
||||
|
||||
echo " - cleaning *.DS_Store files..."
|
||||
find $outdir -name '*.DS_Store' -exec rm -f {} \;
|
||||
|
||||
# Do some replacements in platform.txt file, which are required because IDE
|
||||
# handles tool paths differently when package is installed in hardware folder
|
||||
echo " - updating platform.txt..."
|
||||
cat $srcdir/platform.txt | \
|
||||
sed "s/version=.*/version=$ver$extent/g" | \
|
||||
sed 's/runtime.tools.xtensa-esp32-elf-gcc.path={runtime.platform.path}\/tools\/xtensa-esp32-elf//g' | \
|
||||
sed 's/tools.esptool_py.path={runtime.platform.path}\/tools\/esptool/tools.esptool_py.path=\{runtime.tools.esptool_py.path\}/g' \
|
||||
> $outdir/platform.txt
|
||||
|
||||
# Put core version and short hash of git version into core_version.h
|
||||
ver_define=`echo $ver | tr "[:lower:].\055" "[:upper:]_"`
|
||||
echo " - generating C/C++ header defines ($ver_define -> /cores/esp32/core_version.h)..."
|
||||
|
||||
echo \#define ARDUINO_ESP32_GIT_VER 0x$verx >$outdir/cores/esp32/core_version.h
|
||||
echo \#define ARDUINO_ESP32_GIT_DESC `git describe --tags 2>/dev/null` >>$outdir/cores/esp32/core_version.h
|
||||
echo \#define ARDUINO_ESP32_RELEASE_$ver_define >>$outdir/cores/esp32/core_version.h
|
||||
echo \#define ARDUINO_ESP32_RELEASE \"$ver_define\" >>$outdir/cores/esp32/core_version.h
|
||||
|
||||
# Store submodules' current versions
|
||||
echo " - getting submodule list (${releaseDir}/submodules.txt)..."
|
||||
git submodule status > $releaseDir/submodules.txt
|
||||
|
||||
# remove all .git* files
|
||||
echo " - removing *.git files possibly fetched to package tempdir..."
|
||||
find $outdir -name '*.git*' -type f -delete
|
||||
|
||||
# Zip the package
|
||||
package_name_zip=$package_name.zip
|
||||
echo " - creating package ZIP archive (${package_name_zip})..."
|
||||
|
||||
pushd $releaseDir >/dev/null
|
||||
|
||||
zip -qr $package_name_zip $package_name
|
||||
if [ $? -ne 0 ]; then echo " !error: failed to create ${package_name_zip} (ZIP errno: $?) => aborting"; exit 1; fi
|
||||
|
||||
# Calculate SHA sum and size of ZIP archive
|
||||
sha=`shasum -a 256 $package_name_zip | cut -f 1 -d ' '`
|
||||
size=`/bin/ls -l $package_name_zip | awk '{print $5}'`
|
||||
echo " ${package_name_zip} creation OK (size: $size, sha2: $sha)"
|
||||
echo
|
||||
|
||||
echo "Making $package_name JSON definition file(s):"
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
PACKAGE_JSON_DEV="package_esp32_dev_index.json"
|
||||
PACKAGE_JSON_REL="package_esp32_index.json"
|
||||
|
||||
# figure out the package type (release / pre-release)
|
||||
shopt -s nocasematch
|
||||
if [[ $TRAVIS_TAG == *-RC* ]]; then
|
||||
bIsPrerelease=1
|
||||
package_name_json=$PACKAGE_JSON_DEV
|
||||
echo " - package type: PRE-RELEASE, JSON def.file: $PACKAGE_JSON_DEV"
|
||||
else
|
||||
bIsPrerelease=0
|
||||
package_name_json=$PACKAGE_JSON_REL
|
||||
echo " - package type: RELEASE, JSON def.files: $PACKAGE_JSON_REL, $PACKAGE_JSON_DEV"
|
||||
fi
|
||||
shopt -u nocasematch
|
||||
|
||||
# Cleanup temporary work dir
|
||||
rm -rf $outdir
|
||||
|
||||
# Get all previously released versions
|
||||
echo " - fetching previous (pre)release versions from GitHub..."
|
||||
|
||||
set +e
|
||||
|
||||
releasesJson=$releaseDir/releases.json
|
||||
curl -sH "Authorization: token $curlAuth" https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases > $releasesJson
|
||||
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
|
||||
|
||||
prev_release=$(jq -e -r '. | map(select(.draft == false and .prerelease == false)) | sort_by(.created_at | - fromdateiso8601) | .[0].tag_name' ${releasesJson})
|
||||
prev_any_release=$(jq -e -r '. | map(select(.draft == false)) | sort_by(.created_at | - fromdateiso8601) | .[0].tag_name' ${releasesJson})
|
||||
prev_pre_release=$(jq -e -r '. | map(select(.draft == false and .prerelease == true)) | sort_by(.created_at | - fromdateiso8601) | .[0].tag_name' ${releasesJson})
|
||||
|
||||
shopt -s nocasematch
|
||||
if [ "$prev_any_release" == "$TRAVIS_TAG" ]; then
|
||||
prev_release=$(jq -e -r '. | map(select(.draft == false and .prerelease == false)) | sort_by(.created_at | - fromdateiso8601) | .[1].tag_name' ${releasesJson})
|
||||
prev_any_release=$(jq -e -r '. | map(select(.draft == false)) | sort_by(.created_at | - fromdateiso8601) | .[1].tag_name' ${releasesJson})
|
||||
prev_pre_release=$(jq -e -r '. | map(select(.draft == false and .prerelease == true)) | sort_by(.created_at | - fromdateiso8601) | .[1].tag_name' ${releasesJson})
|
||||
fi
|
||||
shopt -u nocasematch
|
||||
|
||||
set -e
|
||||
|
||||
rm -f "$releasesJson"
|
||||
|
||||
echo " previous Release: $prev_release"
|
||||
echo " previous Pre-release: $prev_pre_release"
|
||||
echo " previous (any)release: $prev_any_release"
|
||||
|
||||
# add generated items to JSON package-definition contents
|
||||
jq_arg=".packages[0].platforms[0].version = \"$ver\" | \
|
||||
.packages[0].platforms[0].url = \"$REMOTE_URL/$package_name_zip\" |\
|
||||
.packages[0].platforms[0].archiveFileName = \"$package_name_zip\""
|
||||
|
||||
jq_arg="$jq_arg |\
|
||||
.packages[0].platforms[0].size = \"$size\" |\
|
||||
.packages[0].platforms[0].checksum = \"SHA-256:$sha\""
|
||||
|
||||
# always get DEV version of JSON (included in both RC/REL)
|
||||
pkgJsonDev=$releaseDir/$PACKAGE_JSON_DEV
|
||||
echo " - generating/merging _DEV_ JSON file (${pkgJsonDev})..."
|
||||
|
||||
cat $srcdir/package/package_esp32_index.template.json | jq "$jq_arg" > $pkgJsonDev
|
||||
cd $srcdir
|
||||
if [ ! -z "$prev_any_release" ] && [ "$prev_any_release" != "null" ]; then
|
||||
downloadAndMergePackageJSON "https://github.com/$TRAVIS_REPO_SLUG/releases/download/${prev_any_release}/${PACKAGE_JSON_DEV}" "${pkgJsonDev}" "${curlAuth}" "$releaseDir"
|
||||
|
||||
# Release notes: GIT log comments (prev_any_release, current_release>
|
||||
echo " - executing: git log --oneline $prev_any_release.."
|
||||
git log --oneline $prev_any_release.. > $releaseDir/commits.txt
|
||||
fi
|
||||
|
||||
# for RELEASE run update REL JSON as well
|
||||
if [ $bIsPrerelease -eq 0 ]; then
|
||||
|
||||
pkgJsonRel=$releaseDir/$PACKAGE_JSON_REL
|
||||
echo " - generating/merging _REL_ JSON file (${pkgJsonRel})..."
|
||||
|
||||
cat $srcdir/package/package_esp32_index.template.json | jq "$jq_arg" > $pkgJsonRel
|
||||
if [ ! -z "$prev_release" ] && [ "$prev_release" != "null" ]; then
|
||||
downloadAndMergePackageJSON "https://github.com/$TRAVIS_REPO_SLUG/releases/download/${prev_release}/${PACKAGE_JSON_REL}" "${pkgJsonRel}" "${curlAuth}" "$releaseDir"
|
||||
|
||||
# Release notes: GIT log comments (prev_release, current_release>
|
||||
echo " - executing: git log --oneline $prev_release.."
|
||||
git log --oneline $prev_release.. > $releaseDir/commits.txt
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "JSON definition file(s) creation OK"
|
||||
|
||||
echo
|
||||
echo "==================================================================="
|
||||
echo "Package preparation done ('$releaseDir' contents):"
|
||||
fileset=`ls -1 $releaseDir`
|
||||
echo -e $fileset
|
||||
|
||||
echo
|
||||
echo "==================================================================="
|
||||
echo "==================================================================="
|
||||
echo "'$package_name' ready for publishing, processing completed."
|
||||
echo "==================================================================="
|
||||
echo
|
@ -1,27 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This script is for Travis. It checks all non-examples source files in libraries/ and cores/ are listed in
|
||||
# CMakeLists.txt for the cmake-based IDF component
|
||||
#
|
||||
# If you see an error running this script, edit CMakeLists.txt and add any new source files into your PR
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# pull all submodules
|
||||
git submodule update --init --recursive
|
||||
|
||||
# find all source files in repo
|
||||
REPO_SRCS=`find cores/esp32/ libraries/ -name 'examples' -prune -o -name '*.c' -print -o -name '*.cpp' -print | sort`
|
||||
|
||||
# find all source files named in CMakeLists.txt COMPONENT_SRCS
|
||||
CMAKE_SRCS=`cmake --trace-expand -C CMakeLists.txt 2>&1 | grep COMPONENT_SRCS | sed 's/.\+COMPONENT_SRCS //' | sed 's/ )//' | tr ' ;' '\n' | sort`
|
||||
|
||||
if ! diff -u0 --label "Repo Files" --label "COMPONENT_SRCS" <(echo "$REPO_SRCS") <(echo "$CMAKE_SRCS"); then
|
||||
echo "Source files in repo (-) and source files in CMakeLists.txt (+) don't match"
|
||||
echo "Edit CMakeLists.txt as appropriate to add/remove source files from COMPONENT_SRCS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "CMakeLists.txt and repo source files match"
|
||||
exit 0
|
@ -1,248 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
json_escape () {
|
||||
printf '%s' "$1" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))'
|
||||
#printf '%s' "$1" | php -r 'echo json_encode(file_get_contents("php://stdin"));'
|
||||
}
|
||||
|
||||
set -e
|
||||
|
||||
#Cmdline options
|
||||
# -t: tag (*_RC* determines prerelease version, can be overriden be -p)
|
||||
# -a: GitHub API access token
|
||||
# -s: GitHub repository slug (user/repo)
|
||||
# -p: prerelease true/false
|
||||
# -f: files to upload (ie assets. delim = ';', must come quoted)
|
||||
# -d: directory to upload (by adding dir contents to assets)
|
||||
while getopts ":t:,:a:,:s:,:p:,:f:,:d:" opt; do
|
||||
case $opt in
|
||||
t)
|
||||
varTagName=$OPTARG
|
||||
echo "TAG: $varTagName" >&2
|
||||
;;
|
||||
a)
|
||||
varAccessToken=$OPTARG
|
||||
echo "ACCESS TOKEN: $varAccessToken" >&2
|
||||
;;
|
||||
s)
|
||||
varRepoSlug=$OPTARG
|
||||
echo "REPO SLUG: $varRepoSlug" >&2
|
||||
;;
|
||||
p)
|
||||
varPrerelease=$OPTARG
|
||||
echo "PRERELEASE: $varPrerelease" >&2
|
||||
;;
|
||||
f)
|
||||
varAssets=$OPTARG
|
||||
echo "ASSETS: $varAssets" >&2
|
||||
;;
|
||||
d)
|
||||
varAssetsDir=$OPTARG
|
||||
echo "ASSETS DIR: $varAssetsDir" >&2
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Option -$OPTARG requires an argument." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# use TravisCI env as default, if available
|
||||
if [ -z $varTagName ] && [ ! -z $TRAVIS_TAG ]; then
|
||||
varTagName=$TRAVIS_TAG
|
||||
fi
|
||||
|
||||
if [ -z $varTagName ]; then
|
||||
echo "No tag name available => aborting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#Check tag name for release/prerelease (prerelease tag contains '_RC' as for release-candidate. case-insensitive)
|
||||
shopt -s nocasematch
|
||||
if [ -z $varPrerelease ]; then
|
||||
if [[ $varTagName == *-RC* ]]; then
|
||||
varPrerelease=true
|
||||
else
|
||||
varPrerelease=false
|
||||
fi
|
||||
fi
|
||||
shopt -u nocasematch
|
||||
|
||||
#
|
||||
# Prepare Markdown release notes:
|
||||
#################################
|
||||
# - annotated tags only, lightweight tags just display message of referred commit
|
||||
# - tag's description conversion to relnotes:
|
||||
# first 3 lines (tagname, commiter, blank): ignored
|
||||
# 4th line: relnotes heading
|
||||
# remaining lines: each converted to bullet-list item
|
||||
# empty lines ignored
|
||||
# if '* ' found as a first char pair, it's converted to '- ' to keep bulleting unified
|
||||
echo
|
||||
echo Preparing release notes
|
||||
echo -----------------------
|
||||
echo "Tag's message:"
|
||||
|
||||
relNotesRaw=`git show -s --format=%b $varTagName`
|
||||
readarray -t msgArray <<<"$relNotesRaw"
|
||||
arrLen=${#msgArray[@]}
|
||||
|
||||
#process annotated tags only
|
||||
if [ $arrLen > 3 ] && [ "${msgArray[0]:0:3}" == "tag" ]; then
|
||||
ind=3
|
||||
while [ $ind -lt $arrLen ]; do
|
||||
if [ $ind -eq 3 ]; then
|
||||
releaseNotes="#### ${msgArray[ind]}"
|
||||
releaseNotes+=$'\r\n'
|
||||
else
|
||||
oneLine="$(echo -e "${msgArray[ind]}" | sed -e 's/^[[:space:]]*//')"
|
||||
|
||||
if [ ${#oneLine} -gt 0 ]; then
|
||||
if [ "${oneLine:0:2}" == "* " ]; then oneLine=$(echo ${oneLine/\*/-}); fi
|
||||
if [ "${oneLine:0:2}" != "- " ]; then releaseNotes+="- "; fi
|
||||
releaseNotes+="$oneLine"
|
||||
releaseNotes+=$'\r\n'
|
||||
|
||||
#debug output
|
||||
echo " ${oneLine}"
|
||||
fi
|
||||
fi
|
||||
let ind=$ind+1
|
||||
done
|
||||
fi
|
||||
|
||||
echo "$releaseNotes"
|
||||
|
||||
# - list of commits (commits.txt must exit in the output dir)
|
||||
commitFile=$varAssetsDir/commits.txt
|
||||
if [ -s "$commitFile" ]; then
|
||||
|
||||
releaseNotes+=$'\r\n##### Commits\r\n'
|
||||
|
||||
echo
|
||||
echo "Commits:"
|
||||
|
||||
IFS=$'\n'
|
||||
for next in `cat $commitFile`
|
||||
do
|
||||
IFS=' ' read -r commitId commitMsg <<< "$next"
|
||||
commitLine="- [$commitId](https://github.com/$varRepoSlug/commit/$commitId) $commitMsg"
|
||||
echo " $commitLine"
|
||||
|
||||
releaseNotes+="$commitLine"
|
||||
releaseNotes+=$'\r\n'
|
||||
done
|
||||
rm -f $commitFile
|
||||
fi
|
||||
|
||||
# Check possibly existing release for current tag
|
||||
echo
|
||||
echo "Processing GitHub release record for $varTagName:"
|
||||
echo "-------------------------------------------------"
|
||||
|
||||
echo " - check $varTagName possible existence..."
|
||||
|
||||
# (eg build invoked by Create New Release GHUI button -> GH default release pack created immediately including default assests)
|
||||
HTTP_RESPONSE=$(curl -L --silent --write-out "HTTPSTATUS:%{http_code}" https://api.github.com/repos/$varRepoSlug/releases/tags/$varTagName?access_token=$varAccessToken)
|
||||
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
|
||||
|
||||
HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g')
|
||||
HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||
echo " ---> GitHub server HTTP response: $HTTP_STATUS"
|
||||
|
||||
# if the release exists, append/update recent files to its assets vector
|
||||
if [ $HTTP_STATUS -eq 200 ]; then
|
||||
releaseId=$(echo $HTTP_BODY | jq -r '.id')
|
||||
echo " - $varTagName release found (id $releaseId)"
|
||||
|
||||
#Merge release notes and overwrite pre-release flag. all other attributes remain unchanged:
|
||||
|
||||
# 1. take existing notes from server (added by release creator)
|
||||
releaseNotesGH=$(echo $HTTP_BODY | jq -r '.body')
|
||||
|
||||
# - strip possibly trailing CR
|
||||
if [ "${releaseNotesGH: -1}" == $'\r' ]; then
|
||||
releaseNotesTemp="${releaseNotesGH:0:-1}"
|
||||
else
|
||||
releaseNotesTemp="$releaseNotesGH"
|
||||
fi
|
||||
# - add CRLF to make relnotes consistent for JSON encoding
|
||||
releaseNotesTemp+=$'\r\n'
|
||||
|
||||
# 2. #append generated relnotes (usually commit oneliners)
|
||||
releaseNotes="$releaseNotesTemp$releaseNotes"
|
||||
|
||||
# 3. JSON-encode whole string for GH API transfer
|
||||
releaseNotes=$(json_escape "$releaseNotes")
|
||||
|
||||
# 4. remove extra quotes returned by python (dummy but whatever)
|
||||
releaseNotes=${releaseNotes:1:-1}
|
||||
|
||||
#Update current GH release record
|
||||
echo " - updating release notes and pre-release flag:"
|
||||
|
||||
curlData="{\"body\": \"$releaseNotes\",\"prerelease\": $varPrerelease}"
|
||||
echo " <data.begin>$curlData<data.end>"
|
||||
echo
|
||||
#echo "DEBUG: curl --data \"$curlData\" https://api.github.com/repos/$varRepoSlug/releases/$releaseId?access_token=$varAccessToken"
|
||||
|
||||
curl --data "$curlData" https://api.github.com/repos/$varRepoSlug/releases/$releaseId?access_token=$varAccessToken
|
||||
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
|
||||
|
||||
echo " - $varTagName release record successfully updated"
|
||||
|
||||
#... or create a new release record
|
||||
else
|
||||
releaseNotes=$(json_escape "$releaseNotes")
|
||||
releaseNotes=${releaseNotes:1:-1}
|
||||
|
||||
echo " - release $varTagName not found, creating a new record:"
|
||||
|
||||
curlData="{\"tag_name\": \"$varTagName\",\"target_commitish\": \"master\",\"name\": \"v$varTagName\",\"body\": \"$releaseNotes\",\"draft\": false,\"prerelease\": $varPrerelease}"
|
||||
echo " <data.begin>$curlData<data.end>"
|
||||
|
||||
#echo "DEBUG: curl --data \"${curlData}\" https://api.github.com/repos/${varRepoSlug}/releases?access_token=$varAccessToken | jq -r '.id'"
|
||||
releaseId=$(curl --data "$curlData" https://api.github.com/repos/$varRepoSlug/releases?access_token=$varAccessToken | jq -r '.id')
|
||||
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
|
||||
|
||||
echo " - $varTagName release record successfully created (id $releaseId)"
|
||||
fi
|
||||
|
||||
# Assets defined by dir contents
|
||||
if [ ! -z $varAssetsDir ]; then
|
||||
varAssetsTemp=$(ls -p $varAssetsDir | grep -v / | tr '\n' ';')
|
||||
for item in $(echo $varAssetsTemp | tr ";" "\n")
|
||||
do
|
||||
varAssets+=$varAssetsDir/$item;
|
||||
varAssets+=';'
|
||||
done
|
||||
fi
|
||||
|
||||
#Upload additional assets
|
||||
if [ ! -z $varAssets ]; then
|
||||
echo
|
||||
echo "Uploading assets:"
|
||||
echo "-----------------"
|
||||
echo " Files to upload:"
|
||||
echo " $varAssets"
|
||||
echo
|
||||
|
||||
curlAuth="Authorization: token $varAccessToken"
|
||||
for filename in $(echo $varAssets | tr ";" "\n")
|
||||
do
|
||||
echo " - ${filename}:"
|
||||
curl -X POST -sH "$curlAuth" -H "Content-Type: application/octet-stream" --data-binary @"$filename" https://uploads.github.com/repos/$varRepoSlug/releases/$releaseId/assets?name=$(basename $filename)
|
||||
|
||||
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
|
||||
|
||||
echo
|
||||
echo "OK"
|
||||
echo
|
||||
|
||||
done
|
||||
fi
|
@ -1,42 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
export ARDUINO_ESP32_PATH="$ARDUINO_USR_PATH/hardware/espressif/esp32"
|
||||
if [ ! -d "$ARDUINO_ESP32_PATH" ]; then
|
||||
echo "Installing ESP32 Arduino Core in '$ARDUINO_ESP32_PATH'..."
|
||||
script_init_path="$PWD"
|
||||
mkdir -p "$ARDUINO_USR_PATH/hardware/espressif" && \
|
||||
cd "$ARDUINO_USR_PATH/hardware/espressif"
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
|
||||
if [ "$GITHUB_REPOSITORY" == "espressif/arduino-esp32" ]; then
|
||||
echo "Linking Core..." && \
|
||||
ln -s $GITHUB_WORKSPACE esp32
|
||||
else
|
||||
echo "Cloning Core Repository..." && \
|
||||
git clone https://github.com/espressif/arduino-esp32.git esp32 > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: GIT clone failed"; exit 1; fi
|
||||
fi
|
||||
|
||||
cd esp32 && \
|
||||
echo "Updating submodules..." && \
|
||||
git submodule update --init --recursive > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Submodule update failed"; exit 1; fi
|
||||
|
||||
echo "Installing Python Serial..." && \
|
||||
pip install pyserial > /dev/null
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Install failed"; exit 1; fi
|
||||
|
||||
if [ "$OS_IS_WINDOWS" == "1" ]; then
|
||||
echo "Installing Python Requests..."
|
||||
pip install requests > /dev/null
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Install failed"; exit 1; fi
|
||||
fi
|
||||
|
||||
echo "Downloading the tools and the toolchain..."
|
||||
cd tools && python get.py > /dev/null
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Download failed"; exit 1; fi
|
||||
cd $script_init_path
|
||||
|
||||
echo "ESP32 Arduino has been installed in '$ARDUINO_ESP32_PATH'"
|
||||
echo ""
|
||||
fi
|
@ -1,217 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#OSTYPE: 'linux-gnu', ARCH: 'x86_64' => linux64
|
||||
#OSTYPE: 'msys', ARCH: 'x86_64' => win32
|
||||
#OSTYPE: 'darwin18', ARCH: 'i386' => macos
|
||||
|
||||
OSBITS=`arch`
|
||||
if [[ "$OSTYPE" == "linux"* ]]; then
|
||||
export OS_IS_LINUX="1"
|
||||
ARCHIVE_FORMAT="tar.xz"
|
||||
if [[ "$OSBITS" == "i686" ]]; then
|
||||
OS_NAME="linux32"
|
||||
elif [[ "$OSBITS" == "x86_64" ]]; then
|
||||
OS_NAME="linux64"
|
||||
elif [[ "$OSBITS" == "armv7l" ]]; then
|
||||
OS_NAME="linuxarm"
|
||||
else
|
||||
OS_NAME="$OSTYPE-$OSBITS"
|
||||
echo "Unknown OS '$OS_NAME'"
|
||||
exit 1
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
export OS_IS_MACOS="1"
|
||||
ARCHIVE_FORMAT="zip"
|
||||
OS_NAME="macosx"
|
||||
elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then
|
||||
export OS_IS_WINDOWS="1"
|
||||
ARCHIVE_FORMAT="zip"
|
||||
OS_NAME="windows"
|
||||
else
|
||||
OS_NAME="$OSTYPE-$OSBITS"
|
||||
echo "Unknown OS '$OS_NAME'"
|
||||
exit 1
|
||||
fi
|
||||
export OS_NAME
|
||||
|
||||
ARDUINO_BUILD_DIR="$HOME/.arduino/build.tmp"
|
||||
ARDUINO_CACHE_DIR="$HOME/.arduino/cache.tmp"
|
||||
|
||||
if [ "$OS_IS_MACOS" == "1" ]; then
|
||||
export ARDUINO_IDE_PATH="/Applications/Arduino.app/Contents/Java"
|
||||
export ARDUINO_USR_PATH="$HOME/Documents/Arduino"
|
||||
else
|
||||
export ARDUINO_IDE_PATH="$HOME/arduino_ide"
|
||||
export ARDUINO_USR_PATH="$HOME/Arduino"
|
||||
fi
|
||||
|
||||
if [ ! -d "$ARDUINO_IDE_PATH" ]; then
|
||||
echo "Installing Arduino IDE on $OS_NAME..."
|
||||
echo "Downloading 'arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT' to 'arduino.$ARCHIVE_FORMAT'..."
|
||||
if [ "$OS_IS_LINUX" == "1" ]; then
|
||||
wget -O "arduino.$ARCHIVE_FORMAT" "https://www.arduino.cc/download.php?f=/arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Download failed"; exit 1; fi
|
||||
echo "Extracting 'arduino.$ARCHIVE_FORMAT'..."
|
||||
tar xf "arduino.$ARCHIVE_FORMAT" > /dev/null
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
mv arduino-nightly "$ARDUINO_IDE_PATH"
|
||||
else
|
||||
curl -o "arduino.$ARCHIVE_FORMAT" -L "https://www.arduino.cc/download.php?f=/arduino-nightly-$OS_NAME.$ARCHIVE_FORMAT" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Download failed"; exit 1; fi
|
||||
echo "Extracting 'arduino.$ARCHIVE_FORMAT'..."
|
||||
unzip "arduino.$ARCHIVE_FORMAT" > /dev/null
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
if [ "$OS_IS_MACOS" == "1" ]; then
|
||||
mv "Arduino.app" "/Applications/Arduino.app"
|
||||
else
|
||||
mv arduino-nightly "$ARDUINO_IDE_PATH"
|
||||
fi
|
||||
fi
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
rm -rf "arduino.$ARCHIVE_FORMAT"
|
||||
|
||||
mkdir -p "$ARDUINO_USR_PATH/libraries"
|
||||
mkdir -p "$ARDUINO_USR_PATH/hardware"
|
||||
|
||||
echo "Arduino IDE Installed in '$ARDUINO_IDE_PATH'"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
function build_sketch(){ # build_sketch <fqbn> <path-to-ino> [extra-options]
|
||||
if [ "$#" -lt 2 ]; then
|
||||
echo "ERROR: Illegal number of parameters"
|
||||
echo "USAGE: build_sketch <fqbn> <path-to-ino> [extra-options]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local fqbn="$1"
|
||||
local sketch="$2"
|
||||
local xtra_opts="$3"
|
||||
local win_opts=""
|
||||
if [ "$OS_IS_WINDOWS" == "1" ]; then
|
||||
local ctags_version=`ls "$ARDUINO_IDE_PATH/tools-builder/ctags/"`
|
||||
local preprocessor_version=`ls "$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/"`
|
||||
win_opts="-prefs=runtime.tools.ctags.path=$ARDUINO_IDE_PATH/tools-builder/ctags/$ctags_version -prefs=runtime.tools.arduino-preprocessor.path=$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/$preprocessor_version"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Compiling '"$(basename "$sketch")"'..."
|
||||
mkdir -p "$ARDUINO_BUILD_DIR"
|
||||
mkdir -p "$ARDUINO_CACHE_DIR"
|
||||
$ARDUINO_IDE_PATH/arduino-builder -compile -logger=human -core-api-version=10810 \
|
||||
-fqbn=$fqbn \
|
||||
-warnings="all" \
|
||||
-tools "$ARDUINO_IDE_PATH/tools-builder" \
|
||||
-tools "$ARDUINO_IDE_PATH/tools" \
|
||||
-built-in-libraries "$ARDUINO_IDE_PATH/libraries" \
|
||||
-hardware "$ARDUINO_IDE_PATH/hardware" \
|
||||
-hardware "$ARDUINO_USR_PATH/hardware" \
|
||||
-libraries "$ARDUINO_USR_PATH/libraries" \
|
||||
-build-cache "$ARDUINO_CACHE_DIR" \
|
||||
-build-path "$ARDUINO_BUILD_DIR" \
|
||||
$win_opts $xtra_opts "$sketch"
|
||||
}
|
||||
|
||||
function count_sketches() # count_sketches <examples-path>
|
||||
{
|
||||
local examples="$1"
|
||||
local sketches=$(find $examples -name *.ino)
|
||||
local sketchnum=0
|
||||
rm -rf sketches.txt
|
||||
for sketch in $sketches; do
|
||||
local sketchdir=$(dirname $sketch)
|
||||
local sketchdirname=$(basename $sketchdir)
|
||||
local sketchname=$(basename $sketch)
|
||||
if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then
|
||||
continue
|
||||
fi;
|
||||
if [[ -f "$sketchdir/.test.skip" ]]; then
|
||||
continue
|
||||
fi
|
||||
echo $sketch >> sketches.txt
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
done
|
||||
return $sketchnum
|
||||
}
|
||||
|
||||
function build_sketches() # build_sketches <fqbn> <examples-path> <chunk> <total-chunks> [extra-options]
|
||||
{
|
||||
local fqbn=$1
|
||||
local examples=$2
|
||||
local chunk_idex=$3
|
||||
local chunks_num=$4
|
||||
local xtra_opts=$5
|
||||
|
||||
if [ "$#" -lt 2 ]; then
|
||||
echo "ERROR: Illegal number of parameters"
|
||||
echo "USAGE: build_sketches <fqbn> <examples-path> [<chunk> <total-chunks>] [extra-options]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$#" -lt 4 ]; then
|
||||
chunk_idex="0"
|
||||
chunks_num="1"
|
||||
xtra_opts=$3
|
||||
fi
|
||||
|
||||
if [ "$chunks_num" -le 0 ]; then
|
||||
echo "ERROR: Chunks count must be positive number"
|
||||
return 1
|
||||
fi
|
||||
if [ "$chunk_idex" -ge "$chunks_num" ]; then
|
||||
echo "ERROR: Chunk index must be less than chunks count"
|
||||
return 1
|
||||
fi
|
||||
|
||||
count_sketches "$examples"
|
||||
local sketchcount=$?
|
||||
local sketches=$(cat sketches.txt)
|
||||
rm -rf sketches.txt
|
||||
|
||||
local chunk_size=$(( $sketchcount / $chunks_num ))
|
||||
local all_chunks=$(( $chunks_num * $chunk_size ))
|
||||
if [ "$all_chunks" -lt "$sketchcount" ]; then
|
||||
chunk_size=$(( $chunk_size + 1 ))
|
||||
fi
|
||||
|
||||
local start_index=$(( $chunk_idex * $chunk_size ))
|
||||
if [ "$sketchcount" -le "$start_index" ]; then
|
||||
echo "Skipping job"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size ))
|
||||
if [ "$end_index" -gt "$sketchcount" ]; then
|
||||
end_index=$sketchcount
|
||||
fi
|
||||
|
||||
local start_num=$(( $start_index + 1 ))
|
||||
echo "Found $sketchcount Sketches";
|
||||
echo "Chunk Count : $chunks_num"
|
||||
echo "Chunk Size : $chunk_size"
|
||||
echo "Start Sketch: $start_num"
|
||||
echo "End Sketch : $end_index"
|
||||
|
||||
local sketchnum=0
|
||||
for sketch in $sketches; do
|
||||
local sketchdir=$(dirname $sketch)
|
||||
local sketchdirname=$(basename $sketchdir)
|
||||
local sketchname=$(basename $sketch)
|
||||
if [ "${sketchdirname}.ino" != "$sketchname" ] \
|
||||
|| [ -f "$sketchdir/.test.skip" ]; then
|
||||
continue
|
||||
fi
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
if [ "$sketchnum" -le "$start_index" ] \
|
||||
|| [ "$sketchnum" -gt "$end_index" ]; then
|
||||
continue
|
||||
fi
|
||||
build_sketch "$fqbn" "$sketch" "$xtra_opts"
|
||||
local result=$?
|
||||
if [ $result -ne 0 ]; then
|
||||
return $result
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
@ -1,153 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
export PLATFORMIO_ESP32_PATH="$HOME/.platformio/packages/framework-arduinoespressif32"
|
||||
|
||||
echo "Installing Python Wheel..."
|
||||
pip install wheel > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Install failed"; exit 1; fi
|
||||
|
||||
echo "Installing PlatformIO..."
|
||||
pip install -U https://github.com/platformio/platformio/archive/develop.zip > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Install failed"; exit 1; fi
|
||||
|
||||
echo "Installing Platform ESP32..."
|
||||
python -m platformio platform install https://github.com/platformio/platform-espressif32.git#feature/stage > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Install failed"; exit 1; fi
|
||||
|
||||
echo "Replacing the framework version..."
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed 's/https:\/\/github\.com\/espressif\/arduino-esp32\.git/*/' "$HOME/.platformio/platforms/espressif32/platform.json" > "platform.json" && \
|
||||
mv -f "platform.json" "$HOME/.platformio/platforms/espressif32/platform.json"
|
||||
else
|
||||
sed -i 's/https:\/\/github\.com\/espressif\/arduino-esp32\.git/*/' "$HOME/.platformio/platforms/espressif32/platform.json"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then echo "ERROR: Replace failed"; exit 1; fi
|
||||
|
||||
if [ "$GITHUB_REPOSITORY" == "espressif/arduino-esp32" ]; then
|
||||
echo "Linking Core..." && \
|
||||
ln -s $GITHUB_WORKSPACE "$PLATFORMIO_ESP32_PATH"
|
||||
else
|
||||
echo "Cloning Core Repository..." && \
|
||||
git clone https://github.com/espressif/arduino-esp32.git "$PLATFORMIO_ESP32_PATH" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then echo "ERROR: GIT clone failed"; exit 1; fi
|
||||
fi
|
||||
|
||||
echo "PlatformIO for ESP32 has been installed"
|
||||
echo ""
|
||||
|
||||
|
||||
function build_pio_sketch(){ # build_pio_sketch <board> <path-to-ino>
|
||||
if [ "$#" -lt 2 ]; then
|
||||
echo "ERROR: Illegal number of parameters"
|
||||
echo "USAGE: build_pio_sketch <board> <path-to-ino>"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local board="$1"
|
||||
local sketch="$2"
|
||||
local sketch_dir=$(dirname "$sketch")
|
||||
echo ""
|
||||
echo "Compiling '"$(basename "$sketch")"'..."
|
||||
python -m platformio ci --board "$board" "$sketch_dir" --project-option="board_build.partitions = huge_app.csv"
|
||||
}
|
||||
|
||||
function count_sketches() # count_sketches <examples-path>
|
||||
{
|
||||
local examples="$1"
|
||||
local sketches=$(find $examples -name *.ino)
|
||||
local sketchnum=0
|
||||
rm -rf sketches.txt
|
||||
for sketch in $sketches; do
|
||||
local sketchdir=$(dirname $sketch)
|
||||
local sketchdirname=$(basename $sketchdir)
|
||||
local sketchname=$(basename $sketch)
|
||||
if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then
|
||||
continue
|
||||
fi;
|
||||
if [[ -f "$sketchdir/.test.skip" ]]; then
|
||||
continue
|
||||
fi
|
||||
echo $sketch >> sketches.txt
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
done
|
||||
return $sketchnum
|
||||
}
|
||||
|
||||
function build_pio_sketches() # build_pio_sketches <board> <examples-path> <chunk> <total-chunks>
|
||||
{
|
||||
if [ "$#" -lt 2 ]; then
|
||||
echo "ERROR: Illegal number of parameters"
|
||||
echo "USAGE: build_pio_sketches <board> <examples-path> [<chunk> <total-chunks>]"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local board=$1
|
||||
local examples=$2
|
||||
local chunk_idex=$3
|
||||
local chunks_num=$4
|
||||
|
||||
if [ "$#" -lt 4 ]; then
|
||||
chunk_idex="0"
|
||||
chunks_num="1"
|
||||
fi
|
||||
|
||||
if [ "$chunks_num" -le 0 ]; then
|
||||
echo "ERROR: Chunks count must be positive number"
|
||||
return 1
|
||||
fi
|
||||
if [ "$chunk_idex" -ge "$chunks_num" ]; then
|
||||
echo "ERROR: Chunk index must be less than chunks count"
|
||||
return 1
|
||||
fi
|
||||
|
||||
count_sketches "$examples"
|
||||
local sketchcount=$?
|
||||
local sketches=$(cat sketches.txt)
|
||||
rm -rf sketches.txt
|
||||
|
||||
local chunk_size=$(( $sketchcount / $chunks_num ))
|
||||
local all_chunks=$(( $chunks_num * $chunk_size ))
|
||||
if [ "$all_chunks" -lt "$sketchcount" ]; then
|
||||
chunk_size=$(( $chunk_size + 1 ))
|
||||
fi
|
||||
|
||||
local start_index=$(( $chunk_idex * $chunk_size ))
|
||||
if [ "$sketchcount" -le "$start_index" ]; then
|
||||
echo "Skipping job"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size ))
|
||||
if [ "$end_index" -gt "$sketchcount" ]; then
|
||||
end_index=$sketchcount
|
||||
fi
|
||||
|
||||
local start_num=$(( $start_index + 1 ))
|
||||
echo "Found $sketchcount Sketches";
|
||||
echo "Chunk Count : $chunks_num"
|
||||
echo "Chunk Size : $chunk_size"
|
||||
echo "Start Sketch: $start_num"
|
||||
echo "End Sketch : $end_index"
|
||||
|
||||
local sketchnum=0
|
||||
for sketch in $sketches; do
|
||||
local sketchdir=$(dirname $sketch)
|
||||
local sketchdirname=$(basename $sketchdir)
|
||||
local sketchname=$(basename $sketch)
|
||||
if [ "${sketchdirname}.ino" != "$sketchname" ] \
|
||||
|| [ -f "$sketchdir/.test.skip" ]; then
|
||||
continue
|
||||
fi
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
if [ "$sketchnum" -le "$start_index" ] \
|
||||
|| [ "$sketchnum" -gt "$end_index" ]; then
|
||||
continue
|
||||
fi
|
||||
build_pio_sketch "$board" "$sketch"
|
||||
local result=$?
|
||||
if [ $result -ne 0 ]; then
|
||||
return $result
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ ! -z "$TRAVIS_TAG" ]; then
|
||||
echo "Skipping Test: Tagged build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -z "$GITHUB_WORKSPACE" ]; then
|
||||
export TRAVIS_BUILD_DIR="$GITHUB_WORKSPACE"
|
||||
export TRAVIS_REPO_SLUG="$GITHUB_REPOSITORY"
|
||||
elif [ ! -z "$TRAVIS_BUILD_DIR" ]; then
|
||||
export GITHUB_WORKSPACE="$TRAVIS_BUILD_DIR"
|
||||
export GITHUB_REPOSITORY="$TRAVIS_REPO_SLUG"
|
||||
else
|
||||
export GITHUB_WORKSPACE="$PWD"
|
||||
export GITHUB_REPOSITORY="espressif/arduino-esp32"
|
||||
fi
|
||||
|
||||
CHUNK_INDEX=$1
|
||||
CHUNKS_CNT=$2
|
||||
BUILD_PIO=0
|
||||
if [ "$#" -lt 2 ] || [ "$CHUNKS_CNT" -le 0 ]; then
|
||||
CHUNK_INDEX=0
|
||||
CHUNKS_CNT=1
|
||||
elif [ "$CHUNK_INDEX" -gt "$CHUNKS_CNT" ]; then
|
||||
CHUNK_INDEX=$CHUNKS_CNT
|
||||
elif [ "$CHUNK_INDEX" -eq "$CHUNKS_CNT" ]; then
|
||||
BUILD_PIO=1
|
||||
fi
|
||||
|
||||
if [ "$BUILD_PIO" -eq 0 ]; then
|
||||
# ArduinoIDE Test
|
||||
FQBN="espressif:esp32:esp32:PSRAM=enabled,PartitionScheme=huge_app"
|
||||
source ./tools/ci/install-arduino-ide.sh
|
||||
source ./tools/ci/install-arduino-core-esp32.sh
|
||||
if [ "$OS_IS_WINDOWS" == "1" ]; then
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/WiFiClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/BLE/examples/BLE_server/BLE_server.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/AzureIoT/examples/GetStarted/GetStarted.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino"
|
||||
elif [ "$OS_IS_MACOS" == "1" ]; then
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/WiFi/examples/WiFiClient/WiFiClient.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/WiFiClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/BluetoothSerial/examples/SerialToSerialBT/SerialToSerialBT.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/BLE/examples/BLE_server/BLE_server.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/AzureIoT/examples/GetStarted/GetStarted.ino" && \
|
||||
build_sketch "$FQBN" "$ARDUINO_ESP32_PATH/libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino"
|
||||
else
|
||||
# CMake Test
|
||||
if [ "$CHUNK_INDEX" -eq 0 ]; then
|
||||
bash "$ARDUINO_ESP32_PATH/tools/ci/check-cmakelists.sh"
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
fi
|
||||
build_sketches "$FQBN" "$ARDUINO_ESP32_PATH/libraries" "$CHUNK_INDEX" "$CHUNKS_CNT"
|
||||
fi
|
||||
else
|
||||
# PlatformIO Test
|
||||
source ./tools/ci/install-platformio-esp32.sh
|
||||
BOARD="esp32dev"
|
||||
build_pio_sketch "$BOARD" "$PLATFORMIO_ESP32_PATH/libraries/WiFi/examples/WiFiClient/WiFiClient.ino" && \
|
||||
build_pio_sketch "$BOARD" "$PLATFORMIO_ESP32_PATH/libraries/WiFiClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino" && \
|
||||
build_pio_sketch "$BOARD" "$PLATFORMIO_ESP32_PATH/libraries/BluetoothSerial/examples/SerialToSerialBT/SerialToSerialBT.ino" && \
|
||||
build_pio_sketch "$BOARD" "$PLATFORMIO_ESP32_PATH/libraries/BLE/examples/BLE_server/BLE_server.ino" && \
|
||||
build_pio_sketch "$BOARD" "$PLATFORMIO_ESP32_PATH/libraries/AzureIoT/examples/GetStarted/GetStarted.ino" && \
|
||||
build_pio_sketch "$BOARD" "$PLATFORMIO_ESP32_PATH/libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino"
|
||||
#build_pio_sketches esp32dev "$PLATFORMIO_ESP32_PATH/libraries"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
Reference in New Issue
Block a user