Skip to content

SerialPrograms MacOS Deployment Health Check #19

SerialPrograms MacOS Deployment Health Check

SerialPrograms MacOS Deployment Health Check #19

name: SerialPrograms MacOS Deployment Health Check
on:
schedule:
- cron: '0 0 * * 5' # Every Friday
workflow_dispatch:
jobs:
build:
runs-on: macos-13
steps:
- name: Checkout Arduino-Source
uses: actions/checkout@v4
with:
repository: 'PokemonAutomation/Arduino-Source'
path: Arduino-Source
- name: Checkout Packages
uses: actions/checkout@v4
with:
repository: 'PokemonAutomation/Packages'
path: Packages
# 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: '6.9.0'
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 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
# Set the current date for naming the disk image
- name: Set current date
id: date
run: echo "date=$(date +%Y-%m-%d)" >> $GITHUB_OUTPUT
# Create a disk image for installation
- name: Create disk image
run: |
brew install create-dmg
DMG_NAME="SerialPrograms-Prerelease-${{ steps.date.outputs.date }}.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 \
"$DMG_NAME" \
"./"
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 "$DMG_NAME" $GITHUB_WORKSPACE/"$DMG_NAME"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: SerialPrograms-Prerelease-${{ steps.date.outputs.date }}.dmg
path: SerialPrograms-Prerelease-${{ steps.date.outputs.date }}.dmg