From 1b4f186fa605ca47a644fafcc287c0e945579cc1 Mon Sep 17 00:00:00 2001 From: Links Date: Tue, 5 Jan 2021 18:35:22 +0100 Subject: [PATCH] use github actions for build --- .github/workflows/main.yml | 178 ++++++++++++++++++++++++++++--------- travis/common.sh | 68 +++++++++++++- 2 files changed, 200 insertions(+), 46 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6dad303..d0ed693 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,77 +1,167 @@ -# This is a basic workflow to help you get started with Actions - name: CI - -# Controls when the action will run. on: - # Triggers the workflow on push or pull request events but only for the master branch + schedule: + - cron: '0 0 * * 5' push: branches: [ master ] pull_request: branches: [ master ] + release: + types: [ published, created, edited ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on + + prepare_example_json: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: generate examples + id: set-matrix + run: | + source $GITHUB_WORKSPACE/travis/common.sh + cd $GITHUB_WORKSPACE + echo -en "::set-output name=matrix::" + echo -en "[" + + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.6.13 esp8266com:esp8266:generic:xtal=80 + echo -en "," + + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.6.13 esp8266com:esp8266:generic:xtal=80,dbg=Serial1 + echo -en "," + + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.13 esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80 + echo -en "," + + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.13 espressif:esp32:esp32:FlashFreq=80 + + echo -en "]" + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + + prepare_ide: runs-on: ubuntu-latest strategy: - matrix: - env: - - CPU: esp8266 - BOARD: esp8266com:esp8266:generic:xtal=80 - IDE_VERSION: 1.6.13 - - CPU: esp8266 - BOARD: esp8266com:esp8266:generic:xtal=80,dbg=Serial1 - IDE_VERSION: 1.6.13 - - CPU: esp8266 - BOARD: esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80 - IDE_VERSION: 1.8.13 - - CPU: esp32 - BOARD: espressif:esp32:esp32:FlashFreq=80 - IDE_VERSION: 1.8.5 - - CPU: esp32 - BOARD: espressif:esp32:esp32:FlashFreq=80 - IDE_VERSION: 1.8.9 - - CPU: esp32 - BOARD: espressif:esp32:esp32:FlashFreq=80 - IDE_VERSION: 1.8.13 - env: ${{ matrix.env }} + fail-fast: false + matrix: + IDE_VERSION: [1.8.13, 1.6.13] + env: + IDE_VERSION: ${{ matrix.IDE_VERSION }} + + steps: + - uses: actions/checkout@v2 + + - name: Get Date + id: get-date + run: | + echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")" + shell: bash + + - uses: actions/cache@v2 + id: cache_all + with: + path: | + /home/runner/arduino_ide + /home/runner/Arduino + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ matrix.IDE_VERSION }} + + - name: download IDE + if: steps.cache_all.outputs.cache-hit != 'true' + run: | + wget http://downloads.arduino.cc/arduino-$IDE_VERSION-linux64.tar.xz -q + tar xf arduino-$IDE_VERSION-linux64.tar.xz + mv arduino-$IDE_VERSION $HOME/arduino_ide + + - name: download ArduinoJson + if: steps.cache_all.outputs.cache-hit != 'true' + run: | + mkdir -p $HOME/Arduino/libraries + wget https://github.com/bblanchon/ArduinoJson/archive/6.x.zip -q + unzip 6.x.zip + mv ArduinoJson-6.x $HOME/Arduino/libraries/ArduinoJson + + - name: download esp8266 + if: steps.cache_all.outputs.cache-hit != 'true' + run: | + source $GITHUB_WORKSPACE/travis/common.sh + get_core esp8266 + + - name: download esp32 + if: steps.cache_all.outputs.cache-hit != 'true' && matrix.IDE_VERSION != '1.6.13' + run: | + source $GITHUB_WORKSPACE/travis/common.sh + get_core esp32 + + build: + needs: [prepare_ide, prepare_example_json] + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.prepare_example_json.outputs.matrix) }} + env: + CPU: ${{ matrix.cpu }} + BOARD: ${{ matrix.board }} + IDE_VERSION: ${{ matrix.ideversion }} + SKETCH: ${{ matrix.sketch }} # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - - - name: prepare + + - name: Get Date + id: get-date + run: | + echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")" + shell: bash + + - uses: actions/cache@v2 + id: cache_all + with: + path: | + /home/runner/arduino_ide + /home/runner/Arduino + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ matrix.ideversion }} + + - name: install python serial + if: matrix.cpu == 'esp32' + run: | + sudo pip3 install pyserial + sudo pip install pyserial +# sudo apt install python-is-python3 + + - name: start DISPLAY run: | /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16 export DISPLAY=:1.0 sleep 3 - wget http://downloads.arduino.cc/arduino-$IDE_VERSION-linux64.tar.xz - tar xf arduino-$IDE_VERSION-linux64.tar.xz - mv arduino-$IDE_VERSION $HOME/arduino_ide + + - name: test IDE + run: | export PATH="$HOME/arduino_ide:$PATH" which arduino - mkdir -p $HOME/Arduino/libraries - wget https://github.com/bblanchon/ArduinoJson/archive/6.x.zip - unzip 6.x.zip - mv ArduinoJson-6.x $HOME/Arduino/libraries/ArduinoJson + - name: copy code + run: | cp -r $GITHUB_WORKSPACE $HOME/Arduino/libraries/arduinoWebSockets - source $GITHUB_WORKSPACE/travis/common.sh - get_core $CPU - cd $GITHUB_WORKSPACE + + - name: config IDE + run: | + export DISPLAY=:1.0 + export PATH="$HOME/arduino_ide:$PATH" arduino --board $BOARD --save-prefs arduino --get-pref sketchbook.path arduino --pref update.check=false - - name: build examples + - name: build example run: | + export DISPLAY=:1.0 + export PATH="$HOME/arduino_ide:$PATH" source $GITHUB_WORKSPACE/travis/common.sh cd $GITHUB_WORKSPACE - build_sketches arduino $HOME/Arduino/libraries/arduinoWebSockets/examples/$CPU $CPU + build_sketch arduino $SKETCH + diff --git a/travis/common.sh b/travis/common.sh index be959fa..364000e 100644 --- a/travis/common.sh +++ b/travis/common.sh @@ -27,6 +27,66 @@ function build_sketches() done } +function build_sketch() +{ + local arduino=$1 + local sketch=$2 + $arduino --verify $sketch; + local result=$? + if [ $result -ne 0 ]; then + echo "Build failed ($sketch) build verbose..." + $arduino --verify --verbose --preserve-temp-files $sketch + result=$? + fi + if [ $result -ne 0 ]; then + echo "Build failed ($1) $sketch" + return $result + fi +} + +function get_sketches_json() +{ + local arduino=$1 + local srcpath=$2 + local platform=$3 + local sketches=($(find $srcpath -name *.ino)) + echo -en "[" + for sketch in "${sketches[@]}" ; do + local sketchdir=$(dirname $sketch) + if [[ -f "$sketchdir/.$platform.skip" ]]; then + continue + fi + echo -en "\"$sketch\"" + if [[ $sketch != ${sketches[-1]} ]] ; then + echo -en "," + fi + + done + echo -en "]" +} + +function get_sketches_json_matrix() +{ + local arduino=$1 + local srcpath=$2 + local platform=$3 + local ideversion=$4 + local board=$5 + local sketches=($(find $srcpath -name *.ino)) + for sketch in "${sketches[@]}" ; do + local sketchdir=$(dirname $sketch) + local sketchname=$(basename $sketch) + if [[ -f "$sketchdir/.$platform.skip" ]]; then + continue + fi + echo -en "{\"name\":\"$sketchname\",\"board\":\"$board\",\"ideversion\":\"$ideversion\",\"cpu\":\"$platform\",\"sketch\":\"$sketch\"}" + if [[ $sketch != ${sketches[-1]} ]] ; then + echo -en "," + fi + done +} + + function get_core() { @@ -38,7 +98,9 @@ function get_core() mkdir esp8266com cd esp8266com git clone https://github.com/esp8266/Arduino.git esp8266 - cd esp8266/tools + cd esp8266/ + rm -rf .git + cd tools python get.py fi @@ -46,7 +108,9 @@ function get_core() mkdir espressif cd espressif git clone https://github.com/espressif/arduino-esp32.git esp32 - cd esp32/tools + cd esp32/ + rm -rf .git + cd tools python get.py fi