Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
1f1cb4e
Fix macOS CI pipeline for Qt 6.9.1 and Sequoia compatibility
fernandotonon Jun 28, 2025
7cbe5ed
Bump version to 2.0.1
fernandotonon Jun 28, 2025
ea452b4
Fix macOS CI architecture and Qt path detection
fernandotonon Jun 28, 2025
6581c23
Fix macOS code signing process for Sequoia compatibility
fernandotonon Jun 28, 2025
86821c7
Fix macOS app bundle structure and framework paths
fernandotonon Jun 28, 2025
684b049
Fix Qt framework structure detection for code signing
fernandotonon Jun 28, 2025
405f53e
Fix find command syntax and improve framework signing
fernandotonon Jun 28, 2025
e2f6cd4
Fix macOS framework signing by using specific executable paths instea…
fernandotonon Jun 28, 2025
556f8c1
Implement comprehensive framework signing with proper error handling …
fernandotonon Jun 28, 2025
bf67c56
Fix find command syntax for macOS compatibility - use /111 instead of…
fernandotonon Jun 28, 2025
02cd4c4
Simplify macOS code signing with non-fatal error handling and compreh…
fernandotonon Jun 28, 2025
2cccbce
Merge branch 'master' into fix/macOSSupport
fernandotonon Jun 28, 2025
aae71b8
Bump version to 2.0.2
fernandotonon Jun 28, 2025
1bc8869
Merge branch 'fix/macOSSupport' of https://github.com/fernandotonon/Q…
fernandotonon Jun 28, 2025
872ae80
Force Intel x64 architecture builds and add comprehensive architectur…
fernandotonon Jun 28, 2025
8846a71
Implement comprehensive universal binary builds for QtMeshEditor, Ass…
fernandotonon Jun 28, 2025
5e58377
Merge branch 'fix/macOSBadCPU' into fix/macOSSupport
fernandotonon Jun 28, 2025
b2f7200
fix
fernandotonon Jun 28, 2025
f398a2b
feat: Add dual-runner universal binary build with lipo -create
fernandotonon Jun 28, 2025
bc72e7b
feat: Replace dual-runner approach with matrix strategy for separate …
fernandotonon Jun 28, 2025
00ec864
fix: Update deprecated GitHub Actions to latest versions
fernandotonon Jun 28, 2025
e486624
split ci per platform
fernandotonon Jun 28, 2025
b511a04
build macos for both platforms
fernandotonon Jun 28, 2025
f753271
fix ci
fernandotonon Jun 29, 2025
ee22c4f
fix macos-intel and windows deploys
fernandotonon Jun 29, 2025
54c9d41
fix unit tests and macos ci
fernandotonon Jun 29, 2025
311190a
fix macos ci
fernandotonon Jun 29, 2025
2194bbe
fix macos
fernandotonon Jun 29, 2025
53a0cc8
fix macos ci
fernandotonon Jun 29, 2025
2e86eb9
fix macos ci
fernandotonon Jun 29, 2025
dca951e
fix macos deploy
fernandotonon Jun 29, 2025
10cc962
change macos ci to not run on PR anymore, and added the option to run…
fernandotonon Jun 29, 2025
720b4c7
fix line number in code editor
fernandotonon Jul 1, 2025
aaad1cd
fix highlight
fernandotonon Jul 1, 2025
65bd55c
fix highlight
fernandotonon Jul 1, 2025
8d52fe0
add unit tests for edge cases on highlighting script
fernandotonon Jul 1, 2025
fbf0e82
add comments highlight
fernandotonon Jul 1, 2025
d0451aa
improve material highlight
fernandotonon Jul 1, 2025
5f312ec
Update CMakeLists.txt
fernandotonon Jul 5, 2025
5f06f1a
remove unnecessary file
fernandotonon Aug 7, 2025
0988309
Merge branch 'fix/macOSSupport' of https://github.com/fernandotonon/Q…
fernandotonon Aug 7, 2025
4a7c576
re-run the build
fernandotonon Oct 9, 2025
00fbcf6
fix ci
fernandotonon Oct 9, 2025
9d88c8b
fix macos deploy
fernandotonon Oct 12, 2025
e6479c7
fix building errors
fernandotonon Oct 12, 2025
56421a5
upgrade ogre version and ignore warnings on macos build
fernandotonon Oct 12, 2025
0c14eda
fix freetype link
fernandotonon Oct 12, 2025
60f094e
fix freetype issue
fernandotonon Oct 12, 2025
c6eaf18
fix freetype
fernandotonon Oct 12, 2025
086ff13
fix macos build
fernandotonon Oct 12, 2025
473ae0b
disable failing components
fernandotonon Oct 12, 2025
217bfb4
return old deploy file
fernandotonon Oct 12, 2025
0bcf6aa
try fat build
fernandotonon Oct 12, 2025
46fc7c9
undo deploy changes
fernandotonon Oct 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/deploy.yml
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ env:
QT_VERSION: '6.9.1'
ASSIMP_VERSION: '6.0.2'
ASSIMP_DIR_VERSION: '6.0'
OGRE_VERSION: '14.3.4'
OGRE_VERSION: '14.4.1'

jobs:
# send-slack-notification:
Expand Down Expand Up @@ -1168,4 +1168,4 @@ jobs:
file: QtMeshEditor-${{github.ref_name}}-MacOS.dmg
update_latest_release: true
overwrite: false
verbose: true
verbose: true
6 changes: 5 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
##############################################################
# Versions
##############################################################

cmake_minimum_required(VERSION 3.24.0)
cmake_policy(SET CMP0005 NEW)
cmake_policy(SET CMP0048 NEW) # manages project version

project(QtMeshEditor VERSION 2.0.2 LANGUAGES CXX)
project(QtMeshEditor VERSION 2.0.3 LANGUAGES CXX)
message(STATUS "Building QtMeshEditor version ${PROJECT_VERSION}")

set(QTMESHEDITOR_VERSION_STRING "\"${PROJECT_VERSION}\"")
Expand Down Expand Up @@ -74,7 +75,10 @@ SET (QTLIBLIST
Qt${QT_VERSION_MAJOR}Widgets
Qt${QT_VERSION_MAJOR}QuickWidgets
Qt${QT_VERSION_MAJOR}Quick
Qt${QT_VERSION_MAJOR}Qml
Qt${QT_VERSION_MAJOR}Network
Qt${QT_VERSION_MAJOR}OpenGL
Qt${QT_VERSION_MAJOR}QmlMeta
)
FOREACH(qtlib ${QTLIBLIST})
include_directories(${${qtlib}_INCLUDE_DIRS})
Expand Down
193 changes: 193 additions & 0 deletions DUAL_RUNNER_COMPARISON.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
# Matrix Strategy vs Single Runner: Separate Architecture Binaries

This document compares the current single-runner approach with the new matrix strategy approach for building separate architecture binaries.

## Current Approach: Single Runner with CMAKE_OSX_ARCHITECTURES

### How it works:
```yaml
runs-on: macos-latest # GitHub ARM64 runner
cmake -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" ..
make
```

### Architecture:
```
[GitHub ARM64 Runner] -> [Universal Binary]
|
+-> Build both arm64 + x86_64
+-> Output: Universal binary
```

## New Approach: Matrix Strategy with Separate Binaries

### How it works:
```yaml
strategy:
matrix:
arch: [arm64, x86_64]
include:
- arch: arm64
runs-on: macos-latest # GitHub ARM64 runner
- arch: x86_64
runs-on: [self-hosted, macos-intel] # Your Intel Mac

# Each job builds for its specific architecture
cmake -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} ..
```

### Architecture:
```
[GitHub ARM64 Runner] -> [ARM64 Binary] -> [ARM64 DMG]

[Intel Mac Self-hosted] -> [x86_64 Binary] -> [x86_64 DMG]
```

## Detailed Comparison

| Aspect | Current (Single Runner) | New (Matrix Strategy) |
|--------|------------------------|-------------------|
| **Build Time** | ⚠️ Slower (sequential cross-compile) | ✅ Faster (parallel native builds) |
| **GitHub Actions Cost** | 💰 Higher (all minutes on GitHub) | 💰 Lower (x86_64 on your hardware) |
| **Debugging** | ❌ Hard to isolate arch issues | ✅ Easy per-architecture debugging |
| **Reliability** | ⚠️ Cross-compilation issues | ✅ Native compilation reliability |
| **Setup Complexity** | ✅ Simple (single runner) | ❌ Complex (self-hosted setup) |
| **Resource Usage** | ❌ GitHub runner does everything | ✅ Distributed across machines |
| **Architecture Separation** | ❌ Same config for both | ✅ Different configs possible |
| **Distribution** | ❌ Universal binary (larger) | ✅ Separate binaries (smaller each) |
| **User Choice** | ❌ One size fits all | ✅ Users download their architecture |
| **Testing** | ❌ Can't test individual archs | ✅ Can test each arch separately |
| **Maintenance** | ✅ Zero maintenance | ❌ Runner maintenance required |

## Performance Analysis

### Current Approach Timing:
```
GitHub Runner (ARM64):
├── Configure CMake (universal): ~2 min
├── Build ARM64 + x86_64: ~15 min
├── Package: ~3 min
└── Total: ~20 min
```

### New Approach Timing:
```
Parallel Jobs:
├── GitHub Runner (ARM64):
│ ├── Configure: ~1 min
│ ├── Build ARM64: ~7 min
│ ├── Package ARM64 DMG: ~2 min
│ └── Subtotal: ~10 min
├── Intel Mac (x86_64):
│ ├── Configure: ~1 min
│ ├── Build x86_64: ~7 min
│ ├── Package x86_64 DMG: ~2 min
│ └── Subtotal: ~10 min

Total: ~10 min (fully parallel)
```

**Result: ~50% faster builds** 🚀

## Reliability Comparison

### Current Issues We've Encountered:
- "bad CPU type in executable" errors
- Cross-compilation Qt framework issues
- Architecture-specific dependency problems
- Hard to debug which architecture causes issues

### New Approach Benefits:
- Each architecture builds natively (more reliable)
- Easy to isolate problems to specific architecture
- Independent dependency resolution
- Better error messages and debugging

## Cost Analysis

### GitHub Actions Minutes Usage:

**Current Approach:**
```
20 minutes × macOS multiplier (10x) = 200 GitHub minutes per build
```

**New Approach:**
```
GitHub Runner: 10 minutes × 10x = 100 minutes
Intel Mac: 10 minutes × 0x = 0 minutes (your hardware)
Total: 100 GitHub minutes per build
```

**Savings: 50% reduction in GitHub Actions costs** 💰

## Migration Strategy

### Phase 1: Setup (This Week)
1. Set up Intel Mac as self-hosted runner
2. Test the new workflow on a branch
3. Verify universal binaries work correctly

### Phase 2: Parallel Running (Next Week)
1. Run both workflows in parallel
2. Compare build times and reliability
3. Gather feedback and metrics

### Phase 3: Switch Over (Week 3)
1. Make dual-runner the default for releases
2. Keep single-runner as backup
3. Monitor for any issues

### Phase 4: Optimization (Ongoing)
1. Fine-tune runner performance
2. Add architecture-specific optimizations
3. Implement dependency caching

## Risk Assessment

### Risks of New Approach:
- **Self-hosted runner maintenance**: Need to keep Intel Mac online and updated
- **Network dependency**: Intel Mac needs stable internet
- **Single point of failure**: If Intel Mac is down, no x86_64 builds
- **Security**: Self-hosted runner has repository access

### Mitigation Strategies:
- **Backup runner**: Set up secondary Intel Mac
- **Monitoring**: Add runner health checks
- **Fallback**: Keep single-runner workflow as backup
- **Security**: Use dedicated runner user account

## Recommendation

**Recommended approach: Matrix Strategy with Separate Binaries**

### Why:
1. **Better reliability**: Native builds are more reliable than cross-compilation
2. **Cost savings**: 50% reduction in GitHub Actions minutes
3. **Performance**: 50% faster build times
4. **Debugging**: Much easier to troubleshoot architecture-specific issues
5. **User choice**: Smaller downloads, users pick their architecture
6. **Future-proofing**: Better foundation for additional architectures

### Implementation Plan:
1. Follow `SELF_HOSTED_RUNNER_SETUP.md` to set up your Intel Mac
2. Test using the new workflow `.github/workflows/macos-matrix-build.yml`
3. Compare results with current approach
4. Switch over once confident in the new system

## Monitoring Success

### Key Metrics to Track:
- **Build success rate**: Should improve with native builds
- **Build time**: Target 50% improvement
- **GitHub Actions cost**: Target 50% reduction
- **Issue resolution time**: Should be faster with better debugging

### Success Criteria:
- ✅ Architecture-specific binaries pass all tests
- ✅ Build times under 12 minutes
- ✅ 95%+ build success rate
- ✅ Zero architecture-related issues for 2 weeks

This matrix strategy approach gives you clean, separate architecture binaries with much better performance! 🎯
Loading
Loading