Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
89d5d73
Cleanup CMake redundancies and use FILE_SET for headers -- only solut…
cboulay Jul 8, 2025
c3359bc
Add preliminary support for Xcode and building universal dylib
cboulay Jul 13, 2025
c22bcf8
Remove vestigial docker references in CI scripts (docker was only use…
cboulay Jul 14, 2025
5887463
First attempt at signing and notarizing framework in GitHub Actions. …
cboulay Jul 14, 2025
bb039f4
Fix some cmake errors that snuck in during rebase.
cboulay Jul 14, 2025
99ad480
FILE_SET is incompatible with frameworks. Revert back to target_inclu…
cboulay Jul 15, 2025
23fa427
examples - find_package must search in Frameworks subdirectory if APPLE.
cboulay Jul 15, 2025
0e10429
Add codesign step to GHA CI script.
cboulay Jul 15, 2025
d3c0f80
macOS packaging - auto version and change destination
cboulay Jul 15, 2025
3bc4c47
Add iOS target to GHA
cboulay Jul 26, 2025
6632dcb
Move Apple GHA to its own script
cboulay Jul 26, 2025
511b599
Apple GHA - refactor to reuse certification setup across build and de…
cboulay Jul 26, 2025
a637912
Apple GHA - don't run tests for iOS target
cboulay Jul 26, 2025
868db5d
Fixup iOS builds
cboulay Jul 27, 2025
e6768ab
GHA: Fix target directories for framework packager
cboulay Jul 27, 2025
91f6f7f
Comment out apple tests until we fix the release.
cboulay Jul 27, 2025
1d967a8
Wrong syntax for env vars.
cboulay Jul 27, 2025
16aabd0
Try signing and packaging before uploading artifact
cboulay Jul 27, 2025
bcb3be6
GHA Apple - Restore unit tests
cboulay Jul 27, 2025
3b8829a
GHA Apple -- add ios simulator build
cboulay Jul 28, 2025
13b8c82
Mark lsl_test_internal with LIBLSL_EXPORTS so it can link the headers…
cboulay Aug 4, 2025
b3a5656
Small updates to cmake helpers
cboulay Nov 29, 2025
45e348c
Update asio to v1.36.0 (standalone)
zeyus Nov 5, 2025
fd2d7ce
Update pugixml to v1.15
zeyus Nov 5, 2025
5b96977
Update boost (with update script) to version v1.89.0
zeyus Nov 5, 2025
47634d5
ARM runners, arm packages (rpi, jetson compatible)
zeyus Nov 5, 2025
a15ee40
For the case of the 1 second sleep, the test will fail before the sleep.
zeyus Nov 4, 2025
d01452f
Intermittent failure on OSX runners in stream resolution, fix part 2
zeyus Nov 5, 2025
8ba9439
option -> cmake_dependent_option
cboulay Nov 29, 2025
177b84d
Replace usage of deprecated LSLCMake.cmake with one-liners
cboulay Jan 10, 2026
ddd7571
Update LSLCMake.cmake
cboulay Jan 10, 2026
add864d
Update LSLCMake.cmake again
cboulay Jan 10, 2026
99ce3ad
sets the RPATH before any targets are created
cboulay Jan 10, 2026
c913128
Bump version
cboulay Jan 10, 2026
d613e91
apple workflow uses scripts
cboulay Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 3 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ insert_final_newline = true
charset = utf-8
indent_style = tab

[*.yaml]
[*.{yaml,yml}]
indent_style = space
indent_size = 2

insert_final_newline = true
end_of_line = lf
42 changes: 42 additions & 0 deletions .github/actions/install-apple-certs/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: 'Install Apple Certificates'
description: 'Installs Apple signing and notarization certificates and sets up the keychain'
inputs:
MACOS_CERTIFICATE_APP:
required: true
MACOS_CERTIFICATE_INST:
required: true
MACOS_CERTIFICATE_PWD:
required: true
MACOS_CI_KEYCHAIN_PWD:
required: true
runs:
using: "composite"
steps:
- name: Install certificates and provisioning profiles
shell: bash
run: |
# Create temporary keychain
KEYCHAIN_PATH=$RUNNER_TEMP/build.keychain
security create-keychain -p "${{ inputs.MACOS_CI_KEYCHAIN_PWD }}" $KEYCHAIN_PATH
security default-keychain -s $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "${{ inputs.MACOS_CI_KEYCHAIN_PWD }}" $KEYCHAIN_PATH

# Import certificates from secrets ...
CERTIFICATE_PATH_APP=$RUNNER_TEMP/build_certificate_app.p12
CERTIFICATE_PATH_INST=$RUNNER_TEMP/build_certificate_inst.p12
echo -n "${{ inputs.MACOS_CERTIFICATE_APP }}" | base64 --decode -o $CERTIFICATE_PATH_APP
echo -n "${{ inputs.MACOS_CERTIFICATE_INST }}" | base64 --decode -o $CERTIFICATE_PATH_INST
# ... to keychain
security import $CERTIFICATE_PATH_APP -P "${{ inputs.MACOS_CERTIFICATE_PWD }}" -k $KEYCHAIN_PATH -A -t cert -f pkcs12
security import $CERTIFICATE_PATH_INST -P "${{ inputs.MACOS_CERTIFICATE_PWD }}" -k $KEYCHAIN_PATH -A -t cert -f pkcs12

# Set trusted partitions (groups of applications) that can access the keychain items
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "${{ inputs.MACOS_CI_KEYCHAIN_PWD }}" $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH

# Get certificate identities into environment variables
CERT_IDENTITY_APP=$(security find-identity -v -p codesigning $KEYCHAIN_PATH | grep "Developer ID Application" | head -1 | awk -F'"' '{print $2}')
echo "APPLE_CODE_SIGN_IDENTITY_APP=$CERT_IDENTITY_APP" >> $GITHUB_ENV
CERT_IDENTITY_INST=$(security find-identity -v -p basic $KEYCHAIN_PATH | grep "Developer ID Installer" | head -1 | awk -F'"' '{print $2}')
echo "APPLE_CODE_SIGN_IDENTITY_INST=$CERT_IDENTITY_INST" >> $GITHUB_ENV
7 changes: 5 additions & 2 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ name: Android
on:
push:
branches: ['androidci']
paths_ignore: ['docs/**', '.travis.yml']
paths:
- '**'
- '!docs/**'
- '!.github/**'
- '.github/workflows/android.yml'
workflow_dispatch:
inputs:
cmakeextra:
Expand Down Expand Up @@ -53,4 +57,3 @@ jobs:
with:
name: build-android-${{ matrix.config.arch }}
path: install

212 changes: 212 additions & 0 deletions .github/workflows/apple.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
name: Apple CI

on:
push:
branches:
- main
- dev
tags: ['*']
paths:
- '**'
- '!docs/**'
- '!.github/**'
- '.github/workflows/apple.yml'
pull_request:
release:
types: ['created']
workflow_dispatch:
inputs:
cmakeextra:
description: 'Extra CMake options'
required: false
default: ''

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

defaults:
run:
shell: bash

jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- {name: "macOS-latest", os: "macOS-latest", platform: "macos", cmake_extra: "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DLSL_UNITTESTS=ON -DLSL_BENCHMARKS=ON -DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\"" }
- {name: "iOS", os: "macOS-latest", platform: "ios", cmake_extra: "-DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake -DPLATFORM=OS64" }
- {name: "iOS Simulator", os: "macOS-latest", platform: "ios-simulator", cmake_extra: "-DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake -DPLATFORM=SIMULATOR64COMBINED -G Xcode" }

steps:
- uses: actions/checkout@v4

- name: Install certificates and provisioning profiles
uses: ./.github/actions/install-apple-certs
with:
MACOS_CERTIFICATE_APP: ${{ secrets.PROD_MACOS_CERTIFICATE }}
MACOS_CERTIFICATE_INST: ${{ secrets.PROD_MACOS_CERTIFICATE_INST }}
MACOS_CERTIFICATE_PWD: ${{ secrets.PROD_MACOS_CERTIFICATE_PWD }}
MACOS_CI_KEYCHAIN_PWD: ${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }}

- name: Configure CMake
env:
APPLE_DEVELOPMENT_TEAM: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
run: |
cmake --version
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${PWD}/install \
-DCPACK_PACKAGE_DIRECTORY=${PWD}/package \
-DLSL_FRAMEWORK=ON \
-Dlslgitrevision=${{ github.sha }} \
-Dlslgitbranch=${{ github.ref }} \
${{ matrix.config.cmake_extra }} \
${{ github.event.inputs.cmakeextra }}
echo ${PWD}

- name: make
run: cmake --build build --config Release -j

- name: make install
run: cmake --build build --config Release --target install

- name: test install using examples
if: matrix.config.name == 'macOS-latest'
run: |
# Test that the in-tree install was successful by building the examples
cmake -S examples -B examples/build \
-DLSL_INSTALL_ROOT=${PWD}/install \
-DCMAKE_INSTALL_PREFIX=examples/build/install \
-DLSL_COMFY_DEFAULTS=ON \
${{ matrix.config.cmake_extra }} \
${{ github.event.inputs.cmakeextra }}
cmake --build examples/build --target install --config Release -j
./examples/build/install/bin/HandleMetaData

- name: Codesign Framework
run: |
./scripts/apple_codesign.sh install/Frameworks/lsl.framework \
--platform ${{ matrix.config.platform }}

# run internal tests
- name: unit tests
if: matrix.config.name == 'macOS-latest'
run: |
mkdir -p dumps
install/bin/lsl_test_internal --order rand --wait-for-keypress never --durations yes
install/bin/lsl_test_exported --order rand --wait-for-keypress never --durations yes
timeout-minutes: 10

- name: Package and Notarize macOS Installer
if: matrix.config.name == 'macOS-latest'
env:
APPLE_DEVELOPMENT_TEAM: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
APPLE_NOTARIZE_USERNAME: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
APPLE_NOTARIZE_PASSWORD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
run: |
./scripts/apple_package_notarize.sh install/Frameworks/lsl.framework \
--notarize \
--output package

- name: upload dump
if: failure()
uses: actions/upload-artifact@v4
with:
name: dumps-${{ matrix.config.name }}
path: dumps

- name: Zip LSL Framework
run: |
cd install/Frameworks
zip -ry lsl.framework.zip lsl.framework
cd ../..

- name: Upload macOS Package and Framework
if: matrix.config.name == 'macOS-latest'
uses: actions/upload-artifact@v4
with:
name: build-macOS-latest
path: |
package/*.pkg
install/Frameworks/lsl.framework.zip

- name: Upload iOS Framework
if: matrix.config.name == 'iOS'
uses: actions/upload-artifact@v4
with:
name: build-iOS
path: install/Frameworks/lsl.framework.zip

- name: Upload iOS Simulator Framework
if: matrix.config.name == 'iOS Simulator'
uses: actions/upload-artifact@v4
with:
name: build-iOS-Simulator
path: install/Frameworks/lsl.framework.zip

xcframework_and_deploy:
name: XCFramework and Deploy
needs: build
runs-on: macOS-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: build-macOS-latest
path: build-macOS-latest
- uses: actions/download-artifact@v4
with:
name: build-iOS
path: build-iOS
- uses: actions/download-artifact@v4
with:
name: build-iOS-Simulator
path: build-iOS-Simulator

- name: Unzip Frameworks
run: |
unzip build-macOS-latest/install/Frameworks/lsl.framework.zip -d build-macOS-latest/Frameworks
unzip build-iOS/lsl.framework.zip -d build-iOS/Frameworks
unzip build-iOS-Simulator/lsl.framework.zip -d build-iOS-Simulator/Frameworks

- name: Install certificates and provisioning profiles
uses: ./.github/actions/install-apple-certs
with:
MACOS_CERTIFICATE_APP: ${{ secrets.PROD_MACOS_CERTIFICATE }}
MACOS_CERTIFICATE_INST: ${{ secrets.PROD_MACOS_CERTIFICATE_INST }}
MACOS_CERTIFICATE_PWD: ${{ secrets.PROD_MACOS_CERTIFICATE_PWD }}
MACOS_CI_KEYCHAIN_PWD: ${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }}

- name: Create and Sign XCFramework
run: |
./scripts/apple_create_xcframework.sh \
--macos build-macOS-latest/Frameworks/lsl.framework \
--ios build-iOS/Frameworks/lsl.framework \
--ios-simulator build-iOS-Simulator/Frameworks/lsl.framework \
--output .

- name: upload artifacts
uses: actions/upload-artifact@v4
with:
name: mac-packages
path: |
lsl.xcframework.*.zip
build-macOS-latest/package/

- name: upload to release page
if: github.event_name == 'release'
env:
TOKEN: "token ${{ secrets.GITHUB_TOKEN }}"
TAG: ${{ github.event.release.tag_name }}
UPLOAD_URL: ${{ github.event.release.upload_url }}
run: |
UPLOAD_URL=${UPLOAD_URL%\{*} # remove "{name,label}" suffix
for pkg in lsl.xcframework.*.zip build-macOS-latest/package/*.*; do
NAME=$(basename $pkg)
MIME=$(file --mime-type $pkg|cut -d ' ' -f2)
curl -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: $TOKEN" -H "Content-Type: $MIME" --data-binary @$pkg $UPLOAD_URL?name=$NAME
done
Loading