ref: 0ce98c7ac7ba66acaf504be9bb042796e12f2733
.github/workflows/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 |
# 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/InfiniTime/blob/master/doc/buildAndProgram.md # and https://github.com/JF002/InfiniTime/blob/master/bootloader/README.md # Name of this Workflow name: Build 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: ######################################################################################### # Download and Cache Dependencies - name: Install cmake uses: lukka/get-cmake@v3.18.3 - 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@v1.0.2 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 nRF5 SDK id: cache-nrf5sdk uses: actions/cache@v2 env: cache-name: cache-nrf5sdk with: path: ${{ runner.temp }}/nrf5_sdk key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - name: Install nRF5 SDK if: steps.cache-nrf5sdk.outputs.cache-hit != 'true' # Install SDK if not found in cache run: | cd ${{ runner.temp }} curl https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip -o nrf5_sdk.zip unzip nrf5_sdk.zip mv nRF5_SDK_15.3.0_59ac345 nrf5_sdk - 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 ######################################################################################### # Checkout - name: Checkout source files uses: actions/checkout@v2 - name: Show files run: set ; pwd ; ls -l ######################################################################################### # CMake - name: CMake run: | mkdir -p build cd build cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 ../ ######################################################################################### # Make and Upload DFU Package # pinetime-mcuboot-app.img must be flashed at address 0x8000 in the internal flash memory with OpenOCD: # program image.bin 0x8000 # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. # For Faster Builds: Add "make" option "-j" - name: Make pinetime-mcuboot-app run: | cd build make pinetime-mcuboot-app - name: Create firmware image run: | # The generated firmware binary looks like "pinetime-mcuboot-app-0.8.2.bin" ls -l build/src/pinetime-mcuboot-app*.bin ${{ runner.temp }}/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header build/src/pinetime-mcuboot-app*.bin build/src/pinetime-mcuboot-app-img.bin ${{ runner.temp }}/mcuboot/scripts/imgtool.py verify build/src/pinetime-mcuboot-app-img.bin - name: Create DFU package run: | ~/.local/bin/adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build/src/pinetime-mcuboot-app-img.bin build/src/pinetime-mcuboot-app-dfu.zip unzip -v build/src/pinetime-mcuboot-app-dfu.zip # Unzip the package because Upload Artifact will zip up the files unzip build/src/pinetime-mcuboot-app-dfu.zip -d build/src/pinetime-mcuboot-app-dfu - name: Upload DFU package uses: actions/upload-artifact@v2 with: name: pinetime-mcuboot-app-dfu path: build/src/pinetime-mcuboot-app-dfu/* ######################################################################################### # Make and Upload Standalone Firmware - name: Make pinetime-app run: | cd build make pinetime-app - name: Upload standalone firmware uses: actions/upload-artifact@v2 with: name: pinetime-app.out path: build/src/pinetime-app*.out ######################################################################################### # Finish - name: Find output run: | find . -name "pinetime-app.*" -ls find . -name "pinetime-mcuboot-app.*" -ls # Embedded Arm Toolchain and nRF5 SDK will only be cached if the build succeeds. # So make sure that the first build always succeeds, e.g. comment out the "Make" step. |