-
-
Notifications
You must be signed in to change notification settings - Fork 54
202 lines (167 loc) · 7.1 KB
/
main.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# GitHub Actions Workflow to build Rust+Mynewt Firmware for PineTime Smart Watch
# See https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud
# Name of this Workflow
name: Build PineTime Firmware
# When to run this Workflow...
on:
# Run this Workflow when files are updated (Pushed) in this Branch
push:
branches: [ master, lvgl, timesync, lvgl-rust, pre-lvgl ]
# Steps to run for the Workflow
jobs:
build:
# Run these steps on Ubuntu
runs-on: ubuntu-latest
steps:
#########################################################################################
# Checkout
- name: Checkout source files
uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: Check cache for newt
id: cache-newt
uses: actions/cache@v2
env:
cache-name: cache-newt
with:
path: ${{ runner.temp }}/mynewt-newt
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Install newt
if: steps.cache-newt.outputs.cache-hit != 'true' # Install newt if not found in cache
run: |
source scripts/install-version.sh
cd ${{ runner.temp }}
# "master" was previously "$mynewt_version". See https://github.com/apache/mynewt-core/pull/2430
git clone --branch master https://github.com/apache/mynewt-newt/
cd mynewt-newt/
./build.sh
newt/newt version
export PATH=$PATH:${{ runner.temp }}/mynewt-newt/newt
newt version
- name: Check cache for Mynewt source files
id: cache-mynewt
uses: actions/cache@v2
env:
cache-name: cache-mynewt
with:
path: repos
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Download Mynewt source files
if: steps.cache-mynewt.outputs.cache-hit != 'true' # Install mynewt if not found in cache
run: |
export PATH=$PATH:${{ runner.temp }}/mynewt-newt/newt
source scripts/install-version.sh
mkdir repos
cp -r patch/repos-windows/.configs repos
cd repos
git clone --branch $mcuboot_version https://github.com/JuulLabs-OSS/mcuboot mcuboot
git clone --branch $mynewt_version https://github.com/apache/mynewt-core apache-mynewt-core
git clone --branch $nimble_version https://github.com/apache/mynewt-nimble apache-mynewt-nimble
ls -la
- name: Show files
run: set ; pwd ; ls -l
#########################################################################################
# Download and Cache Dependencies
# - 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 Target thumbv7em-none-eabihf
run: |
rustup default nightly
rustup target add thumbv7em-none-eabihf
- name: Check cache for Embedded Arm Toolchain arm-none-eabi-gcc
id: cache-toolchain
uses: actions/cache@v2
env:
cache-name: cache-toolchain-9-2020-q2
with:
path: ${{ runner.temp }}/arm-none-eabi
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Install Embedded Arm Toolchain arm-none-eabi-gcc
if: steps.cache-toolchain.outputs.cache-hit != 'true' # Install toolchain if not found in cache
uses: fiam/arm-none-eabi-gcc@162d71c10065d706b8a07a2f27d7628cad82e4e3
with:
# GNU Embedded Toolchain for Arm release name, in the V-YYYY-qZ format (e.g. "9-2019-q4")
release: 9-2020-q2
# Directory to unpack GCC to. Defaults to a temporary directory.
directory: ${{ runner.temp }}/arm-none-eabi
- name: Check cache for MCUBoot
id: cache-mcuboot
uses: actions/cache@v2
env:
cache-name: cache-mcuboot
with:
path: ${{ runner.temp }}/mcuboot
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Install MCUBoot
if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache
run: |
cd ${{ runner.temp }}
git clone --branch v1.5.0 https://github.com/JuulLabs-OSS/mcuboot
# - name: Install imgtool dependencies
# run: pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt
# - name: Install adafruit-nrfutil
# run: |
# pip3 install --user wheel
# pip3 install --user setuptools
# pip3 install --user adafruit-nrfutil
#########################################################################################
# Build and Upload MCUBoot Bootloader
- name: Build Bootloader
run: |
export PATH=$PATH:${{ runner.temp }}/mynewt-newt/newt:${{ runner.temp }}/arm-none-eabi/bin
./scripts/nrf52/build-boot.sh
- name: Upload Bootloader
uses: actions/upload-artifact@v2
with:
name: mynewt.elf
path: bin/targets/nrf52_boot/app/@mcuboot/boot/mynewt/mynewt.elf
- name: Upload Bootloader Outputs
uses: actions/upload-artifact@v2
with:
name: mynewt.zip
path: bin/targets/nrf52_boot/app/@mcuboot/boot/mynewt/mynewt.*
#########################################################################################
# Build and Upload Rust+Mynewt Application Firmware
- name: Build Application Firmware
run: |
export PATH=$PATH:${{ runner.temp }}/mynewt-newt/newt:${{ runner.temp }}/arm-none-eabi/bin
./scripts/build-app.sh
- name: Upload Application Firmware
uses: actions/upload-artifact@v2
with:
name: my_sensor_app.elf
path: bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.elf
- name: Create Application Firmware Image
run: |
export PATH=$PATH:${{ runner.temp }}/mynewt-newt/newt:${{ runner.temp }}/arm-none-eabi/bin
./scripts/nrf52/image-app.sh
- name: Upload Application Firmware Image
uses: actions/upload-artifact@v2
with:
name: my_sensor_app.img
path: bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.img
- name: Upload Application Firmware Outputs
uses: actions/upload-artifact@v2
with:
name: my_sensor_app.zip
path: bin/targets/nrf52_my_sensor/app/apps/my_sensor_app/my_sensor_app.*
#########################################################################################
# Finish
- name: Find output
run: |
find bin/targets/nrf52_boot/app/@mcuboot/boot/mynewt -name "mynewt.*" -ls
find bin/targets/nrf52_my_sensor/app/apps/my_sensor_app -name "my_sensor_app.*" -ls
# Embedded Arm Toolchain will only be cached if the build succeeds.
# So make sure that the first build always succeeds, e.g. comment out the "Build" step.