mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 20:58:10 +00:00
379 lines
14 KiB
YAML
379 lines
14 KiB
YAML
# Workflow for testing MULTI-Module firmware builds
|
|
|
|
name: MULTI Test, Build, Deploy, Release
|
|
|
|
on:
|
|
# Trigger the workflow on pushes, except those that are tagged (avoids double-testing releases)
|
|
push:
|
|
branches:
|
|
- '**'
|
|
tags-ignore:
|
|
- '**'
|
|
paths:
|
|
- '.github/workflows/**'
|
|
- 'buildroot/bin/**'
|
|
- 'Multiprotocol/**'
|
|
|
|
# Trigger the workflow on pull requests to the master branch
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
paths:
|
|
- '.github/workflows/**'
|
|
- 'buildroot/bin/**'
|
|
- 'Multiprotocol/**'
|
|
|
|
# Triggers the workflow on release creation
|
|
release:
|
|
types:
|
|
- created
|
|
|
|
# Allows the workflow to be triggered manually from the Actions tab
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
|
|
# Configure the board matrix
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- board: "multi4in1:avr:multiatmega328p:bootloader=none"
|
|
name: "ATmega328p"
|
|
- board: "multi4in1:avr:multiatmega328p:bootloader=optiboot"
|
|
name: "ATmega328p (Optiboot)"
|
|
- board: "multi4in1:avr:multixmega32d4"
|
|
name: "OrangeRX"
|
|
- board: "multi4in1:STM32F1:multistm32f103c8:debug_option=none"
|
|
name: "STM32F103 (64KB)"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=none"
|
|
name: "STM32F103 (128KB)"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=native"
|
|
name: "STM32F103 (128KB, USB Debug)"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=ftdi"
|
|
name: "STM32F103 (128KB, Serial Debug)"
|
|
- board: "multi4in1:STM32F1:multi5in1t18int"
|
|
name: "T18 5-in-1 (128KB)"
|
|
|
|
# Set the build name using the friendly board name
|
|
name: "[Test] ${{ matrix.name }}"
|
|
|
|
# Set the environment variables
|
|
env:
|
|
BOARD: ${{ matrix.board }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Arduino CLI
|
|
uses: arduino/setup-arduino-cli@v2
|
|
with:
|
|
version: "0.32.2"
|
|
|
|
- name: Prepare build environment
|
|
run: |
|
|
echo "Github Ref: $GITHUB_REF"
|
|
echo "Event name: ${{ github.event_name }}"
|
|
echo "Event action: ${{ github.event.action }}"
|
|
echo "Tag name: ${{ github.event.release.tag_name }}"
|
|
|
|
arduino-cli config init --additional-urls https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module-Boards/master/package_multi_4in1_board_index.json,https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module-Boards/devel/source/package_multi_4in1_board_devel_index.json
|
|
arduino-cli core update-index
|
|
|
|
if [[ "$BOARD" =~ ":avr:" ]]; then
|
|
arduino-cli core install arduino:avr;
|
|
fi
|
|
|
|
if [[ "$BOARD" =~ "multi4in1-devel:avr" ]]; then
|
|
arduino-cli core install multi4in1-devel:avr
|
|
elif [[ "$BOARD" =~ "multi4in1:avr" ]]; then
|
|
arduino-cli core install multi4in1:avr
|
|
fi
|
|
|
|
if [[ "$BOARD" =~ "multi4in1-devel:STM32F1:" ]]; then
|
|
arduino-cli core install multi4in1-devel:STM32F1
|
|
elif [[ "$BOARD" =~ "multi4in1:STM32F1:" ]]; then
|
|
arduino-cli core install multi4in1:STM32F1
|
|
fi
|
|
|
|
chmod +x ${GITHUB_WORKSPACE}/buildroot/bin/*
|
|
echo "${GITHUB_WORKSPACE}/buildroot/bin" >> $GITHUB_PATH
|
|
|
|
mkdir ./build
|
|
mkdir ./binaries
|
|
|
|
- name: Configure MULTI-Module firmware options
|
|
run: |
|
|
# Load the build functions
|
|
source ./buildroot/bin/buildFunctions;
|
|
|
|
# Get the version
|
|
getMultiVersion
|
|
echo "MULTI_VERSION=$(echo $MULTI_VERSION)" >> $GITHUB_ENV
|
|
|
|
# Get all the protocols for this board
|
|
getAllProtocols
|
|
echo "A7105_PROTOCOLS=$(echo $A7105_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "CC2500_PROTOCOLS=$(echo $CC2500_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "CYRF6936_PROTOCOLS=$(echo $CYRF6936_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "NRF24L01_PROTOCOLS=$(echo $NRF24L01_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "SX1276_PROTOCOLS=$(echo $SX1276_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "CCNRF_INO_PROTOCOLS=$(echo $CCNRF_INO_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "ALL_PROTOCOLS=$(echo $ALL_PROTOCOLS)" >> $GITHUB_ENV
|
|
|
|
# Get all the RF modules for this board
|
|
getAllRFModules
|
|
echo "ALL_RFMODULES=$(echo $ALL_RFMODULES)" >> $GITHUB_ENV
|
|
|
|
# Disable CHECK_FOR_BOOTLOADER when not needed
|
|
if [[ "$BOARD" =~ ":avr:multiatmega328p:bootloader=none" ]]; then
|
|
opt_disable CHECK_FOR_BOOTLOADER;
|
|
fi
|
|
|
|
# Trim the build down for the Atmega328p board
|
|
if [[ "$BOARD" =~ ":avr:multiatmega328p:" ]]; then
|
|
opt_disable $ALL_PROTOCOLS
|
|
opt_enable FRSKYX_CC2500_INO AFHDS2A_A7105_INO MJXQ_NRF24L01_INO DSM_CYRF6936_INO;
|
|
fi
|
|
|
|
# Trim the enabled protocols down for the STM32F103CB board with debugging or the STM32F103C8 board in general
|
|
if [[ "$BOARD" =~ ":STM32F1:multistm32f103cb:debug_option=ftdi" ]] || [[ "$BOARD" =~ ":STM32F1:multistm32f103cb:debug_option=native" ]] || [[ "$BOARD" =~ ":STM32F1:multistm32f103c8" ]]; then
|
|
opt_disable $ALL_PROTOCOLS;
|
|
opt_enable FRSKYX_CC2500_INO AFHDS2A_A7105_INO MJXQ_NRF24L01_INO DSM_CYRF6936_INO;
|
|
fi
|
|
|
|
- name: Save default firmware configuration
|
|
run: |
|
|
cat Multiprotocol/_Config.h
|
|
cp Multiprotocol/_Config.h ./_Config.h.bak
|
|
|
|
- name: Build default configuration
|
|
run: |
|
|
# Skip the default build for boards where it's too large now
|
|
if [[ "$BOARD" =~ ":STM32F1:multistm32f103cb:debug_option=none" ]] || [[ "$BOARD" =~ ":STM32F1:multi5in1t18int" ]]; then
|
|
printf "Not testing default build for $BOARD.";
|
|
else
|
|
source ./buildroot/bin/buildFunctions;
|
|
buildMulti
|
|
fi
|
|
|
|
- name: Build serial only
|
|
run: |
|
|
# Skip the serial-only build for boards where it's too large now
|
|
if [[ "$BOARD" =~ ":STM32F1:multistm32f103cb:debug_option=none" ]] || [[ "$BOARD" =~ ":STM32F1:multi5in1t18int" ]]; then
|
|
printf "Not testing serial-only build for $BOARD.";
|
|
else
|
|
source ./buildroot/bin/buildFunctions;
|
|
cp ./_Config.h.bak Multiprotocol/_Config.h
|
|
opt_disable ENABLE_PPM;
|
|
buildMulti;
|
|
fi
|
|
|
|
- name: Build PPM only
|
|
run: |
|
|
# Skip the PPM-only build for boards where it's too large now
|
|
if [[ "$BOARD" =~ ":STM32F1:multistm32f103cb:debug_option=none" ]] || [[ "$BOARD" =~ ":STM32F1:multi5in1t18int" ]]; then
|
|
printf "Not testing PPM-only build for $BOARD.";
|
|
else
|
|
source ./buildroot/bin/buildFunctions;
|
|
cp ./_Config.h.bak Multiprotocol/_Config.h
|
|
opt_disable ENABLE_SERIAL;
|
|
buildMulti;
|
|
fi
|
|
|
|
- name: Build each RF module individually
|
|
run: |
|
|
# Skip the per-RF module builds for boards which have fixed modules
|
|
if [[ "$BOARD" =~ ":STM32F1:multi5in1t18int" ]]; then
|
|
printf "Not testing individual RF module builds for $BOARD.";
|
|
else
|
|
source ./buildroot/bin/buildFunctions;
|
|
cp ./_Config.h.bak Multiprotocol/_Config.h;
|
|
buildEachRFModule;
|
|
fi
|
|
|
|
- name: Build each protocol individually
|
|
run: |
|
|
source ./buildroot/bin/buildFunctions;
|
|
cp ./_Config.h.bak Multiprotocol/_Config.h;
|
|
buildEachProtocol;
|
|
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
|
|
# Configure the board matrix
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- board: "multi4in1:avr:multiatmega328p:bootloader=none"
|
|
name: "ATmega328p"
|
|
release: "atmega328p"
|
|
- board: "multi4in1:avr:multiatmega328p:bootloader=optiboot"
|
|
name: "ATmega328p (Optiboot)"
|
|
release: "atmega328p-optiboot"
|
|
- board: "multi4in1:avr:multixmega32d4"
|
|
name: "OrangeRX"
|
|
release: "orangerx"
|
|
- board: "multi4in1:STM32F1:multistm32f103c8:debug_option=none"
|
|
name: "STM32F103 CC2500 (64KB)"
|
|
release: "stm32f103-cc2500-64k"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=none"
|
|
name: "STM32F103 CC2500 (128KB)"
|
|
release: "stm32f103-cc2500-128k"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=none"
|
|
name: "STM32F103 (128KB)"
|
|
release: "stm32f103-128k-4in1"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=native"
|
|
name: "STM32F103 (128KB, USB Debug)"
|
|
release: "stm32f103-128k-usb-debug"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=ftdi"
|
|
name: "STM32F103 (128KB, Serial Debug)"
|
|
release: "stm32f103-128k-serial-debug"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=none"
|
|
name: "STM32F103 5-in-1 (128KB)"
|
|
release: "stm32f103-128k-5in1"
|
|
- board: "multi4in1:STM32F1:multistm32f103cb:debug_option=none"
|
|
name: "T-Lite 5-in-1 (128KB)"
|
|
release: "tlite-5in1"
|
|
- board: "multi4in1:STM32F1:multi5in1t18int"
|
|
name: "T18 5-in-1 (128KB)"
|
|
release: "t18-5in1"
|
|
- board: "none"
|
|
name: "Scripts"
|
|
release: "scripts"
|
|
|
|
# Set the build name using the friendly board name
|
|
name: "[Build] ${{ matrix.name }}"
|
|
|
|
# Set the environment variables
|
|
env:
|
|
BOARD: ${{ matrix.board }}
|
|
RELEASE: ${{ matrix.release }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Arduino CLI
|
|
uses: arduino/setup-arduino-cli@v2
|
|
with:
|
|
version: "0.32.2"
|
|
|
|
- name: Prepare build environment
|
|
run: |
|
|
echo "Github Ref: $GITHUB_REF"
|
|
echo "Event name: ${{ github.event_name }}"
|
|
echo "Event action: ${{ github.event.action }}"
|
|
echo "Tag name: ${{ github.event.release.tag_name }}"
|
|
|
|
arduino-cli config init --additional-urls https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module-Boards/master/package_multi_4in1_board_index.json,https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module-Boards/devel/source/package_multi_4in1_board_devel_index.json
|
|
arduino-cli core update-index
|
|
|
|
if [[ "$BOARD" =~ ":avr:" ]]; then
|
|
arduino-cli core install arduino:avr;
|
|
fi
|
|
|
|
if [[ "$BOARD" =~ "multi4in1-devel:avr" ]]; then
|
|
arduino-cli core install multi4in1-devel:avr
|
|
elif [[ "$BOARD" =~ "multi4in1:avr" ]]; then
|
|
arduino-cli core install multi4in1:avr
|
|
fi
|
|
|
|
if [[ "$BOARD" =~ "multi4in1-devel:STM32F1:" ]]; then
|
|
arduino-cli core install multi4in1-devel:STM32F1
|
|
elif [[ "$BOARD" =~ "multi4in1:STM32F1:" ]]; then
|
|
arduino-cli core install multi4in1:STM32F1
|
|
fi
|
|
|
|
chmod +x ${GITHUB_WORKSPACE}/buildroot/bin/*
|
|
echo "${GITHUB_WORKSPACE}/buildroot/bin" >> $GITHUB_PATH
|
|
|
|
mkdir ./build
|
|
mkdir ./binaries
|
|
|
|
- name: Configure MULTI-Module firmware options
|
|
run: |
|
|
# Load the build functions
|
|
source ./buildroot/bin/buildFunctions;
|
|
|
|
# Get the version
|
|
getMultiVersion
|
|
echo "MULTI_VERSION=$(echo $MULTI_VERSION)" >> $GITHUB_ENV
|
|
|
|
# Get all the protocols for this board
|
|
getAllProtocols
|
|
echo "A7105_PROTOCOLS=$(echo $A7105_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "CC2500_PROTOCOLS=$(echo $CC2500_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "CYRF6936_PROTOCOLS=$(echo $CYRF6936_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "NRF24L01_PROTOCOLS=$(echo $NRF24L01_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "SX1276_PROTOCOLS=$(echo $SX1276_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "CCNRF_INO_PROTOCOLS=$(echo $CCNRF_INO_PROTOCOLS)" >> $GITHUB_ENV
|
|
echo "ALL_PROTOCOLS=$(echo $ALL_PROTOCOLS)" >> $GITHUB_ENV
|
|
|
|
# Disable CHECK_FOR_BOOTLOADER when not needed
|
|
if [[ "$BOARD" =~ ":avr:multiatmega328p:bootloader=none" ]]; then
|
|
opt_disable CHECK_FOR_BOOTLOADER;
|
|
fi
|
|
|
|
- name: Save default firmware configuration
|
|
run: |
|
|
cat Multiprotocol/_Config.h
|
|
cp Multiprotocol/_Config.h ./_Config.h.bak
|
|
|
|
- name: Build release files
|
|
run: |
|
|
source ./buildroot/bin/buildFunctions;
|
|
cp ./_Config.h.bak Multiprotocol/_Config.h;
|
|
buildReleaseFiles;
|
|
ls -al ./binaries;
|
|
|
|
NUM_FILES=$(ls -l ./binaries | grep ^- | wc -l);
|
|
if [ $NUM_FILES -gt 0 ]; then
|
|
echo "HAVE_FILES=true" >> $GITHUB_ENV
|
|
else
|
|
echo "HAVE_FILES=false" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: 'Upload Artifacts'
|
|
if: env.HAVE_FILES == 'true'
|
|
uses: actions/upload-artifact/@v4
|
|
with:
|
|
name: multi-${{ matrix.release }}
|
|
path: ./binaries/
|
|
|
|
deploy:
|
|
name: "[Deploy] Attach Build Artifacts"
|
|
runs-on: ubuntu-latest
|
|
needs: [test, build]
|
|
steps:
|
|
- name: Combine and upload build artifacts
|
|
uses: actions/upload-artifact/merge@v4
|
|
with:
|
|
name: multi-test-build
|
|
pattern: multi-*
|
|
delete-merged: true
|
|
retention-days: 90
|
|
|
|
release:
|
|
name: "[Release] Publish Files to Release"
|
|
if: github.event_name == 'release' && github.event.action == 'created'
|
|
runs-on: ubuntu-latest
|
|
needs: deploy
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: multi-test-build
|
|
path: ./artifacts/
|
|
|
|
- name: Display downloaded artifacts
|
|
run: ls -R ./artifacts/
|
|
|
|
- name: Deploy artifacts to release
|
|
uses: AButler/upload-release-assets@v3.0
|
|
with:
|
|
files: './artifacts/*'
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|