Skip to content

SerialPrograms MacOS Release #5

SerialPrograms MacOS Release

SerialPrograms MacOS Release #5

name: SerialPrograms MacOS Release
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch for the manual release. This should match the branch of Arduino-Source.'
required: true
version:
description: 'Version for the release (e.g. v0.55.5)'
required: true
package_version:
description: 'Commit SHA of the Packages repo with PABotBases 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'
runner:
description: "MacOS Runner"
required: true
default: "macos-13"
type: choice
options:
- "macos-15"
- "macos-13"
jobs:
build:
runs-on: ${{ github.event.inputs.runner }}
steps:
- name: Checkout Arduino-Source
uses: actions/checkout@v4
with:
repository: 'PokemonAutomation/Arduino-Source'
ref: ${{ github.event.inputs.branch }}
path: Arduino-Source
- name: Checkout Packages
uses: actions/checkout@v4
with:
repository: 'PokemonAutomation/Packages'
path: Packages
ref: ${{ github.event.inputs.packages_ref }}
# 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: Build SerialPrograms.app
run: |
cd Arduino-Source/SerialPrograms
mkdir bin
cd bin
cmake .. -DUNIX_LINK_TESSERACT:BOOL=true -DCMAKE_BUILD_TYPE:STRING=Release
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/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.dmg
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: SerialPrograms-Installer.dmg
path: SerialPrograms-Installer.dmg
- name: GitHub Release
uses: softprops/action-gh-release@v2
with:
body: "${{ github.event.inputs.version }} MacOS Release"
files: |
SerialPrograms-Installer.dmg
Packages/PABotBase/PABotBase-Switch/*
tag_name: ${{ github.event.inputs.version }}
token: ${{ secrets.GITHUB_TOKEN }}