- Increase OriginSelectorWidget max width from 120 to 160px for longer
origin names
- Set explicit SizePolicy::Preferred for better toolbar layout
- Update silo submodule to fix/silo-workbench-bugs with auth and menu fixes
- Change both build.yml and release.yml to fetch only the latest v* tag
via git ls-remote instead of fetching all tags
- Add patchelf as a Linux build dependency in recipe.yaml to fix
rattler-build packaging failure
- Exclude appimagetool from artifact upload (FreeCAD_*.AppImage glob)
- Build release JSON payload in Python to fix false/False type error
(shell 'false' is not valid Python; use bool with re.search instead)
The build environment (via qt6-main) was pulling ICU 78 headers while
the host/runtime environment had ICU 75 pinned. The compiled binary
contained icu_78 mangled symbols that fail to resolve against ICU 75
shared libs at runtime. Pin icu>=75,<76 in build deps to match.
- Cache key: replace run_id (unique per build) with date-based key
so entries are reused within the same day and rotate daily
- Skip cache save on exact hit (act_runner can't overwrite keys)
- build.sh: set CCACHE_DIR/CCACHE_BASEDIR inside rattler-build's
isolated env so release builds actually use the cached directory
- build.sh: print ccache stats at end for diagnostics
- Add disk space cleanup step to build.yml (matching release.yml)
- Remove cross-build cache fallback in release.yml (different -O flags)
- Add runner cleanup daemon (.gitea/runner/) with systemd timer
to purge stale cache entries, Docker data, and old workspaces
The runner host disk is at 95% capacity. Add cleanup steps:
- Remove pre-installed bloat (dotnet, android, boost) at start
- Clear rattler package cache and pixi build dirs between
AppImage and .deb build steps
The gitea.com/actions/release-action is archived and requires go to
build from source, which isn't available in the ubuntu-latest runner.
Replace with curl calls to the Gitea release API: create release,
upload assets. Handles existing releases by deleting and recreating.
The build environment resolved ICU 78 headers while the host environment
had ICU 75 libraries (constrained by xerces-c, qt6-main, etc.). This
caused libFreeCADBase.so to contain icu_78 mangled symbols that couldn't
be found in the bundled ICU 75 libs at runtime:
undefined symbol: _ZN6icu_7813UnicodeString8fromUTF8ENS_11StringPieceE
Pin ICU explicitly in both recipe.yaml host deps and pixi.toml to ensure
headers and libs always match.
The silo submodule now uses silo-mod layout where the FreeCAD workbench
is at freecad/ (not pkg/freecad/). Also install the silo-client
submodule directory.
appimagetool is an AppImage itself and requires FUSE to self-mount.
CI containers typically don't have FUSE. Extract it with
--appimage-extract and run squashfs-root/AppRun instead.
Copy silo-bom, silo-commit, silo-info, silo-pull, and silo-push SVG
icons from mods/silo/pkg/freecad/resources/icons/ into src/Gui/Icons/
and register them in resource.qrc so they are compiled into the binary
and discoverable by BitmapFactory at runtime.
- OriginSelectorWidget: use BitmapFactoryInst::mergePixmap() instead of
BitmapFactory::mergePixmap() since BitmapFactory is a function, not a class
- OriginManager: use Console().log() instead of Console().Log() which
does not exist on ConsoleSingleton
viewDefaultOrientation is a method on View3DInventorPy (Python wrapper),
not on View3DInventorViewer (C++ viewer). Use doCommand with the Python
API, matching the pattern used in StdCmdViewHome.
SWIG 4.4.x uses runtime API version 5, which is incompatible with
conda-forge pivy 0.6.9 built with SWIG <=4.3.x (runtime version 4).
Pin to >=4.0,<4.4 to ensure matching runtime versions.
SelectModule is declared in FileDialog.h which was already included.
The separate #include "SelectModule.h" referenced a header that
doesn't exist, causing a fatal build error.
- Detect document's origin vs current (target) origin
- Route to appropriate workflow:
- Same origin: standard SaveAs
- Local → PLM: migration (handled by PLM origin)
- PLM → Local: export (handled by local origin)
- PLM → PLM: transfer (handled by target PLM origin)
This provides the infrastructure for Issue #17: Mixed origin workflows.
The actual migration/export dialogs will be implemented in the
respective origin adapters (SiloOrigin, LocalFileOrigin).
- Create OriginManagerDialog with list of configured origins
- Show connection status for remote origins
- Allow setting default origin
- Add/Edit/Remove buttons (Add/Edit show placeholder for now)
- Wire up 'Manage Origins...' button in OriginSelectorWidget
- Prevent removal of built-in local origin
Part of Issue #15: Multi-instance Silo configuration UI
- Create OriginSelectorWidget class (QToolButton with dropdown menu)
- Add OriginSelectorAction to create widget in toolbars
- Add Std_Origin command registered in CommandStd.cpp
- Add widget to File toolbar (before New/Open/Save)
- Connect to OriginManager fastsignals for origin changes
- Add Catppuccin Mocha styling for the widget
- Widget shows current origin name/icon with connection status overlay
This implements Issue #13: Origin selector toolbar widget
- Add openDocumentInteractive() and saveDocumentAsInteractive() to FileOriginPython
- Fix Console API: Warning -> warning, Error -> error in OriginManager.cpp
- These methods bridge Python origins to the new interactive document operations
Issue #10: Local filesystem origin implementation
- Add openDocumentInteractive() method to FileOrigin interface for UI-based
file opening (shows file dialog)
- Add saveDocumentAsInteractive() method for UI-based save as
- Implement LocalFileOrigin::openDocumentInteractive() with full file dialog
support, filter list building, and module handler integration
- Implement LocalFileOrigin::saveDocumentAsInteractive() delegating to
Gui::Document::saveAs()
Issue #12: Modify Std_* commands to delegate to current origin
- StdCmdNew::activated() now delegates to origin->newDocument() and sets
up view orientation for the new document
- StdCmdOpen::activated() delegates to origin->openDocumentInteractive()
with connection state checking for authenticated origins
- StdCmdSave::activated() uses document's owning origin (via findOwningOrigin)
for save, falling back to saveDocumentAsInteractive if no filename
- StdCmdSaveAs::activated() delegates to origin->saveDocumentAsInteractive()
- Updated isActive() methods to check for active document
The Std_* commands now work seamlessly with both LocalFileOrigin and
SiloOrigin. When Local origin is selected, standard file dialogs appear.
When Silo origin is selected, Silo's search/creation dialogs appear.
Import and Export commands are left unchanged as they operate on document
content rather than document lifecycle.
Closes#10, Closes#12
- build.yml: Add --force flag to tag fetch to prevent 'would clobber
existing tag' error when 'latest' tag already exists locally
- build.yml: Use github.run_id instead of github.sha for ccache keys
to ensure unique keys per workflow run while still benefiting from
restore-key prefix matching
- release.yml: Add --force flag to tag fetch commands
- release.yml: Use github.run_id for ccache keys (same reason)
- release.yml: Comment out build-macos and build-windows jobs since
no native runners are available for these platforms
- release.yml: Update publish-release to only depend on build-linux
- release.yml: Update release notes to indicate macOS/Windows builds
are not yet available
The ccache key strategy now works correctly with immutable caches:
- Save with unique key: ccache-{workflow}-{branch}-{run_id}
- Restore with prefix fallback: tries same branch first, then main
The macOS and Windows jobs require platform-specific tooling:
- macOS: dmgbuild, pyobjc-framework-Quartz for DMG creation
- Windows: NSIS, Visual Studio toolchain for installer creation
These cannot be easily cross-compiled from Linux. The jobs are
preserved as comments so they can be re-enabled when native runners
become available or when cross-compilation tooling is set up.
Complete the core toolbar icon set with 15 additional icons:
File Operations:
- document-save-as.svg - Save As with pencil indicator
- Std_SaveAll.svg - Save All with stacked disks
- Std_Import.svg - Import with arrow into document
- Std_Export.svg - Export with arrow out of document
- document-print.svg - Printer with paper
Edit Operations:
- edit-select-all.svg - Selection rectangle with corner handles
View Operations:
- zoom-fit-best.svg - Fit to view with corner arrows
- Std_ViewHome.svg - Home view with house icon
- view-fullscreen.svg - Fullscreen expand arrows
- Std_ViewScreenShot.svg - Camera for screenshots
- Std_ToggleVisibility.svg - Eye icon for visibility
- Std_Refresh.svg - Circular refresh arrow
Common Actions:
- help-browser.svg - Question mark in circle
- application-exit.svg - Door with exit arrow
- Std_DuplicateSelection.svg - Duplicate objects
All icons follow the Catppuccin Mocha design system with:
- 32x32 viewBox
- Rounded rectangle background (surface0 #313244)
- Consistent stroke widths and color usage
Ref #4
Add QApplication, QEvent, and Gui/Application.h includes that were
missing, causing build failures with undeclared identifiers for qApp,
QEvent::LanguageChange, and Gui::Application::Instance.