mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Add GitHub workflows.
* Test every pull request without generating artifacts. * Create/Update development releases with artifacts on every push to master. * Create release drafts with artifacts on pushed tags that match "v*.*.*".
This commit is contained in:
parent
bcb50309a6
commit
334238d39f
122
.github/workflows/firmware.yml
vendored
Normal file
122
.github/workflows/firmware.yml
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
name: '🔥 Build Firmware 🔥'
|
||||
|
||||
on:
|
||||
create:
|
||||
branches:
|
||||
- "!**"
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
paths:
|
||||
- 'src/**'
|
||||
- '.github/workflows/*.yml'
|
||||
- '!**/README.md'
|
||||
|
||||
pull_request:
|
||||
branches:
|
||||
- 'master'
|
||||
paths:
|
||||
- 'src/**'
|
||||
- '.github/workflows/*.yml'
|
||||
- '!**/README.md'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
target: [OPENMV2, OPENMV3, OPENMV4, OPENMV4P, PORTENTA, OPENMVPT, NICLAV, NANO33, ARDUINO_NANO_RP2040_CONNECT]
|
||||
steps:
|
||||
- name: 'Checkout Repository ⏳'
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: false
|
||||
|
||||
- name: 'Update Submodules 🧱'
|
||||
run: source tools/ci.sh && ci_update_submodules
|
||||
|
||||
- name: 'Install Toolchain 🛠'
|
||||
run: source tools/ci.sh && ci_install_arm_gcc
|
||||
|
||||
- name: 'Build Firmware 🏗'
|
||||
run: source tools/ci.sh && ci_build_target ${{ matrix.target }}
|
||||
|
||||
- name: 'Upload Artifacts ⬆'
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: firmware
|
||||
path: firmware
|
||||
if-no-files-found: error
|
||||
|
||||
release:
|
||||
needs: build
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.event_name == 'create'
|
||||
steps:
|
||||
- name: 'Checkout Repository ⏳'
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: false
|
||||
|
||||
- name: 'Download Artifacts 🤌'
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: firmware
|
||||
path: firmware
|
||||
|
||||
- name: 'Package Firmware 📦'
|
||||
run: source tools/ci.sh && ci_package_firmware_release ${{github.ref_name}}
|
||||
|
||||
- name: '🔥🔥 Create Release 🔥🔥'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
draft: true
|
||||
files: firmware_*.zip
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: 'Remove Artifacts 🧹🪣'
|
||||
uses: geekyeggo/delete-artifact@v1
|
||||
with:
|
||||
name: firmware
|
||||
failOnError: false
|
||||
|
||||
development:
|
||||
needs: build
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.event_name == 'push'
|
||||
steps:
|
||||
- name: 'Checkout Repository ⏳'
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: false
|
||||
|
||||
- name: 'Download Artifacts 🤌'
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: firmware
|
||||
path: firmware
|
||||
|
||||
- name: 'Package Firmware 📦'
|
||||
run: source tools/ci.sh && ci_package_firmware_development
|
||||
|
||||
- name: '🔥🔥 Create Release 🔥🔥'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
draft: false
|
||||
name: Development Release
|
||||
tag_name: development
|
||||
body: 'Warning: This a development release and it may contain bugs.'
|
||||
files: firmware/firmware_*.zip
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: 'Remove Artifacts 🧹🪣'
|
||||
uses: geekyeggo/delete-artifact@v1
|
||||
with:
|
||||
name: firmware
|
||||
failOnError: false
|
||||
158
.travis.yml
158
.travis.yml
@ -1,158 +0,0 @@
|
||||
os: linux
|
||||
dist: bionic
|
||||
sudo: required
|
||||
language: c
|
||||
stage: build
|
||||
|
||||
git:
|
||||
depth: 1
|
||||
submodules: false
|
||||
|
||||
notifications:
|
||||
email:
|
||||
on_success: never
|
||||
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- "${HOME}/persist"
|
||||
|
||||
script:
|
||||
# Update submodules.
|
||||
- git submodule update --init --depth=1 --no-single-branch
|
||||
- git -C src/micropython/ submodule update --init --depth=1
|
||||
# Install ARM GCC.
|
||||
- |
|
||||
mkdir ${HOME}/gcc
|
||||
GCC_URL="https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2"
|
||||
wget --no-check-certificate -O - ${GCC_URL} | tar --strip-components=1 -jx -C ${HOME}/gcc
|
||||
export PATH=${HOME}/gcc/bin:${PATH}
|
||||
- arm-none-eabi-gcc --version
|
||||
# Install recent cmake if needed.
|
||||
- |
|
||||
if [[ ${TARGET} == ARDUINO_NANO_RP2040_CONNECT ]]; then
|
||||
mkdir ${HOME}/cmake
|
||||
CMAKE_URL="https://cmake.org/files/v3.20/cmake-3.20.0-linux-x86_64.tar.gz"
|
||||
wget --no-check-certificate -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C ${HOME}/cmake
|
||||
export PATH=${HOME}/cmake/bin:${PATH}
|
||||
fi
|
||||
# Build the firmware.
|
||||
- make -j$(nproc) -C src/micropython/mpy-cross
|
||||
- make -j$(nproc) TARGET=$TARGET -C src
|
||||
- mkdir ~/build/$TARGET
|
||||
- cp -r src/build/bin/* ~/build/$TARGET
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- stage: build
|
||||
env: TARGET=OPENMV2
|
||||
workspaces:
|
||||
create:
|
||||
name: OPENMV2_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=OPENMV3
|
||||
workspaces:
|
||||
create:
|
||||
name: OPENMV3_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=OPENMV4
|
||||
workspaces:
|
||||
create:
|
||||
name: OPENMV4_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=OPENMV4P
|
||||
workspaces:
|
||||
create:
|
||||
name: OPENMV4P_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=PORTENTA
|
||||
workspaces:
|
||||
create:
|
||||
name: PORTENTA_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=OPENMVPT
|
||||
workspaces:
|
||||
create:
|
||||
name: OPENMVPT_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=NICLAV
|
||||
workspaces:
|
||||
create:
|
||||
name: NICLAV_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=NANO33
|
||||
workspaces:
|
||||
create:
|
||||
name: NANO33_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=ARDUINO_NANO_RP2040_CONNECT
|
||||
workspaces:
|
||||
create:
|
||||
name: ARDUINO_NANO_RP2040_CONNECT_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=WINC1500
|
||||
workspaces:
|
||||
create:
|
||||
name: WINC1500_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
script:
|
||||
- cp -rf src/drivers/winc1500/firmware ~/build/$TARGET
|
||||
|
||||
- stage: build
|
||||
env: TARGET=CYW4343
|
||||
workspaces:
|
||||
create:
|
||||
name: CYW4343_WORKSPACE # workspace names are escaped.
|
||||
paths: ~/build/$TARGET
|
||||
script:
|
||||
- cp -rf src/drivers/cyw4343/firmware ~/build/$TARGET
|
||||
|
||||
- stage: deploy
|
||||
git:
|
||||
clone: false
|
||||
workspaces:
|
||||
use:
|
||||
- OPENMV2_WORKSPACE
|
||||
- OPENMV3_WORKSPACE
|
||||
- OPENMV4_WORKSPACE
|
||||
- OPENMV4P_WORKSPACE
|
||||
- PORTENTA_WORKSPACE
|
||||
- OPENMVPT_WORKSPACE
|
||||
- NICLAV_WORKSPACE
|
||||
- NANO33_WORKSPACE
|
||||
- ARDUINO_NANO_RP2040_CONNECT_WORKSPACE
|
||||
- WINC1500_WORKSPACE
|
||||
- CYW4343_WORKSPACE
|
||||
script:
|
||||
- zip -r firmware_${TRAVIS_TAG}.zip OPENMV2 OPENMV3 OPENMV4 OPENMV4P PORTENTA OPENMVPT NICLAV NANO33 ARDUINO_NANO_RP2040_CONNECT WINC1500 CYW4343
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key:
|
||||
secure: lE3IuL9TA5LMCSefXm8BO4Eo9+M8DjIuNG2bmZlL7/ucY1i9OmGp56pnLcRwZ5slQbKX+hzNtTFDqb7eLGn1hpzYEZHl8VEjZLRoXqZC7JmQm7EmRRljpXSEoWCxee6kUOaltNAoycmTy0JtmnFdflJ+lXWQ8Pw/GVu91SXGjDWldNJLcLOcCl8CXEr8pwt5WUsRgQ7NYwj+Fd1vQ7ii7yPEwJNHsUHpWRezKorTgYKuphXOkWSLhbsc9HaGfbNKocgoU3hpDE445MKEa+PnBGMsqWQYXag9QA/vY1olKrB3ICzIV8rhARH9h6jJ0c0fnHtaR6pnp9IC11ZpvUTzsj/Dw7doUNHtUwQtBPmTWjm3FQAWLqJJKmo1zXIXUKyc32NTsnKBAdu9jI2i1/1wopATGQzlds4oqPHFzr7OLfZUFf/b19UC9GqnBuEV2Q4pFZJV5c853UNQ7qio39rD5ykJPNKlK1aeKv1Z4+5Yi/pHmVYKyqx1bPQX7qHYKgGQ7PYNa5InPMDWrDG7v5FRoVNFSffpMpk3hqjbjti6KT7YvL6rCQN8A5dp00m/cVizx3xj/CS1rXJUbGDkoV3PxYPUmUN+2NQsS9NDQfVQxWKwIGjJkOjTZsrFwNGQAzujR0rfuYAyp0mcvWjXGW7hKMZrYCMK7rxEOA4Dka3ndIo=
|
||||
name: ${TRAVIS_TAG}
|
||||
file: firmware_${TRAVIS_TAG}.zip
|
||||
skip_cleanup: true
|
||||
on:
|
||||
tags: true
|
||||
draft: true
|
||||
51
tools/ci.sh
Executable file
51
tools/ci.sh
Executable file
@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
########################################################################################
|
||||
# Install ARM GCC.
|
||||
|
||||
ci_install_arm_gcc_apt() {
|
||||
sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi
|
||||
arm-none-eabi-gcc --version
|
||||
}
|
||||
|
||||
ci_install_arm_gcc() {
|
||||
mkdir ${HOME}/gcc
|
||||
GCC_URL="https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2"
|
||||
wget --no-check-certificate -O - ${GCC_URL} | tar --strip-components=1 -jx -C ${HOME}/gcc
|
||||
export PATH=${HOME}/gcc/bin:${PATH}
|
||||
arm-none-eabi-gcc --version
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
# Update Submodules.
|
||||
|
||||
ci_update_submodules() {
|
||||
git submodule update --init --depth=1 --no-single-branch
|
||||
git -C src/micropython/ submodule update --init --depth=1
|
||||
# (cd src/micropython/ && for remote in `git branch -r | grep -v /HEAD | grep -v master`; do git checkout --track $remote ; done)
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
# Build Targets.
|
||||
|
||||
ci_build_target() {
|
||||
export PATH=${HOME}/gcc/bin:${PATH}
|
||||
make -j$(nproc) -C src/micropython/mpy-cross
|
||||
make -j$(nproc) TARGET=${1} -C src
|
||||
mkdir firmware
|
||||
mv src/build/bin firmware/${1}
|
||||
}
|
||||
|
||||
########################################################################################
|
||||
# Prepare Firmware Packages.
|
||||
|
||||
ci_package_firmware_release() {
|
||||
# Add WiFi firmware blobs
|
||||
cp -rf src/drivers/cyw4343/firmware firmware/CYW4343
|
||||
cp -rf src/drivers/winc1500/firmware firmware/WINC1500
|
||||
(cd firmware && zip -r ../firmware_${1}.zip *)
|
||||
}
|
||||
|
||||
ci_package_firmware_development() {
|
||||
(cd firmware && for i in *; do zip -r -j "firmware_${i%/}.zip" "$i"; done)
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user