The main build workflow for GitHub Actions now uses the infinitime-build docker image to build the firmware. This allows to avoid the duplication of the build logic in Docker and Github workflow format.
The Dockerfile has been slightly adapted (remove the USER instructions). Docker images are now published in DockerHub (jf002/infinitime-build).
This commit is contained in:
parent
34506be06e
commit
831f93cd92
160
.github/workflows/main.yml
vendored
160
.github/workflows/main.yml
vendored
|
@ -20,155 +20,31 @@ on:
|
||||||
# Steps to run for the Workflow
|
# Steps to run for the Workflow
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
# Run these steps on Ubuntu
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: jf002/infinitime-build
|
||||||
steps:
|
steps:
|
||||||
|
- name: Workaround permission issues
|
||||||
#########################################################################################
|
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||||
# 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.4
|
|
||||||
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.7.2 https://github.com/mcu-tools/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
|
|
||||||
|
|
||||||
- name: Install lv_font_conv
|
|
||||||
run:
|
|
||||||
npm i -g lv_font_conv@1.5.2
|
|
||||||
|
|
||||||
#########################################################################################
|
|
||||||
# Checkout
|
|
||||||
|
|
||||||
- name: Checkout source files
|
- name: Checkout source files
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
- name: Build
|
||||||
- name: Show files
|
shell: bash
|
||||||
run: set ; pwd ; ls -l
|
env:
|
||||||
|
SOURCES_DIR: .
|
||||||
#########################################################################################
|
run: |
|
||||||
# CMake
|
/opt/build.sh all
|
||||||
|
- name: Upload DFU artifacts
|
||||||
- name: CMake
|
|
||||||
run: |
|
|
||||||
mkdir -p build
|
|
||||||
cd build
|
|
||||||
cmake -G Ninja -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 -DBUILD_DFU=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: |
|
|
||||||
cmake --build build --target pinetime-mcuboot-app
|
|
||||||
|
|
||||||
- name: Unzip DFU package
|
|
||||||
run: |
|
|
||||||
# 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
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: pinetime-mcuboot-app-dfu
|
name: InfiniTime DFU file
|
||||||
path: build/src/pinetime-mcuboot-app-dfu/*
|
path: |
|
||||||
|
./build/output/pinetime-mcuboot-app-dfu-*.zip
|
||||||
#########################################################################################
|
- name: Upload MCUBoot image artifacts
|
||||||
# Make and Upload Standalone Firmware
|
|
||||||
|
|
||||||
- name: Make pinetime-app
|
|
||||||
run: |
|
|
||||||
cmake --build build --target pinetime-app
|
|
||||||
|
|
||||||
- name: Upload standalone firmware
|
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: pinetime-app.out
|
name: InfiniTime MCUBoot image file
|
||||||
path: build/src/pinetime-app*.out
|
path: |
|
||||||
|
./build/output/pinetime-mcuboot-app-image-*.bin
|
||||||
#########################################################################################
|
|
||||||
# Make but don't Upload the Recovery Firmware to be sure it builds correctly
|
|
||||||
|
|
||||||
- name: Make pinetime-recovery
|
|
||||||
run: |
|
|
||||||
cmake --build build --target pinetime-recovery
|
|
||||||
|
|
||||||
#########################################################################################
|
|
||||||
# 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.
|
|
||||||
|
|
|
@ -44,19 +44,19 @@ docker run --rm -it -v $(pwd):/sources --user 1234:1234 infinitime-build
|
||||||
|
|
||||||
## Using the image from Docker Hub
|
## Using the image from Docker Hub
|
||||||
|
|
||||||
The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [pfeerick/infinitime-build](https://hub.docker.com/r/pfeerick/infinitime-build).
|
The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [jf002/infinitime-build](https://hub.docker.com/repository/docker/jf002/infinitime-build).
|
||||||
|
|
||||||
It can be pulled (downloaded) using the following command:
|
It can be pulled (downloaded) using the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull pfeerick/infinitime-build
|
docker pull jf002/infinitime-build
|
||||||
```
|
```
|
||||||
|
|
||||||
The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually:
|
The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually:
|
||||||
|
|
||||||
* For AMD64 (x86_64) systems: `docker pull pfeerick/infinitime-build:amd64`
|
* For AMD64 (x86_64) systems: `docker pull jf002/infinitime-build:amd64`
|
||||||
|
|
||||||
* For ARM64v8 (ARM64/aarch64) systems: `docker pull pfeerick/infinitime-build:arm64v8`
|
* For ARM64v8 (ARM64/aarch64) systems: `docker pull jf002/infinitime-build:arm64v8`
|
||||||
|
|
||||||
## Build the image
|
## Build the image
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,5 @@ RUN bash -c "source /opt/build.sh; GetNrfSdk;"
|
||||||
# McuBoot
|
# McuBoot
|
||||||
RUN bash -c "source /opt/build.sh; GetMcuBoot;"
|
RUN bash -c "source /opt/build.sh; GetMcuBoot;"
|
||||||
|
|
||||||
ARG PUID=1000
|
|
||||||
ARG PGID=1000
|
|
||||||
RUN groupadd --system --gid $PGID infinitime && useradd --system --uid $PUID --gid $PGID infinitime
|
|
||||||
|
|
||||||
USER infinitime:infinitime
|
|
||||||
ENV SOURCES_DIR /sources
|
ENV SOURCES_DIR /sources
|
||||||
CMD ["/opt/build.sh"]
|
CMD ["/opt/build.sh"]
|
||||||
|
|
|
@ -9,7 +9,7 @@ set -e
|
||||||
export TOOLS_DIR="${TOOLS_DIR:=/opt}"
|
export TOOLS_DIR="${TOOLS_DIR:=/opt}"
|
||||||
export SOURCES_DIR="${SOURCES_DIR:=/sources}"
|
export SOURCES_DIR="${SOURCES_DIR:=/sources}"
|
||||||
export BUILD_DIR="${BUILD_DIR:=$SOURCES_DIR/build}"
|
export BUILD_DIR="${BUILD_DIR:=$SOURCES_DIR/build}"
|
||||||
export OUTPUT_DIR="${OUTPUT_DIR:=$BUILD_DIR/output}"
|
export OUTPUT_DIR="${OUTPUT_DIR:=$SOURCES_DIR/build/output}"
|
||||||
|
|
||||||
export BUILD_TYPE=${BUILD_TYPE:=Release}
|
export BUILD_TYPE=${BUILD_TYPE:=Release}
|
||||||
export GCC_ARM_VER=${GCC_ARM_VER:="gcc-arm-none-eabi-9-2020-q2-update"}
|
export GCC_ARM_VER=${GCC_ARM_VER:="gcc-arm-none-eabi-9-2020-q2-update"}
|
||||||
|
@ -22,7 +22,7 @@ main() {
|
||||||
local target="$1"
|
local target="$1"
|
||||||
|
|
||||||
mkdir -p "$TOOLS_DIR"
|
mkdir -p "$TOOLS_DIR"
|
||||||
|
|
||||||
[[ ! -d "$TOOLS_DIR/$GCC_ARM_VER" ]] && GetGcc
|
[[ ! -d "$TOOLS_DIR/$GCC_ARM_VER" ]] && GetGcc
|
||||||
[[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]] && GetNrfSdk
|
[[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]] && GetNrfSdk
|
||||||
[[ ! -d "$TOOLS_DIR/mcuboot" ]] && GetMcuBoot
|
[[ ! -d "$TOOLS_DIR/mcuboot" ]] && GetMcuBoot
|
||||||
|
@ -31,7 +31,7 @@ main() {
|
||||||
|
|
||||||
CmakeGenerate
|
CmakeGenerate
|
||||||
CmakeBuild $target
|
CmakeBuild $target
|
||||||
BUILD_RESULT=$?
|
BUILD_RESULT=$?
|
||||||
if [ "$DISABLE_POSTBUILD" != "true" -a "$BUILD_RESULT" == 0 ]; then
|
if [ "$DISABLE_POSTBUILD" != "true" -a "$BUILD_RESULT" == 0 ]; then
|
||||||
source "$BUILD_DIR/post_build.sh"
|
source "$BUILD_DIR/post_build.sh"
|
||||||
fi
|
fi
|
||||||
|
@ -54,18 +54,14 @@ GetNrfSdk() {
|
||||||
}
|
}
|
||||||
|
|
||||||
CmakeGenerate() {
|
CmakeGenerate() {
|
||||||
# We can swap the CD and trailing SOURCES_DIR for -B and -S respectively
|
|
||||||
# once we go to newer CMake (Ubuntu 18.10 gives us CMake 3.10)
|
|
||||||
cd "$BUILD_DIR"
|
|
||||||
|
|
||||||
cmake -G "Unix Makefiles" \
|
cmake -G "Unix Makefiles" \
|
||||||
|
-S "$SOURCES_DIR" \
|
||||||
|
-B "$BUILD_DIR" \
|
||||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
||||||
-DUSE_OPENOCD=1 \
|
-DUSE_OPENOCD=1 \
|
||||||
-DARM_NONE_EABI_TOOLCHAIN_PATH="$TOOLS_DIR/$GCC_ARM_VER" \
|
-DARM_NONE_EABI_TOOLCHAIN_PATH="$TOOLS_DIR/$GCC_ARM_VER" \
|
||||||
-DNRF5_SDK_PATH="$TOOLS_DIR/$NRF_SDK_VER" \
|
-DNRF5_SDK_PATH="$TOOLS_DIR/$NRF_SDK_VER" \
|
||||||
-DBUILD_DFU=1 \
|
-DBUILD_DFU=1
|
||||||
"$SOURCES_DIR"
|
|
||||||
cmake -L -N .
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CmakeBuild() {
|
CmakeBuild() {
|
||||||
|
|
|
@ -15,12 +15,10 @@ cp "$BUILD_DIR/src/pinetime-mcuboot-app-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/p
|
||||||
cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin"
|
cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin"
|
||||||
cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip"
|
cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip"
|
||||||
|
|
||||||
|
|
||||||
mkdir -p "$OUTPUT_DIR/src"
|
mkdir -p "$OUTPUT_DIR/src"
|
||||||
cd "$BUILD_DIR"
|
cp $BUILD_DIR/src/*.bin "$OUTPUT_DIR/src/"
|
||||||
cp src/*.bin "$OUTPUT_DIR/src"
|
cp $BUILD_DIR/src/*.hex "$OUTPUT_DIR/src/"
|
||||||
cp src/*.hex "$OUTPUT_DIR/src"
|
cp $BUILD_DIR/src/*.out "$OUTPUT_DIR/src/"
|
||||||
cp src/*.out "$OUTPUT_DIR/src"
|
cp $BUILD_DIR/src/*.map "$OUTPUT_DIR/src/"
|
||||||
cp src/*.map "$OUTPUT_DIR/src"
|
|
||||||
|
|
||||||
ls -RUv1 "$OUTPUT_DIR" | sed 's;^\([^/]\); \1;g'
|
ls -RUv1 "$OUTPUT_DIR" | sed 's;^\([^/]\); \1;g'
|
Loading…
Reference in New Issue
Block a user