Files
Francesco Bonacci 49ee6d45cb feat(lume): restructure release as .app bundle with bridged networking (#1122)
* fix(lume): update test mocks to match current API

- Update MockVM.run() signature to include networkMode and clipboard
  parameters added to the VM base class
- Update VMDetailsPrinterTests to expect the network column in table
  output

* feat(lume): restructure release binary as .app bundle for bridged networking

Restructure the lume release artifact from a standalone CLI binary into a
macOS .app bundle so that a provisioning profile can be loaded by the OS,
enabling the com.apple.vm.networking restricted entitlement for bridged
networking support in release builds.

Closes #1076

* fix(lume): fetch notarization log on failure for debugging

* fix(lume): fix codesign for notarization - add timestamp, fix entitlements flag, show errors

* fix(lume): add codesign verification and use ditto for signature-safe copy

* fix(lume): add keychain to search list and pass --keychain to codesign

* fix(lume): sign resource bundle before binary (inside-out signing order)

* fix(lume): use --deep codesign, move resource bundle to Resources/

The lume_lume.bundle is a flat SPM resource directory (no Info.plist),
not a proper macOS bundle. codesign was failing with "bundle format
unrecognized" which caused silent fallback to adhoc signing.

Fix: use --deep on the .app bundle so codesign handles nested code
automatically and seals flat resource directories properly.

* fix(lume): remove resource bundle from Contents/MacOS to fix codesign

The lume_lume.bundle is a flat SPM resource directory without Info.plist.
When placed in Contents/MacOS/, codesign fails with "bundle format
unrecognized" and silently falls back to adhoc signing.

Move it to Contents/Resources/ only, which codesign seals as data.

* fix(lume): update install-local.sh and build-release.sh to match resource bundle fix

Move lume_lume.bundle to Contents/Resources/ instead of Contents/MacOS/
to avoid codesign "bundle format unrecognized" errors. Also fix
--entitlement -> --entitlements typo in build-release.sh.

* fix(lume): place SPM resource bundle at .app root for Bundle.module resolution

SPM's auto-generated Bundle.module looks up resources via
Bundle.main.bundleURL (the .app root), NOT Bundle.main.resourceURL
(Contents/Resources/). Placing lume_lume.bundle in Contents/Resources/
would cause a fatal crash at runtime when Bundle.module tries to load it.

Move the resource bundle to the .app root level across all three build
scripts (build-release-notarized.sh, build-release.sh, install-local.sh).
This keeps it out of Contents/MacOS/ (which breaks codesign) while
ensuring SPM can find it at runtime.

Also adds *.provisionprofile to .gitignore.

* fix(lume): fix Bundle.module resolution for .app bundle resource loading

SPM's auto-generated Bundle.module looks up resources via
Bundle.main.bundleURL (the .app root), but codesign rejects content
at the .app root ("unsealed contents") and in Contents/MacOS/
("bundle format unrecognized"). The only valid location for codesign
is Contents/Resources/, but Bundle.module doesn't check there.

Solution:
- Add Bundle.lumeResources custom accessor that checks resourceURL
  first (for .app bundles) then bundleURL (for standalone binaries)
- Replace all Bundle.module usages in UnattendedConfig.swift
- Revert build scripts to place lume_lume.bundle in Contents/Resources/

The unused SPM-generated Bundle.module is never accessed, so its
fatalError path is never triggered.
2026-02-26 12:39:30 +01:00

216 lines
4.1 KiB
Plaintext

**/image/setup.iso
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
node_modules/*
*/node_modules
**/node_modules
# Distribution / packaging
.Python
build/
!libs/lume/scripts/build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/*
!libs/lumier/src/lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Git worktrees
.worktrees/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Scripts
server/scripts/
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# Ruff stuff:
.ruff_cache/
# PyPI configuration file
.pypirc
# Conda
.conda/
# Local environment
.env.local
# macOS DS_Store
.DS_Store
weights/
weights/icon_detect/
weights/icon_detect/model.pt
weights/icon_detect/model.pt.zip
weights/icon_detect/model.pt.zip.part*
libs/python/omniparser/weights/icon_detect/model.pt
# Example test data and output
examples/test_data/
examples/output/
/screenshots/
/experiments/
/logs/
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
.swiftpm/
.build/
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Ignore folder
ignore
# .release
.release/
# Provisioning profiles (generated from CI secrets)
*.provisionprofile
# Shared folder
shared
# Trajectories
trajectories/
# Installation ID Storage
.storage/
# Gradio settings
.gradio_settings.json
# Lumier Storage
storage/
# Trashes
.Trashes
.Trash-1000/
post-provision
# Local secrets for act
.secrets
# Link checker scripts (dev tools)
scripts/check-repo-md-links.py
docs/scripts/check-links.py
docs/scripts/check-all-links.py
docs/scripts/check-mdx-links.py