# GitHub Actions Workflow to build FreeRTOS Firmware for PineTime Smart Watch # See https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud # Based on https://github.com/JF002/Pinetime/blob/master/doc/buildAndProgram.md # and https://github.com/JF002/Pinetime/blob/master/bootloader/README.md # Name of this Workflow name: Simulate PineTime Firmware # When to run this Workflow... on: # Run this Workflow when files are updated (Pushed) in the "master" Branch push: branches: [ master ] # Also run this Workflow when a Pull Request is created or updated in the "master" Branch pull_request: branches: [ master ] # Steps to run for the Workflow jobs: build: # Run these steps on Ubuntu runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Fetch cache for Rust Toolchain id: cache-rust uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Install Rust Toolchain for emscripten run: | rustup default nightly rustup target add wasm32-unknown-emscripten - name: Check cache for emscripten id: cache-emsdk uses: actions/cache@v2 env: cache-name: cache-emsdk with: path: /tmp/emsdk key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - name: Install emscripten if: steps.cache-emsdk.outputs.cache-hit != 'true' # Install emscripten if not found in cache run: | # Based on https://emscripten.org/docs/getting_started/downloads.html cd /tmp # Get the emsdk repo git clone https://github.com/emscripten-core/emsdk.git # Enter that directory cd emsdk # Download and install the latest SDK tools. ./emsdk install latest # Make the "latest" SDK "active" for the current user. (writes .emscripten file) ./emsdk activate latest # Activate PATH and other environment variables in the current terminal source ./emsdk_env.sh # Show version emcc --version emcc --version - name: Check cache for wabt id: cache-wabt uses: actions/cache@v2 env: cache-name: cache-wabt with: path: /tmp/wabt key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - name: Install wabt if: steps.cache-wabt.outputs.cache-hit != 'true' # Install wabt if not found in cache run: | cd /tmp git clone --recursive https://github.com/WebAssembly/wabt cd wabt mkdir build cd build cmake .. cmake --build . - name: Checkout LVGL for WebAssembly run: | cd /tmp git clone https://github.com/AppKaki/lvgl-wasm - name: Copy Watch Face Clock.cpp to LVGL for WebAssembly run: | cp src/DisplayApp/Screens/Clock.cpp /tmp/lvgl-wasm/clock - name: Build LVGL for WebAssembly run: | # Add emscripten and wabt to the PATH source /tmp/emsdk/emsdk_env.sh export PATH=$PATH:/tmp/wabt/build # Build LVGL app: wasm/lvgl.html, lvgl.js, lvgl.wasm cd /tmp/lvgl-wasm wasm/lvgl.sh - name: Show files run: set ; pwd ; ls -l /tmp/lvgl-wasm - name: Copy WebAssembly to GitHub Pages run: | if [ ! -d docs ]; then mkdir docs fi cp /tmp/lvgl-wasm/wasm/*.html /tmp/lvgl-wasm/wasm/*.js /tmp/lvgl-wasm/wasm/*.wasm /tmp/lvgl-wasm/wasm/*.txt docs - name: Commit GitHub Pages run: | echo TODO - name: Upload Outputs uses: actions/upload-artifact@v2 with: name: wasm path: | /tmp/lvgl-wasm/wasm/*.html /tmp/lvgl-wasm/wasm/*.js /tmp/lvgl-wasm/wasm/*.wasm /tmp/lvgl-wasm/wasm/*.txt