mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-16 21:05:32 +03:00
273 lines
11 KiB
YAML
273 lines
11 KiB
YAML
name: Build firmware
|
|
# Don't enable CI on push, just on PR. If you
|
|
# are working on the main repo and want to trigger
|
|
# a CI build submit a draft PR.
|
|
on:
|
|
push:
|
|
branches:
|
|
- '!maintenance-8.x.x'
|
|
pull_request:
|
|
paths:
|
|
- 'src/**'
|
|
- '.github/**'
|
|
- 'cmake/**'
|
|
- 'lib/**'
|
|
- 'docs/Settings.md'
|
|
- 'CMakeLists.txt'
|
|
- '*.sh'
|
|
|
|
workflow_call:
|
|
#inputs:
|
|
# release_build:
|
|
# description: 'Specifies if it is a build that should include commit hash in hex file names or not'
|
|
# default: false
|
|
# required: false
|
|
# type: boolean
|
|
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
id: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install dependencies
|
|
run: sudo apt-get update && sudo apt-get -y install ninja-build
|
|
- name: Setup environment
|
|
env:
|
|
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
|
run: |
|
|
# This is the hash of the commit for the PR
|
|
# when the action is triggered by PR, empty otherwise
|
|
COMMIT_ID=${{ github.event.pull_request.head.sha }}
|
|
# This is the hash of the commit when triggered by push
|
|
# but the hash of refs/pull/<n>/merge, which is different
|
|
# from the hash of the latest commit in the PR, that's
|
|
# why we try github.event.pull_request.head.sha first
|
|
COMMIT_ID=${COMMIT_ID:-${{ github.sha }}}
|
|
BUILD_SUFFIX=ci-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID})
|
|
VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t)]/, "", $2); print $2 }')
|
|
echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "NUM_CORES=$(grep processor /proc/cpuinfo | wc -l)" >> $GITHUB_ENV
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: downloads
|
|
key: ${{ runner.os }}-downloads-${{ hashFiles('CMakeLists.txt') }}-${{ hashFiles('**/cmake/*')}}
|
|
- name: Build targets (${{ matrix.id }})
|
|
run: mkdir -p build && cd build && cmake -DWARNINGS_AS_ERRORS=ON -DCI_JOB_INDEX=${{ matrix.id }} -DCI_JOB_COUNT=${{ strategy.job-total }} -DBUILD_SUFFIX=${{ env.BUILD_SUFFIX }} -DMAIN_COMPILE_OPTIONS=-pipe -G Ninja .. && ninja -j${{ env.NUM_CORES }} ci
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: matrix-${{ env.BUILD_NAME }}.${{ matrix.id }}
|
|
path: ./build/*.hex
|
|
retention-days: 1
|
|
|
|
upload-artifacts:
|
|
runs-on: ubuntu-latest
|
|
needs: [build]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup environment
|
|
env:
|
|
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
|
run: |
|
|
# This is the hash of the commit for the PR
|
|
# when the action is triggered by PR, empty otherwise
|
|
COMMIT_ID=${{ github.event.pull_request.head.sha }}
|
|
# This is the hash of the commit when triggered by push
|
|
# but the hash of refs/pull/<n>/merge, which is different
|
|
# from the hash of the latest commit in the PR, that's
|
|
# why we try github.event.pull_request.head.sha first
|
|
COMMIT_ID=${COMMIT_ID:-${{ github.sha }}}
|
|
BUILD_SUFFIX=ci-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID})
|
|
VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t)]/, "", $2); print $2 }')
|
|
echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "NUM_CORES=$(grep processor /proc/cpuinfo | wc -l)" >> $GITHUB_ENV
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
pattern: matrix-inav-*
|
|
merge-multiple: true
|
|
path: binaries
|
|
- name: Build target list
|
|
run: |
|
|
ls -1 binaries/*.hex | cut -d/ -f2 > targets.txt
|
|
- name: Upload firmware images
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ env.BUILD_NAME }}
|
|
path: binaries/*.hex
|
|
- name: Upload firmware images
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: targets
|
|
path: targets.txt
|
|
|
|
build-SITL-Linux-arm64:
|
|
runs-on: ubuntu-22.04-arm
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install dependencies
|
|
run: sudo apt-get update && sudo apt-get -y install ninja-build
|
|
- name: Setup environment
|
|
env:
|
|
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
|
run: |
|
|
# This is the hash of the commit for the PR
|
|
# when the action is triggered by PR, empty otherwise
|
|
COMMIT_ID=${{ github.event.pull_request.head.sha }}
|
|
# This is the hash of the commit when triggered by push
|
|
# but the hash of refs/pull/<n>/merge, which is different
|
|
# from the hash of the latest commit in the PR, that's
|
|
# why we try github.event.pull_request.head.sha first
|
|
COMMIT_ID=${COMMIT_ID:-${{ github.sha }}}
|
|
BUILD_SUFFIX=ci-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID})
|
|
VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t)]/, "", $2); print $2 }')
|
|
echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "NUM_CORES=$(grep processor /proc/cpuinfo | wc -l)" >> $GITHUB_ENV
|
|
- name: Build SITL
|
|
run: mkdir -p build_SITL && cd build_SITL && cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -G Ninja .. && ninja -j${{ env.NUM_CORES }}
|
|
- name: Strip version number
|
|
run: |
|
|
for f in build_SITL/*_SITL; do
|
|
mv $f $(echo $f | sed -e 's/_[0-9]\+\.[0-9]\+\.[0-9]\+//')
|
|
done
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ env.BUILD_NAME }}_SITL-Linux-aarch64
|
|
path: ./build_SITL/*_SITL
|
|
|
|
build-SITL-Linux:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install dependencies
|
|
run: sudo apt-get update && sudo apt-get -y install ninja-build
|
|
- name: Setup environment
|
|
env:
|
|
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
|
run: |
|
|
# This is the hash of the commit for the PR
|
|
# when the action is triggered by PR, empty otherwise
|
|
COMMIT_ID=${{ github.event.pull_request.head.sha }}
|
|
# This is the hash of the commit when triggered by push
|
|
# but the hash of refs/pull/<n>/merge, which is different
|
|
# from the hash of the latest commit in the PR, that's
|
|
# why we try github.event.pull_request.head.sha first
|
|
COMMIT_ID=${COMMIT_ID:-${{ github.sha }}}
|
|
BUILD_SUFFIX=ci-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID})
|
|
VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t)]/, "", $2); print $2 }')
|
|
echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "NUM_CORES=$(grep processor /proc/cpuinfo | wc -l)" >> $GITHUB_ENV
|
|
- name: Build SITL
|
|
run: mkdir -p build_SITL && cd build_SITL && cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -G Ninja .. && ninja -j${{ env.NUM_CORES }}
|
|
- name: Strip version number
|
|
run: |
|
|
for f in build_SITL/*_SITL; do
|
|
mv $f $(echo $f | sed -e 's/_[0-9]\+\.[0-9]\+\.[0-9]\+//')
|
|
done
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ env.BUILD_NAME }}_SITL-Linux
|
|
path: ./build_SITL/*_SITL
|
|
|
|
build-SITL-Mac:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install dependencies
|
|
run: |
|
|
brew install cmake ninja ruby
|
|
|
|
- name: Setup environment
|
|
env:
|
|
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
|
run: |
|
|
# This is the hash of the commit for the PR
|
|
# when the action is triggered by PR, empty otherwise
|
|
COMMIT_ID=${{ github.event.pull_request.head.sha }}
|
|
# This is the hash of the commit when triggered by push
|
|
# but the hash of refs/pull/<n>/merge, which is different
|
|
# from the hash of the latest commit in the PR, that's
|
|
# why we try github.event.pull_request.head.sha first
|
|
COMMIT_ID=${COMMIT_ID:-${{ github.sha }}}
|
|
BUILD_SUFFIX=ci-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID})
|
|
VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t)]/, "", $2); print $2 }')
|
|
echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "NUM_CORES=$(grep processor /proc/cpuinfo | wc -l)" >> $GITHUB_ENV
|
|
- name: Build SITL
|
|
run: |
|
|
mkdir -p build_SITL && cd build_SITL
|
|
cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -G Ninja ..
|
|
ninja -j4
|
|
- name: Strip version number
|
|
run: |
|
|
for f in build_SITL/*_SITL; do
|
|
mv -v $f $(echo $f | sed -Ee 's/_[0-9]+\.[0-9]+\.[0-9]+//')
|
|
done
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ env.BUILD_NAME }}_SITL-MacOS
|
|
path: ./build_SITL/*_SITL
|
|
|
|
build-SITL-Windows:
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: C:\tools\cygwin\bin\bash.exe -o igncr '{0}'
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup Cygwin
|
|
uses: egor-tensin/setup-cygwin@v4
|
|
with:
|
|
packages: cmake ruby ninja gcc-g++
|
|
- name: Setup environment
|
|
env:
|
|
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
|
run: |
|
|
# This is the hash of the commit for the PR
|
|
# when the action is triggered by PR, empty otherwise
|
|
COMMIT_ID=${{ github.event.pull_request.head.sha }}
|
|
# This is the hash of the commit when triggered by push
|
|
# but the hash of refs/pull/<n>/merge, which is different
|
|
# from the hash of the latest commit in the PR, that's
|
|
# why we try github.event.pull_request.head.sha first
|
|
COMMIT_ID=${COMMIT_ID:-${{ github.sha }}}
|
|
BUILD_SUFFIX=ci-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID})
|
|
VERSION=$( grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t)]/, "", $2); print $2 }' )
|
|
echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV
|
|
|
|
- name: Build SITL
|
|
run: mkdir -p build_SITL && cd build_SITL && cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -G Ninja .. && ninja -j4
|
|
- name: Strip version number
|
|
run: |
|
|
for f in ./build_SITL/*_SITL.exe; do
|
|
mv $f $(echo $f | sed -e 's/_[0-9]\+\.[0-9]\+\.[0-9]\+//')
|
|
done
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ env.BUILD_NAME }}_SITL-WIN
|
|
path: ./build_SITL/*.exe
|
|
|
|
test:
|
|
#needs: [build]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install dependencies
|
|
run: sudo apt-get update && sudo apt-get -y install ninja-build
|
|
- name: Run Tests
|
|
run: mkdir -p build && cd build && cmake -DTOOLCHAIN=none -G Ninja .. && ninja check
|