143 lines
4.0 KiB
YAML
143 lines
4.0 KiB
YAML
# GitHub Actions Workflow to build PineTime Watch Face Simulator with LVGL and WebAssembly
|
|
# 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
|