Skip to content

SerialPrograms MacOS Release #19

SerialPrograms MacOS Release

SerialPrograms MacOS Release #19

name: SerialPrograms MacOS Release
on:
workflow_dispatch:
inputs:
repo:
description: 'Source code repo'
required: false
default: 'PokemonAutomation/Arduino-Source'
branch:
description: 'Branch for the manual release. This should match the branch of Arduino-Source.'
required: true
version:
description: 'Version tag for the release (e.g. v0.55.5)'
required: true
package_version:
description: 'Commit SHA of the Packages repo with firmware compatible with the given release version'
required: false
default: 'master'
jobs:
description: 'Number of parallel jobs to build with'
default: 4
type: number
qt_version:
description: 'Qt version to use'
required: true
default: '6.9.0'
type: choice
options:
- '6.9.0'
- '6.8.2'
- '6.5.3'
jobs:
build:
name: Build SerialPrograms ${{ matrix.name }}
runs-on: ${{ matrix.runner }}
strategy:
matrix:
include:
- name: Apple Silicon
runner: macos-15
arch: arm64
- name: Intel
runner: macos-15-intel
arch: x86_64
steps:
- name: Checkout Arduino-Source
uses: actions/checkout@v4
with:
repository: ${{ github.event.inputs.repo }}
ref: ${{ github.event.inputs.branch }}
path: Arduino-Source
- name: Checkout onnxruntime
uses: actions/checkout@v4
with:
submodules: 'recursive'
repository: 'microsoft/onnxruntime'
ref: 'v1.23.2'
path: onnxruntime
- name: Compile onnxruntime with CoreML
run: |
cd onnxruntime
git submodule update --init --recursive
# v1.23.2 does not contain commit 1411308263e4d31da8773ef1859dd9ee1af9948f which fixes a build issue with the Clang on the MacOS Intel runner. Waive false positive warning
./build.sh --config Release --build_shared_lib --parallel --use_coreml --skip_tests --cmake_extra_defines CMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} CMAKE_POLICY_VERSION_MINIMUM=3.5 CMAKE_CXX_FLAGS="-Wno-array-bounds"
cd ..
# MacOS runners have Homebrew, Xcode, and Cmake already installed
- name: Install Dependencies
run: |
brew install tesseract
brew install tesseract-lang
brew install opencv
# brew install onnxruntime
- uses: jurplel/install-qt-action@v4
with:
version: ${{ github.event.inputs.qt_version }}
modules: 'qtmultimedia qtserialport'
- name: Install DPP v10.0.28
run: |
BREW_PREFIX=$(brew --prefix)
brew tap-new --no-git runner/libdpp
FORMULA_DIR="$(brew --repo PA/libdpp)/Formula"
mkdir -p "$FORMULA_DIR"
cp Arduino-Source/3rdPartyBinaries/libdpp@10.0.28.rb "$FORMULA_DIR/"
brew install libdpp@10.0.28
- name: Build SerialPrograms.app
run: |
cd Arduino-Source/SerialPrograms
mkdir bin
cd bin
cmake .. -DUNIX_LINK_TESSERACT:BOOL=true -DCMAKE_BUILD_TYPE:STRING=Release -DPACKAGE_BUILD=true
cmake --build . -j ${{ github.event.inputs.jobs || 4}}
cp -r SerialPrograms.app ../../../SerialPrograms.app
# Important: GitHub MacOS runners do not have the lib area in its rpath by default. It must manually be added for frameworks to be discovered and added to the bundle
# Some libraries are not copied in QT deployment on the runner but will still be proprely linked if they're added prior to deployment
- name: rpath resolution
run: |
BREW_PREFIX=$(brew --prefix)
install_name_tool -add_rpath $BREW_PREFIX/lib SerialPrograms.app/Contents/MacOS/SerialPrograms
otool -l SerialPrograms.app/Contents/MacOS/SerialPrograms | grep -A2 LC_RPATH
mkdir SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/gcc/lib/gcc/current/libgcc_s.1.1.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/protobuf/lib/libutf8_validity.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/webp/lib/libsharpyuv.0.dylib SerialPrograms.app/Contents/Frameworks
# cp $BREW_PREFIX/opt/jpeg-xl/lib/libjxl_cms.0.11.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkCommonComputationalGeometry-*.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkFiltersVerdict-*.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkfmt-*.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkFiltersGeometry-*.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkFiltersCore-*.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkCommonCore-*.dylib SerialPrograms.app/Contents/Frameworks
cp $BREW_PREFIX/opt/vtk/lib/libvtkCommonSystem-*.dylib SerialPrograms.app/Contents/Frameworks
# Use macdeployqt to bundle the app with dependencies
- name: Run macdeployqt
run: macdeployqt SerialPrograms.app -verbose=3
# Dummy codesign
- name: Codesign
run: codesign --force --deep --sign - SerialPrograms.app
# Create a disk image for installation
- name: Create Disk Image
run: |
brew install create-dmg
mkdir dmg
cd dmg
mv ../SerialPrograms.app ./SerialPrograms.app
# Workaround for https://github.com/actions/runner-images/issues/7522
i=0
max_retries=10
until create-dmg --volname "SerialPrograms Installer" \
--window-pos 150 150 \
--window-size 600 400 \
--icon-size 128 \
--icon "SerialPrograms.app" 140 160 \
--hide-extension "SerialPrograms.app" \
--app-drop-link 450 160 \
"SerialPrograms-Installer.dmg" \
"./"
do
if [ $i -eq $max_retries ]; then
echo "Failed to create disk image after $max_retries attempts."
exit 1
fi
echo "Retrying create-dmg... Attempt $((i+1))"
sleep 5
i=$((i+1))
done
mv SerialPrograms-Installer.dmg $GITHUB_WORKSPACE/SerialPrograms-Installer-${{ matrix.arch }}.dmg
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: SerialPrograms-Installer-${{ matrix.arch }}
path: SerialPrograms-Installer-${{ matrix.arch }}.dmg
release:
name: Create GitHub Release
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Checkout Packages
uses: actions/checkout@v4
with:
repository: 'PokemonAutomation/Packages'
path: Packages
ref: ${{ github.event.inputs.package_version }}
- name: Download Artifacts
uses: actions/download-artifact@v5
with:
path: dmgs
- name: GitHub Release
uses: softprops/action-gh-release@v2
with:
body: "${{ github.event.inputs.version }} MacOS Release"
files: |
dmgs/**/*.dmg
Packages/Firmware/*
tag_name: ${{ github.event.inputs.version }}
token: ${{ secrets.GITHUB_TOKEN }}