Reuse the application library from the binary entry point instead of compiling the module tree twice. Keep desktop-only transports and caches out of web builds, remove unused test code, and check executable targets in CI.
Snapcraft strips the sole usr directory from tar sources, so extract the artifact directly and retain its desktop-file path.\n\nAdd a snap-only manual target to avoid rebuilding other platforms while validating packaging fixes.
Requested in review: this repo's working language is English, so the
comments carried over from the OpenAEC sibling repos have been
translated. No functional changes -- only comments and log/error strings.
Co-Authored-By: Claude Opus 5 <[email protected]>
The feature existed for one reason: truck's mesh and boolean crates reach
`vtkio → xz2 → lzma-sys`, a C library that cannot cross-compile to wasm32. So
the web build dropped it, and with it the Model tab, solid tessellation and
ACIS import — all of which quietly did nothing in the browser.
cadkernel is pure Rust and has no C dependency, so none of that holds any
more. The feature gated exactly two things by the end, `acis_export` and the
save-path sync that calls it, and both are as portable as everything around
them. Removing it means the web build makes primitives, runs booleans, draws
ACIS solids read from a file, and writes them back out as exact geometry — the
same as the desktop build.
Verified against all three: native, `--no-default-features`, and an actual
`wasm32-unknown-unknown` check rather than an assumption about one.
The docs claimed otherwise in four places and are corrected. `tessellation.md`
in particular was organised around whether an entity "goes through truck",
which is no longer a question anything can be asked — the three paths are now
a kernel B-rep mesh, a curve sampled through `entities::curve`, or geometry
emitted directly, and the per-entity table is updated to match.
`index.html` no longer passes `data-cargo-no-default-features`; there are no
features left to turn off.
Co-Authored-By: Claude Opus 5 <[email protected]>
The job deleted its own run once the comment was posted, so a failure to
post left nothing behind to look at. Keep the run, and drop the
`actions: write` permission it needed only in order to delete itself.
Co-Authored-By: Claude Opus 5 <[email protected]>
Repackages the released Linux AppImage (--appimage-extract) instead of
rebuilding from source, triggered on completion of the "Release" workflow.
Publishing to the Snap Store only happens once SNAPCRAFT_STORE_CREDENTIALS
is set as a repo secret.
Different from the other OpenAEC snaps in one important way: OCS uses
winit + wgpu (Vulkan/GL), not GTK/WebKit, so this uses explicit
opengl/wayland/x11 plugs and staged Mesa/X11/Wayland runtime libraries
instead of the `gnome` extension.
Higher confidence in the packaging mechanics (build succeeds, produces a
valid .snap) than in the actual runtime GPU/windowing behavior under
strict confinement, which needs real hands-on testing on a Linux desktop
before publishing to stable -- see the PR description.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
A plain `cargo build --release` at the workspace root builds only the app
package and its dependencies, so it never emitted the artifacts the
packaging steps consume:
* libdwg_thumbnailer.a — the staticlib crate-type is produced only when
dwg-thumbnailer is built as a target (as a dependency cargo makes just
the rlib); the macOS QuickLook .appex links this static lib.
* dwg_thumbnailer_win.dll — dwg-thumbnailer-win is a workspace member,
not an app dependency, so the DLL the WiX MSI references was missing.
Build each helper crate explicitly on its platform, and link the extra
system libraries (Security/SystemConfiguration/iconv) the Rust staticlib
pulls in against the QuickLook extension.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Round-trip a raster preview through the DWG's embedded preview slot and
surface it to the OS file managers, so drawings show their contents in
Explorer / Finder / Nautilus instead of a generic document icon.
OCS:
* io::thumbnail — rasterize the scene to a BMP DIB on save (embedded via
acadrust's new Preview type) and read it back on open for the Start
page recent list; `--dwg-thumbnail IN OUT SIZE` CLI extracts a badged
PNG for external thumbnailers.
* io::file_association::install_thumbnailer — self-install the OS
integration on startup: Linux writes a .thumbnailer + hicolor mimetype
icons; Windows registers the IThumbnailProvider DLL under HKCU.
Shared core:
* crates/dwg-thumbnailer — lean (image-only) preview extractor + the
`badge_dwg` full-width "DWG" band, used by every platform so the
ribbon is single-sourced. Ships an rlib+staticlib.
* crates/dwg-thumbnailer-win — IThumbnailProvider COM in-proc server
(cfg(windows), CI-built as a workspace member).
* macos/ — QuickLook thumbnail extension (Swift + C-ABI bridge to the
core staticlib), assembled into a .appex.
Icons & packaging (single SVG source -> per-platform assets in CI):
* assets/mimetypes/image-vnd.{dwg,dxf}.svg — themed file icons.
* packaging: WiX ships dwg/dxf.ico + the thumbnail DLL and points the
ProgIds at them; Info.plist gets CFBundleTypeIconFile + the QuickLook
extension in Contents/PlugIns.
* release.yml — generate .ico (Windows) and .icns (macOS) from the SVGs,
build the QuickLook .appex, and bundle everything.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
The browser can't call the Patreon API directly (CORS, and the token
would be exposed in the bundle), so the web build fetches a
pre-generated supporters.json served on the same origin. The Pages
workflow generates it server-side with the token (CI secret) after the
trunk build. Native keeps its live API fetch.
serde_json moves to the shared dependencies so the wasm build can parse
the list.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Add a right-hand rail on the Start page listing active paying patrons
(name + pledge amount, highest first) with a "Support on Patreon" button.
The list is fetched once at boot from the Patreon API in the background;
free followers, $0 tiers, declined and former patrons are excluded.
The creator access token is read at build time from OCS_PATREON_TOKEN
(option_env!), so it never lives in source or git — the release workflow
passes it from a repo secret, and build.rs re-bakes when it changes.
Without a token the rail just shows the support button.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Add .github/workflows/pages.yml: on every published release (and manual
dispatch) it builds the web bundle with trunk
(`--public-url /OpenCADStudio/`, no-default-features so no solid3d/C
deps), adds .nojekyll, and publishes dist/ to GitHub Pages. No COOP/COEP
needed since wasm runs single-threaded.
Enable via repo Settings → Pages → Source: GitHub Actions.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Windows installer:
- Optional Desktop shortcut feature (default on, deselectable) via a switch to
the WixUI_FeatureTree UI.
- Refresh the shell after install (ie4uinit -show) so .dwg/.dxf icons and
associations appear without a reboot.
- Tidy the Add/Remove Programs entry: ARPNOREPAIR plus contact/update/comments
metadata (Modify stays enabled for the feature tree).
Release workflow:
- Publish SHA256 sidecars for the AppImage, portable .exe, MSI and .dmg.
Linux:
- Ship an AppStream metainfo.xml for software-centre integration.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
The Windows executable carried no icon, so Explorer, the taskbar, the
Start-menu tile and file-association entries showed a generic icon. Embed
AppIcon.ico via winresource in build.rs, and generate the .ico from the logo
before the build (it was produced after the build, too late to embed). Local
and non-Windows builds skip the step when the .ico is absent.
Fixes#107.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
WixUI_Minimal fell back to WiX's built-in placeholder (Lorem ipsum)
RTF because no WixUILicenseRtf was set. Ship License.rtf generated
from the repo GPL-3 LICENSE and point the variable at it via a new
-dLicense candle arg.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Adds a release_tag input so the workflow can be manually triggered
to rebuild and upload artifacts to an already-published release
(e.g. after a hotfix on main without re-tagging).
https://claude.ai/code/session_01F7yMUY48VuGNUF1Q3ma2cZ
Moves the WixUI_Minimal UI and finish-screen launch checkbox out of
main.wxs into a dedicated ui.wxs fragment, referenced from main.wxs via
<UIRef Id='OpenCADStudioUI'>. Keeps the package/feature definition and
the UI concerns in separate files.
Updates the release workflow to compile both .wxs files (candle now
writes per-source .wixobj into a directory) and link both objects.
https://claude.ai/code/session_01DFVSKgViFaxEjZD2KsTdtt
Adds WixUI_Minimal UI to the WiX installer so users see a proper
Welcome → Progress → Finish wizard. The finish screen includes a
pre-ticked "Launch Open CAD Studio" checkbox; clicking Finish with
it checked starts the application immediately after the installer closes.
Also updates the light.exe invocation in release.yml to include
-ext WixUIExtension, which is required to link the WixUI dialogs.
https://claude.ai/code/session_01DFVSKgViFaxEjZD2KsTdtt
hdiutil create intermittently fails with "Resource busy" on the hosted
macOS runner (stale mount / background indexer), failing an otherwise
successful build. Detach any leftover volume and retry up to five times
before giving up, then assert the image exists.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Sign the bare .exe before the MSI is built (so the packed copy carries
the signature) and the linked .msi afterwards, via
azure/artifact-signing-action with SHA256 digests and Microsoft's
RFC3161 timestamp server. Credentials come from the AZURE_* repository
secrets.
Also fix the MSI version fallback: workflow_dispatch runs use the
branch name as ref_name, which is not a valid numeric ProductVersion,
so candle failed on any non-tag run.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>