Commit Graph

45183 Commits

Author SHA1 Message Date
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
forbes
c411f11e8b Use SSH deploy key for submodule checkout in CI
- Add ssh-key parameter to checkout action in build.yml and release.yml
- Uses DEPLOY_KEY secret for SSH authentication to internal repos
- Fixes 403 permission errors when cloning mods/silo submodule
2026-01-27 14:28:05 -06:00
forbes
41521ea09a Fix CI workflows for Gitea/Forgejo runner
- Replace GitHub actions with Forgejo equivalents:
  - actions/checkout@v4 -> code.forgejo.org/actions/checkout@v4
  - actions/upload-artifact@v4 -> code.forgejo.org/actions/upload-artifact@v3
- Fixes problem-matcher.json path errors on Gitea runner
- Fixes artifact upload compatibility issues
2026-01-27 14:16:30 -06:00
forbes
0e5998312a Implement Phase 1: Auto-loading for ztools and Silo addons
- Add src/Mod/Create/ module to handle addon loading
- Init.py adds mods/ztools and mods/silo to sys.path at startup
- InitGui.py loads workbenches from addon InitGui.py files
- CMakeLists.txt installs Create module and mods/ directory
- Set ZToolsWorkbench as default startup workbench in preferences
2026-01-27 10:03:12 -06:00
forbes
6c45f0619f Add integration plan for ztools and Silo workbenches
- Define 4-layer architecture (FreeCAD Core, Python API, Create Extensions, Workbenches)
- Plan src/Mod/Create/ module for C++ features (Create::FlipPocket, DatumHelpers)
- Document 6 implementation phases with priorities
- Use Create:: namespace prefix for all Kindred Create features
- Silo server distributed separately
- ztools/Silo versions pinned via git submodules
2026-01-27 09:36:25 -06:00
forbes
929f61aef2 Add ztools and silo as git submodules in mods/
- Create mods/ directory for Kindred Create addon modules
- Add ztools workbench as submodule at mods/ztools
- Add silo parts database as submodule at mods/silo
- Update README with new project structure and submodule instructions
2026-01-27 08:22:53 -06:00
forbes
2a67ca5f11 update build wf 2026-01-26 22:48:22 -06:00