Commit Graph

45189 Commits

Author SHA1 Message Date
forbes
36a88d0959 Add Silo auth dock widget, update silo submodule
Wire up the new Silo authentication dock panel in InitGui.py:
- _setup_silo_auth_panel() creates the Database Auth dock widget
- Tabified with the existing Database Activity panel on the right dock
- Deferred to 4500ms to ensure activity panel exists first
- Widget reference pinned on the dock panel to prevent GC

Update silo submodule to include auth widget, login flow, token
management, enhanced settings dialog, and silo-auth.svg icon.
2026-01-31 14:36:51 -06:00
forbes
b3fedfb19f fix(theme): reduce tree item horizontal padding to prevent truncation
QTreeView::item had padding: 4px on all sides, eating 8px of
horizontal space per item. Combined with icon decorations and
indentation this caused excessive middle-elide truncation in the
model tree. Change to padding: 2px 0px (vertical only).
2026-01-31 12:33:01 -06:00
forbes
fea1280fa9 fix(theme): set alternate-background-color on item views
Qt defaults alternate-background-color to white when unset. Add
#181825 (Mantle) as the alternate row color to QTreeView, QListView,
QTableView, and the property editor in both KindredCreate.qss copies.
2026-01-31 12:29:31 -06:00
forbes
8639b6fd8a fix(gui): resolve unknown command and style token errors at startup
Move ZTools command imports before workbench initialization in
InitGui.py so commands are registered before PartDesign/Sketcher
init triggers toolbar state restoration.

Import silo_commands eagerly in _setup_silo_menu() so Silo commands
exist before the WorkbenchManipulator references them.

Create KindredCreate.yaml and Classic.yaml theme parameter files
defining all style tokens (PrimaryColor, TextForegroundColor, etc.)
used by FreeCAD.qss and the overlay stylesheet. Register them in
CMakeLists.txt and set the Theme preference in KindredCreate.cfg.

Add migration in migrateOldTheme() to set Theme=KindredCreate for
existing users who have the stylesheet but not the Theme parameter.
2026-01-31 11:47:28 -06:00
forbes
eb80c07f57 UI fixes, ZTools-PartDesign merge, Silo enhancements, and BOM integration
Stylesheet fixes (KindredCreate theme):
- Add tree branch expand/collapse SVG indicators (branch_closed.svg,
  branch_open.svg) visible on dark background
- Add QSS rules for QTreeView::branch pseudo-states
- Add min-height: 20px to QHeaderView::section to fix bottom clipping
- Merge QDockWidget::title and QSint--ActionGroup QToolButton padding
  improvements from Stylesheets copy into canonical
- Add SpreadsheetGui--SheetTableView QLineEdit cell editor styling
- Sync all three QSS copies (resources/preferences, src/Gui/Stylesheets,
  src/Gui/PreferencePacks) to canonical version

ZTools-PartDesign workbench integration:
- Add _ZToolsPartDesignManipulator via WorkbenchManipulator API
- Injects DatumCreator, DatumManager into Part Design Helper Features toolbar
- Injects EnhancedPocket into Part Design Modeling Features toolbar
- Injects RotatedLinearPattern into Part Design Transformation Features toolbar
- Adds corresponding PartDesign menu entries after PartDesign_Boolean

Silo enhancements:
- Add Silo_ToggleMode command: toggle switch in File toolbar that swaps
  Ctrl+O/S/N between standard FreeCAD and Silo equivalents
- Add SSL certificate file browser in Silo Settings dialog (SslCertPath
  preference, supports .pem/.crt/.cer)
- Update _get_ssl_context() to load custom CA cert before system CAs
- Expand SiloMenuManipulator: Silo_New, Silo_Open, Silo_Save, Silo_Commit,
  Silo_Pull, Silo_Push, Silo_BOM in File menu
- Integrate upstream Silo_BOM command (tabbed BOM/Where-Used dialog)

Submodule updates:
- silo: Silo mode toggle, SSL cert browsing, BOM menu integration
- ztools: PartDesign WorkbenchManipulator and Catppuccin theme sync

Documentation:
- Add docs/REPOSITORY_STATE.md: comprehensive repository state report with
  architecture overview, submodule status, potential issues, feature stubs,
  and Silo integration path forward
2026-01-31 09:27:01 -06:00
forbes
d0365468e2 Update ztools submodule: parametric datum updates via AttachExtension 2026-01-31 08:09:59 -06:00
forbes
174ebf521c Update ztools submodule: fix Qt6, ViewProvider, and attachment property bugs 2026-01-31 04:26:23 -06:00
forbes
ddefb23652 Fix Assembly solver ignoring PartDesign datum plane references
When a PartDesign::Plane (including ZTools datums like ZPlane_Mid,
ZPlane_Offset) is used as a reference in an Assembly joint,
findPlacement() returns an all-zero placement, making the joint
constraint degenerate and ineffective.

Root cause: getElementName() strips the terminal '.Plane' suffix
because it matches the hardcoded set for App::LocalCoordinateSystem
datum elements ({X, Y, Z, Point, Line, Plane}). This is correct
behavior — the issue is that findPlacement()'s 'whole part' branch
only handled App::Line objects and returned App.Placement() (zeros)
for everything else, including PartDesign::Plane datums.

The fix extends the 'whole part' branch in findPlacement() to
compute a proper placement for PartDesign::Plane objects by
extracting the plane's center-of-gravity and surface rotation from
its Shape, then converting to object-local coordinates. This matches
the existing convention used for Face elements elsewhere in the
function.

Also adds handling for PartDesign::Point datums, which hit the same
empty-element code path.

Existing App::Plane origin references (XY_Plane, etc.) are unaffected
since isDerivedFrom('PartDesign::Plane') does not match App::Plane.
2026-01-30 20:46:40 -06:00
forbes
a9c444131a Fix .deb bundle: restore XKB and fontconfig paths in wrapper
The XKB_CONFIG_ROOT, FONTCONFIG_FILE, and FONTCONFIG_PATH exports were
accidentally removed in e68a5fef (SSL certificate fix). Without these,
the bundled libxkbcommon falls back to a hardcoded CI runner path that
does not exist on the target system, causing xkb_context_new to return
NULL and SIGSEGV in xkb_context_ref during Wayland keyboard init at
splash screen startup.
2026-01-30 09:58:14 -06:00
forbes
9dc50cef72 Fix SIGSEGV in Assembly solver during document restore
AssemblyObject::onChanged() was calling updateSolveStatus() when the
Group property changed during document restore. This triggered the
solver (solve -> validateNewPlacements) while child objects were still
being deserialized, causing a segfault in validateNewPlacements() due
to accessing uninitialized data.

Add isRestoring() and isPerformingTransaction() guards matching the
pattern used by GroupExtension::onChanged() and other FreeCAD modules.
2026-01-29 23:54:10 -06:00
forbes
1b1f74ed90 Update silo and ztools submodules
silo: Fix SIGSEGV when opening assembly documents via Silo Open dialog
  - Defer FreeCAD.openDocument() to after dialog.exec_() returns

ztools: Fix workbench init and spreadsheet syntax errors
  - Use Gui.activateWorkbench() instead of direct Initialize() calls
  - Fix syntax errors in spreadsheet_commands.py
2026-01-29 22:42:38 -06:00
forbes
c9da41f10c Fix invisible arrows on spin boxes, combo boxes, and headers
The QSS arrow styles only set width/height without specifying an image
or border-based triangle, so Qt fell back to platform-drawn arrows that
were invisible against the dark button background (#45475a).

Use CSS border triangles to render visible arrows in #cdd6f4 (Catppuccin
Mocha text color) with hover (#f5e0dc) and disabled (#6c7086) states
for spin boxes, combo boxes, and header sort indicators.
2026-01-29 22:31:30 -06:00
forbes
9c14f17bee Fix .deb desktop icon: use Kindred logo instead of FreeCAD icon
The build-deb.sh was copying org.freecad.FreeCAD.svg as the desktop
icon because it checked the install directory first, where only the
FreeCAD icon exists. Reorder to prefer resources/branding/kindred-logo.svg.

Also generate PNG icons from the SVG using rsvg-convert when available,
for better desktop environment compatibility.
2026-01-29 22:30:21 -06:00
forbes
7e0fcdf9dd Update silo submodule: smarter API URL path handling 2026-01-29 22:27:15 -06:00
forbes
73f7caf3a5 Update silo submodule: fix API URL and SSL certificate handling
- Auto-appends /api to base URL so users can enter just the hostname
- Loads system CA bundle for SSL verification of internal certificates
- Improved settings dialog hint text
2026-01-29 22:26:38 -06:00
forbes
6facd8227b Fix SSL: use system CA certificates in wrapper scripts
The bundled Python's openssl has a hardcoded cafile path from the build
environment (/var/lib/gitea-runner/.cache/...) which does not exist on
the target system. This causes SSL certificate verification to fail for
internal services like silo.kindred.internal that use the FreeIPA CA.

Set SSL_CERT_FILE to the system CA bundle (/etc/ssl/certs/ca-certificates.crt
on Debian/Ubuntu or /etc/pki/tls/certs/ca-bundle.crt on RHEL) in both
the kindred-create and kindred-create-cmd wrapper scripts. This allows
the bundled Python to verify certificates signed by any CA in the
system trust store, including the FreeIPA CA.
2026-01-29 22:24:39 -06:00
forbes
dbac82e731 Fix silo loading and add integration enhancements
Fix the exec() calls in Create module's Init.py and InitGui.py to pass
__file__ and __name__ in the globals dict. The silo workbench code uses
__file__ to resolve icon paths, but exec() without explicit globals
does not provide it, causing 'name __file__ is not defined' errors.

Also add three silo integration enhancements to InitGui.py:
- First-startup check: launches Silo_Settings dialog if API URL is not
  configured on first run
- File menu injection: WorkbenchManipulator inserts Silo Open, Save,
  and Commit commands into the File menu across all workbenches
- Database activity panel: dock widget showing recent silo items,
  displayed on the right side of the main window
2026-01-29 20:57:39 -06:00
forbes
092a8a6d8b chore(silo): update submodule to include icon fix and settings dialog 2026-01-29 19:29:06 -06:00
forbes
3b8eb90b25 Fix ThemeSelectorWidget build: add missing includes
Add QApplication (for qApp macro), QEvent (for QEvent::LanguageChange),
and Gui/Application.h (for Gui::Application::Instance) which were
missing after the develop merge.
2026-01-29 16:38:21 -06:00
forbes
9e32776e9b Merge branch 'develop' into main
Includes:
- Fix startup theme selector and migration for single-theme setup
- UI: dock task panel right, remove non-Kindred themes
2026-01-29 16:16:28 -06:00
forbes
da65855dd4 Fix: Remove x86-64-v3 CPU flags for broader compatibility
The -march=x86-64-v3 flag requires AVX2 instructions which are not
available on all target machines (e.g. QEMU VMs with only SSE4.2).
This caused 'Illegal instruction' crashes at runtime.

Remove the explicit -march flags from both build and release workflows
to use the default target architecture, ensuring the .deb package runs
on a wider range of x86-64 machines.
2026-01-29 16:15:32 -06:00
forbes
e85162947b Fix startup theme selector and migration for single-theme setup
- Rework ThemeSelectorWidget to show only KindredCreate theme
  instead of FreeCAD Classic/Light/Dark buttons that no longer exist
- Fix migrateOldTheme() to map old FreeCAD Light/Dark stylesheets
  to KindredCreate instead of throwing an exception
- Remove orphaned FreeCAD Dark.yaml and FreeCAD Light.yaml
  parameter files from Stylesheets build
2026-01-29 14:23:00 -06:00
forbes
bb3f3ac6d6 UI: dock task panel right, remove non-Kindred themes
- Move ComboView default dock position from Left to Right
- Remove FreeCAD Classic, FreeCAD Light, FreeCAD Dark, and Dark behave
  theme packs, keeping only KindredCreate (Catppuccin Mocha)
2026-01-29 14:16:45 -06:00
forbes
de727f7f84 Update silo submodule to latest 2026-01-29 13:11:43 -06:00
forbes
2165610e9a Fix .deb bundle: set XKB and fontconfig paths in wrapper
The bundled libxkbcommon has hardcoded paths from the CI build
environment baked into the library. Set XKB_CONFIG_ROOT to point
to the bundled XKB data instead.

Similarly, set FONTCONFIG_FILE and FONTCONFIG_PATH to use the
bundled fontconfig configuration.

This fixes the segfault on startup caused by libxkbcommon trying
to load XKB data from a non-existent CI runner path.
2026-01-29 11:09:54 -06:00
forbes
56e7e87697 Fix .deb bundle: remove Python package dependencies
The .deb package is a self-contained bundle that includes its own
Python interpreter and all Python packages (numpy, pyside6, etc.)
from the pixi/conda-forge environment in /opt/kindred-create/.

The wrapper scripts already set PYTHONHOME and PYTHONPATH to use
the bundled Python, so depending on system Python packages like
python3-numpy and python3-pyside6.* is incorrect and causes
installation failures on systems without those packages.

Keep only low-level system library dependencies that can't be
bundled (libc, libstdc++, OpenGL, X11, fonts) and external tools
(calculix-ccx, gmsh, graphviz) as Recommends.
2026-01-29 09:40:00 -06:00
forbes
8c6837cc15 Fix UI theme padding and clipping issues
- Increase min-height and padding on QDockWidget::title to prevent header text clipping
- Increase min-height and padding on QSint--ActionGroup QToolButton for task panel headers
- Add specific styling for spreadsheet cell editor with reduced padding for better text visibility
2026-01-29 07:45:25 -06:00
forbes
16b2c83c6e Fix CI test discovery timeout for Assembly tests
- Add continue-on-error and timeout-minutes to test step
- Set CTEST_DISCOVERY_TIMEOUT environment variable
- Exclude Assembly_tests which hang during discovery
- Allow build to proceed even if tests have issues
2026-01-29 07:25:55 -06:00
forbes
e5f7effc5c Fix bundle step: avoid broken pipe from head command 2026-01-29 06:11:15 -06:00
forbes
e02d0db326 Fix .deb bundle: merge built FreeCAD with pixi dependencies
The pixi environment only has dependencies, not FreeCAD itself.
Need to copy both:
1. .pixi/envs/default/* (dependencies: Qt, Python, xerces, etc.)
2. build/release/install/* (FreeCAD binaries and modules)

Also removed the binary filtering that was excluding FreeCAD.
2026-01-28 22:19:36 -06:00
forbes
f424f0e499 Fix .deb build: use fast compression, more aggressive cleanup
- Use dpkg-deb -Zxz -z1 for faster compression (large packages were hanging)
- Remove more unnecessary files: man pages, docs, locales, pkgconfig
- Add progress messages during bundle preparation
- Remove .la, .hpp, .pyo files
2026-01-28 19:58:14 -06:00
forbes
b9d5dbd141 Fix .deb package: bundle full conda environment with all dependencies
- Build workflow now bundles the entire pixi/conda environment for .deb
- This includes all shared libraries (xerces, Qt, Python, etc.)
- Wrapper scripts updated with additional env vars (QT_QPA_PLATFORM_PLUGIN_PATH, XDG_DATA_DIRS, GI_TYPELIB_PATH)
- Wrapper scripts now handle both FreeCAD and freecad binary names
- Removes unnecessary files (headers, cmake, pycache) to reduce size
2026-01-28 18:46:03 -06:00
forbes
c8a103eab7 Fix .deb package: add wrapper scripts for library paths
The bundled binaries need LD_LIBRARY_PATH, PYTHONPATH, and
QT_PLUGIN_PATH set to find their libraries. Replace symlinks
with wrapper scripts that set up the environment before exec.
2026-01-28 18:43:55 -06:00
forbes
d3cc827c67 CI: Switch from Forgejo to GitHub actions mirror
Forgejo mirror at code.forgejo.org was timing out. Using GitHub
directly for checkout and upload-artifact actions.
2026-01-28 17:37:05 -06:00
forbes
7bbb046e8e Fix .deb packaging: version must start with digit
- Fix version conversion for Debian policy compliance
  (e.g., weekly-2025.01.28 -> 0~weekly.2025.01.28)
- Add MIME type registration for .fcstd files
- Add AppStream metainfo for software centers
- Add copyright file (required by Debian policy)
- Improve maintainer scripts with proper case statements
- Expand dependencies in control file (Depends/Recommends/Suggests)
- Add .deb build step to release workflow
- Simplify build workflow to let script handle version conversion
2026-01-28 17:29:09 -06:00
forbes
b256cce74a update to build deb package 2026-01-28 14:49:27 -06:00
forbes
65db9ce93c CI: Remove sudo commands from certificate setup
- Skip system trust store installation (requires sudo)
- Rely on NODE_EXTRA_CA_CERTS for Node.js actions
- Use --cacert for curl verification
2026-01-28 10:01:53 -06:00
forbes
97f6bee3a6 CI: Fix openssl hang by avoiding pipe to head
- Use -subject -dates -noout instead of -text -noout | head -20
- Remove --cacert from curl since cert is now in system store
2026-01-28 09:56:52 -06:00
forbes
0d631b5c91 CI: Add FreeIPA CA certificate trust for artifact uploads
- Download and verify FreeIPA CA cert at job start
- Install cert to system trust store
- Set NODE_EXTRA_CA_CERTS for Node.js actions
- Test SSL connection to Gitea before proceeding
- Restore artifact upload step now that SSL should work
2026-01-28 09:50:45 -06:00
forbes
e92762f8ec CI: Fix ccache directory permissions issue
- Use workspace-relative ccache directory instead of /var/cache
- Remove sudo commands that fail without passwordless sudo
- Ccache persists in parent of workspace directory
2026-01-28 08:49:49 -06:00
forbes
b5cdf8413d CI: Add artifact packaging and upload to build workflow
- Install to custom prefix for clean packaging
- Create versioned tarball with xz compression
- Generate SHA256 checksum
- Upload artifacts with 30-day retention
2026-01-28 07:51:56 -06:00
forbes
af173e24ff CI: Add timeouts to Python tests to prevent hanging 2026-01-27 20:43:41 -06:00
forbes
8a8ee08c68 CI: Use xvfb-run for C++ tests that require display (Qt GUI tests) 2026-01-27 17:14:55 -06:00
forbes
e554244cc8 CI: Use pixi run for ctest command 2026-01-27 16:23:25 -06:00
forbes
c173b764e3 CI: Print test logs directly on failure instead of uploading artifacts 2026-01-27 15:31:36 -06:00
forbes
09a81e9b0e Revert to simple HTTPS cloning for public repos
- Use Forgejo checkout action with HTTPS (no SSH)
- Update submodule URLs from SSH to HTTPS
- All repos are now public, no authentication needed
2026-01-27 14:45:42 -06:00
forbes
5309e5503f Replace checkout action with manual SSH clone
- Bypass SSSD KnownHostsCommand by using custom SSH config
- Set KnownHostsCommand none in SSH config
- Use GIT_SSH_COMMAND with explicit config file
- Manual git clone with --recurse-submodules
2026-01-27 14:38:47 -06:00
forbes
05c1950c0a Use checkout action's ssh-known-hosts parameter
- Fetch host key with ssh-keyscan and pass to checkout action
- Use ssh-known-hosts and ssh-strict parameters to bypass SSSD
- This ensures the checkout action uses our host key, not system KnownHostsCommand
2026-01-27 14:37:23 -06:00
forbes
528ee6c15c Override SSSD KnownHostsCommand in CI SSH config
- Add SSH config to bypass sss_ssh_knownhosts command
- Set StrictHostKeyChecking no for gitea.kindred.internal
- Use local known_hosts file instead of SSSD lookup
2026-01-27 14:36:19 -06:00
forbes
f4d4eecf92 Add SSH known_hosts setup for CI runner
- Run ssh-keyscan before checkout to add gitea.kindred.internal host key
- Fixes 'KnownHostsCommand failed' error during SSH authentication
2026-01-27 14:33:10 -06:00