Commit Graph

67 Commits

Author SHA1 Message Date
8247127905 merge: resolve build.yml conflict with main
All checks were successful
Build and Test / build (pull_request) Successful in 35m52s
Keep Kindred addon test step, drop removed cache-date step.
2026-02-10 08:41:29 -06:00
bdbe1b163a docs: add FileOrigin API reference and Kindred addon test suite
- Add docs/src/reference/cpp-file-origin.md: full API reference for the
  FileOrigin abstract interface, OriginType/ConnectionState enums,
  LocalFileOrigin behavior, and ownership detection algorithm
- Add SUMMARY.md entry under new 'C++ API Reference' section
- Add tests/test_kindred_pure.py: 78 pure-logic unit tests covering
  update_checker, datum_commands, spreadsheet_commands, silo_commands,
  silo_start, and silo_origin (no FreeCAD binary required)
- Add tests/run_kindred_tests.py: two-tier test runner with CI exit codes
- Add pixi task 'test-kindred' for running addon tests
- Add CI/CD step in build.yml to run addon tests before build

Closes #130
2026-02-10 07:54:26 -06:00
forbes
dfc32cabd6 fix(ci): fix ccache 0% hit rate and improve cache persistence
All checks were successful
Build and Test / build (pull_request) Successful in 1h16m6s
Root cause: compiler_check=mtime (default) invalidates the entire
cache on every run because pixi installs fresh compiler binaries with
new mtimes each time. The CI logs confirm 0/2579 cache hits (0.00%)
despite successfully restoring a 225MB cache.

Fix: set CCACHE_COMPILERCHECK=content to hash compiler binary content
instead of mtime. Same compiler version = same content = cache hits.

Also fix cache save strategy: use github.run_id for save keys so every
build persists its ccache objects. Previously date-based keys with
cache-hit guard meant the cache was only saved once per day — all
subsequent compilations were thrown away.

Changes:
- Add CCACHE_COMPILERCHECK=content to build.yml, release.yml, build.sh
- Use github.run_id in cache save keys (unique per run = always saves)
- Remove date-based cache key computation step
- Remove cache-hit != true guard on save step
- Add ccache-build-main- fallback to release workflow restore-keys
2026-02-09 18:04:17 -06:00
44b9b4e8df fix: set NODE_EXTRA_CA_CERTS for artifact upload/download actions
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Node.js actions (checkout, cache, upload-artifact, download-artifact)
use their own TLS stack and don't trust the system CA store. Setting
NODE_EXTRA_CA_CERTS points Node to the system bundle which includes
the Cloudflare origin CA.
2026-02-09 12:59:21 -06:00
3406df52aa fix: replace sparse-checkout with shallow clone for silo docs
Some checks failed
Build and Test / build (pull_request) Has been cancelled
git sparse-checkout fails on individual files (README.md, ROADMAP.md)
with 'is not a directory' error. A shallow clone is simpler and the
silo repo is small enough that it's fine.
2026-02-09 12:56:13 -06:00
b3c1ebb94e fix: clean /tmp/silo before cloning in docs workflows
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The docs runner persists state between runs, so /tmp/silo may
already exist from a previous (possibly failed) run.
2026-02-09 12:53:24 -06:00
c75b9a5605 fix: sync-silo-docs workflow to run on docs runner
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- Change runs-on from ubuntu-latest to docs
- Use internal gitea:3000 URLs for clone and push
- Remove unnecessary apt-get/CA cert steps (docs runner has access)
- Fix push to use authenticated URL via RELEASE_TOKEN
2026-02-09 12:51:33 -06:00
c3a1927bd3 docs: add Silo server documentation with auto-sync workflow (#122)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- Add sync-silo-docs.yml workflow (daily schedule + webhook dispatch)
- Copy initial Silo server docs into docs/src/silo-server/
- Update SUMMARY.md with Silo Server section
- Update docs.yml to fetch fresh silo docs before mdbook build
2026-02-09 12:37:45 -06:00
761c750895 fix(ci): add CA certificate update before checkout
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The job containers don't trust the Cloudflare origin cert by
default. Install and update ca-certificates as the first step
so git can clone over HTTPS before actions/checkout runs.
2026-02-09 11:19:11 -06:00
633f02a8fe fix(ci): use self-hosted Gitea action mirrors instead of GitHub
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Replace all GitHub action URLs with self-hosted mirrors at
git.kindred-systems.com/actions/:
- checkout@v4
- cache/restore@v4, cache/save@v4
- upload-artifact@v3
- download-artifact@v3

This removes the external GitHub dependency from CI/CD workflows.
2026-02-09 11:09:29 -06:00
40bf0e4ae6 fix(ci): install mdbook in docs runner container
Some checks failed
Build and Test / build (pull_request) Failing after 1m37s
The act_runner container does not have mdbook pre-installed.
Download the musl static binary from GitHub releases before
building the docs.
2026-02-09 08:58:38 -06:00
ccc372b2d1 fix(ci): use Docker network hostname for docs runner checkout
Some checks failed
Build and Test / build (pull_request) Failing after 1m42s
The act_runner and gitea containers share the git_default Docker
network. Use http://gitea:3000 (container DNS name) instead of
localhost, which resolves to the runner container itself.
2026-02-09 08:53:39 -06:00
c25f1b62b8 fix(ci): use localhost:3000 for docs runner checkout
Some checks failed
Build and Test / build (pull_request) Failing after 1m38s
The docs runner is on the same host as Gitea, so clone via
http://localhost:3000 instead of the public HTTPS URL which
fails to connect (port 443 unreachable from the runner).
2026-02-09 08:46:42 -06:00
d6ad0fb43d fix(ci): add docs workflow file to paths trigger
Some checks failed
Build and Test / build (pull_request) Failing after 1m38s
Changes to .gitea/workflows/docs.yml itself should also trigger
a docs rebuild so workflow fixes are immediately testable.
2026-02-09 08:43:32 -06:00
65a2bb98db fix(ci): replace actions/checkout with git clone in docs workflow
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The docs runner is a bare host without Node.js, so actions/checkout@v4
fails with 'Cannot find: node in PATH'. Replace with a plain git
fetch/checkout that works without Node.
2026-02-09 08:20:38 -06:00
64bde8d97a docs: initialize mdBook structure with stub pages and deployment workflow
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- Add docs/book.toml with coal theme, repo link, and custom CSS
- Add docs/src/SUMMARY.md with navigation structure
- Create 16 content pages across guide/, architecture/, development/, reference/
- Add docs/theme/kindred.css with minimal sidebar overrides
- Add .gitea/workflows/docs.yml for auto-deploy on push to main
- Add docs/book/ to .gitignore

Pages are populated with real content from the codebase where possible.
Remaining pages have TODO markers for future content.
2026-02-09 07:59:01 -06:00
forbes
ee839c23b8 fix(ci): add error handling to release creation API calls
Some checks failed
Build and Test / build (push) Has been cancelled
Release Build / build-linux (push) Successful in 1h26m59s
Release Build / publish-release (push) Has been cancelled
Print HTTP status and response body on failure instead of crashing
with a cryptic KeyError when the Gitea API returns an error.
2026-02-08 10:22:26 -06:00
forbes
67f825c305 fix(ci): filter dereferenced tag refs from git ls-remote output
Some checks failed
Build and Test / build (push) Successful in 1h7m46s
Release Build / build-linux (push) Successful in 1h25m16s
Release Build / publish-release (push) Failing after 5m17s
2026-02-07 22:22:55 -06:00
forbes
0e5a259d14 fix(ci): fetch only latest tag and add patchelf build dep
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- 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
2026-02-07 10:42:48 -06:00
forbes
7bec3d5c3b fix(ci): fix release creation and artifact collection
All checks were successful
Build and Test / build (push) Successful in 1h5m11s
- 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)
2026-02-07 08:20:24 -06:00
forbes
8ba7b73aa8 fix(ci): fix ccache strategy and add runner cleanup
- 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
2026-02-07 08:18:00 -06:00
forbes
1e4deea130 fix(ci): add disk space cleanup steps to release workflow
Some checks failed
Build and Test / build (push) Failing after 15m24s
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
2026-02-06 20:01:33 -06:00
forbes
3923e2e4b9 fix(ci): replace release-action with direct Gitea API calls
Some checks failed
Build and Test / build (push) Has been cancelled
Release Build / build-linux (push) Failing after 1h25m19s
Release Build / publish-release (push) Has been skipped
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.
2026-02-06 18:22:23 -06:00
5319387030 fix(ci): add --force to tag fetch, fix ccache keys, disable Windows/macOS builds
Some checks failed
Build and Test / build (push) Failing after 16m39s
Release Build / publish-release (push) Has been cancelled
Release Build / build-linux (push) Has been cancelled
- 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.
2026-02-05 13:41:07 -06:00
7431746ef0 fix(ci): support 'latest' tag for release builds
Some checks failed
Build and Test / build (push) Failing after 43m15s
Release Build / build-linux (push) Failing after 2m18s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
2026-02-05 08:07:15 -06:00
d60db282ea fix(ci): use shallow tag-only fetch to avoid 504 timeout
Some checks failed
Build and Test / build (pull_request) Failing after 41m54s
The previous `git fetch --tags` triggers full history negotiation
against the upstream FreeCAD-derived repo (~45k commits), causing
HTTP 504 gateway timeouts on the Gitea instance.

Replace with a depth=1 refspec fetch that pulls only tag refs
without negotiating reachable objects behind them. This is
sufficient for `git describe --tags --always` to resolve a
version string.
2026-02-04 13:30:34 -06:00
8042b7dcc8 fix(ci): use shallow clone with tag fetch to avoid 45k commit download
Some checks failed
Build and Test / build (push) Successful in 1h11m46s
Release Build / build-linux (push) Failing after 2m32s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
fetch-depth: 0 downloads the entire FreeCAD history (45k+ commits),
causing 13+ minute checkout times. Switch to fetch-depth: 1 with a
separate lightweight tag fetch for git describe.
2026-02-03 12:13:01 -06:00
7ce21aceb6 fix(ci): remove container directive for dockerized runner compatibility
Some checks failed
Build and Test / build (push) Failing after 17m20s
Release Build / build-linux (push) Has been cancelled
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
Gitea act_runner in Docker mode maps the runs-on label to a container
image via its config. The container: block conflicts with this by
attempting to create a nested container. Remove it so the runner's
own docker://ubuntu:24.04 mapping is used directly.
2026-02-03 10:59:26 -06:00
1b3f780aa1 chore: migrate submodules to public repos, rework docs and CI/CD
Some checks failed
Build and Test / build (push) Has been cancelled
- Update .gitmodules: ztools, silo, and OndselSolver now reference
  public git.kindred-systems.com URLs instead of internal Gitea
- Merge OndselSolver numerical solver with ML solver scaffolding
  into unified kindred/solver repository
- Rewrite README.md for conciseness
- Add docs/CI_CD.md with full pipeline documentation
- Rework CI/CD workflows for public dockerized runners
- Add multi-platform release builds (Linux, macOS, Windows)
- Release workflow triggers on v* tags only
- Update docs/REPOSITORY_STATE.md and docs/INTEGRATION_PLAN.md
2026-02-03 10:54:47 -06:00
forbes
5b7b770f80 fix(ci): use fixed path for ccache dir to survive workspace changes
The Gitea runner assigns a different workspace directory hash on each
run (e.g. /var/lib/gitea-runner/.cache/act/<hash>/hostexecutor/). When
CCACHE_DIR was set to ${{ github.workspace }}/.ccache, the actions/cache
save and restore operated on a path that changed every run, making the
restored cache land in the wrong location. This caused 0% hit rate on
the second build despite the cache being saved successfully.

Fix by using a fixed path (/tmp/ccache-kindred-create) for CCACHE_DIR
and the cache action path. CCACHE_BASEDIR remains set to the workspace
so ccache stores relative source paths, making cache entries portable
across different workspace directories.
2026-02-01 18:15:16 -06:00
forbes
7bad1b787f ci: add ccache persistence via actions/cache for build and release workflows
- Move CCACHE_DIR inside workspace for actions/cache compatibility
- Add CCACHE_BASEDIR for portable cache entries across workspaces
- Add cache restore step with fallback keys (branch -> main)
- Add cache save step (runs even on test/packaging failure)
- Enhance ccache diagnostics with pre/post build stats and cache size
- Release builds fall back to main branch build cache for warm starts
2026-02-01 18:15:16 -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
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
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