Skip to content

Create macOS arm installer #351

Create macOS arm installer

Create macOS arm installer #351

Workflow file for this run

name: Build_PAT
on:
pull_request:
branches:
- '*'
push:
branches:
- '*'
tags:
- '*'
jobs:
pat_build:
name: Build ${{ matrix.name }}
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.allow_failure }}
strategy:
# fail-fast: Default is true, switch to false to allow one platform to fail and still run others
fail-fast: false
matrix:
name: [Ubuntu, macOS-Intel, macOS-ARM, Windows_2022]
include:
- name: Ubuntu
os: ubuntu-22.04
node-version: 18
allow_failure: false
- name: macOS-Intel
os: macos-13
node-version: 18
allow_failure: false
arch: x86_64
MACOSX_DEPLOYMENT_TARGET: 10.15
- name: macOS-ARM
os: macos-14
node-version: 18
allow_failure: false
arch: arm64
MACOSX_DEPLOYMENT_TARGET: 12.1
- name: Windows_2022
os: windows-2022
node-version: 18
allow_failure: false
steps:
- uses: actions/checkout@v4
- name: Set up Node ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install System dependencies
shell: bash
run: |
set -x
if [ "$RUNNER_OS" == "Linux" ]; then
sudo apt update
sudo apt install cmake
elif [ "$RUNNER_OS" == "macOS" ]; then
# Create and activate Python virtual environment
python3 -m venv venv
source venv/bin/activate
# Upgrade pip and install aqtinstall
pip install --upgrade pip
pip install aqtinstall
# Verify installation
pip show aqtinstall
# Install Qt Installer Framework
python -m aqt install-tool -O "${{ github.workspace }}/Qt/" mac desktop tools_ifw
# Find the actual installed version directory and add to PATH
QT_IFW_DIR=$(find "${{ github.workspace }}/Qt/Tools/QtInstallerFramework" -maxdepth 1 -type d -name "*" | head -1)
if [ -d "$QT_IFW_DIR" ]; then
echo "Qt Installer Framework installed successfully at: $QT_IFW_DIR"
echo "$QT_IFW_DIR/bin" >> $GITHUB_PATH
else
echo "Qt Installer Framework installation failed"
exit 1
fi
echo MACOSX_DEPLOYMENT_TARGET=${{ matrix.MACOSX_DEPLOYMENT_TARGET }} >> $GITHUB_ENV
elif [ "$RUNNER_OS" == "Windows" ]; then
# Create and activate Python virtual environment
python3 -m venv venv
source venv/Scripts/activate
# Install aqtinstall (skip pip upgrade on Windows to avoid permission issues)
pip install aqtinstall
# Verify installation
pip show aqtinstall
# Install Qt Installer Framework
python -m aqt install-tool -O "${{ github.workspace }}/Qt/" windows desktop tools_ifw
# Find the actual installed version directory and add to PATH
QT_IFW_DIR=$(find "${{ github.workspace }}/Qt/Tools/QtInstallerFramework" -maxdepth 1 -type d -name "*" | head -1)
if [ -d "$QT_IFW_DIR" ]; then
echo "Qt Installer Framework installed successfully at: $QT_IFW_DIR"
echo "$QT_IFW_DIR/bin" >> $GITHUB_PATH
else
echo "Qt Installer Framework installation failed"
exit 1
fi
#echo "Setting CMAKE_GENERATOR options equivalent to ='-G \"Visual Studio 16 2019\" -A x64'"
#echo CMAKE_GENERATOR='Visual Studio 16 2019' >> $GITHUB_ENV
#echo CMAKE_GENERATOR_PLATFORM=x64 >> $GITHUB_ENV
# C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise
# Command below no longer working and returning the version number.
# MSVC_DIR=$(cmd.exe /c "vswhere -products * -requires Microsoft.Component.MSBuild -property installationPath -latest")
MSVC_DIR="C:\Program Files\Microsoft Visual Studio\2022\Enterprise"
echo "Latest is: $MSVC_DIR"
echo "MSVC_DIR=$MSVC_DIR" >> $GITHUB_ENV
# add folder containing vcvarsall.bat
echo "$MSVC_DIR\VC\Auxiliary\Build" >> $GITHUB_PATH
fi;
N=$(nproc 2>/dev/null || sysctl -n hw.logicalcpu)
echo "There are $N threads available"
echo "N=$N" >> $GITHUB_ENV
- name: Create Build Directory
run: cmake -E make_directory ./build/
- name: Clean up potentially corrupted dependency files
shell: bash
run: |
# Create depend directory if it doesn't exist
mkdir -p depend/
# Remove any existing OpenStudio-server files that might be corrupted
echo "Cleaning up OpenStudio-server files..."
find depend/ -name "OpenStudio-server-*" -type f -delete 2>/dev/null || true
# Also clean up any partial downloads or temp files
find depend/ -name "*.tmp" -type f -delete 2>/dev/null || true
find depend/ -name "*.part" -type f -delete 2>/dev/null || true
# Clean up any corrupted gzip files by testing them
for file in depend/*.tar.gz; do
if [ -f "$file" ]; then
echo "Testing $file..."
if ! gzip -t "$file" 2>/dev/null; then
echo "Removing corrupted file: $file"
rm -f "$file"
fi
fi
done
echo "Cleanup completed. Current depend/ contents:"
ls -la depend/ || echo "depend/ directory is empty"
- name: Pre-download and verify OpenStudio-server (macOS ARM only)
if: runner.os == 'macOS' && matrix.arch == 'arm64'
shell: bash
run: |
# Pre-download the OpenStudio-server file for macOS ARM to verify integrity
SERVER_URL="https://openstudio-resources.s3.amazonaws.com/pat-dependencies3/OpenStudio-server-5873e0d21d-darwin-arm64.tar.gz"
SERVER_FILE="depend/OpenStudio-server-5873e0d21d-darwin-arm64.tar.gz"
echo "Pre-downloading OpenStudio-server for verification..."
curl -L -o "$SERVER_FILE" "$SERVER_URL"
echo "Verifying download integrity..."
if gzip -t "$SERVER_FILE"; then
echo "Download verified successfully"
else
echo "Download is corrupted, removing and retrying..."
rm -f "$SERVER_FILE"
sleep 5
curl -L -o "$SERVER_FILE" "$SERVER_URL"
if gzip -t "$SERVER_FILE"; then
echo "Retry download verified successfully"
else
echo "Retry download also corrupted, failing build"
exit 1
fi
fi
- name: Configure CMake & build (Windows)
working-directory: ./build
if: runner.os == 'Windows'
shell: cmd
run: |
echo "Using vcvarsall to initialize the development environment"
call vcvarsall.bat x64
cmake -G "Visual Studio 17 2022" -A x64 ..
cmake --build . --target package -j %N% --config Release
- name: Configure CMake & build (Linux)
working-directory: ./build
if: runner.os == 'Linux'
shell: bash
run: |
set -x
cmake -DCMAKE_BUILD_TYPE=Release \
-DCPACK_BINARY_DEB=ON \
-DCPACK_BINARY_IFW=OFF \
-DCPACK_BINARY_TGZ=OFF \
-DCPACK_BINARY_TZ=OFF \
-DCPACK_BINARY_STGZ=OFF \
-DCPACK_BINARY_TBZ2=OFF \
../
cmake --build . --target package -j $N
- name: Configure CMake & build (macOS)
working-directory: ./build
if: runner.os == 'macOS'
shell: bash
run: |
set -x
if [ "${{ matrix.arch }}" = "arm64" ]; then
CMAKE_OSX_ARCHITECTURES=arm64
cmake -DCMAKE_OSX_ARCHITECTURES="arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.MACOSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_BUILD_TYPE=Release \
../
else
CMAKE_OSX_ARCHITECTURES=x86_64
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.MACOSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_BUILD_TYPE=Release \
../
fi
export CMAKE_OSX_ARCHITECTURES
cmake --build . --target package -j $N
- name: Save artifact
uses: actions/upload-artifact@v4
with:
name: PAT-Installer-${{ matrix.name }}
path: ./build/ParametricAnalysisTool-*
#name: OpenStudio-PAT-{{ matrix.name }}-${{ github.sha }}