Commit graph cad-editor/.github
Author SHA1 Message Date
Hakan Seven
2c01692d63 feat: self-host star history 2026-08-04 12:42:04 +03:00
Hakan Seven
a05c07785a ci: remove completed issue run 2026-08-04 12:17:23 +03:00
Hakan Seven
63c8245f98 fix: normalize recent Patreon support 2026-08-04 12:17:21 +03:00
Hakan Seven
feb110404c fix(ui): correct supporter data and labels 2026-08-03 22:08:22 +03:00
Hakan Seven
c3df935905 ci(issues): add supporter priority comment 2026-08-02 14:55:31 +03:00
Hakan Seven
b166125529 ci(web): match wasm-bindgen to lockfile 2026-07-31 19:31:16 +03:00
Hakan Seven
0c5d6af1d0 ci(release): drop checksum sidecars 2026-07-31 14:48:42 +03:00
Hakan Seven
b9799e4421
Update GitHub Sponsors username in FUNDING.yml 2026-07-29 10:56:22 +03:00
Hakan Seven
d4e792b2bc feat(web): persist browser state
Keep settings, aliases, and recent drawings across browser sessions.

Load Start-page videos from a Pages-generated snapshot.
2026-07-29 00:44:00 +03:00
Hakan Seven
28d8246c68 feat(ui): add discussions and semantic theming
Generate web discussion snapshots in CI; native builds use the public
feed and an offline cache.
2026-07-28 11:49:45 +03:00
Hakan Seven
e0a2e1ffd3 fix(ci): install web worker bindgen CLI 2026-07-27 01:36:12 +03:00
Hakan Seven
a5c6c3f116 ci(release): build the thumbnail helper crates as explicit targets
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 <noreply@anthropic.com>
2026-07-11 01:48:14 +03:00
Hakan Seven
ba3b3202e8 feat(thumbnails): embed DWG previews and wire cross-platform file thumbnails
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 <noreply@anthropic.com>
2026-07-11 01:27:17 +03:00
Hakan Seven
0e74a11724 feat(web): show Patreon supporters on the web build too
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 <noreply@anthropic.com>
2026-07-02 01:25:24 +03:00
Hakan Seven
608fe5ec3e feat(start): show paying Patreon supporters on the Start page
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 <noreply@anthropic.com>
2026-07-02 01:00:22 +03:00
Hakan Seven
10f10f992f ci: distinguish the web Pages run name (… Web)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 01:52:19 +03:00
Hakan Seven
c56e7864bb ci: deploy the wasm web app to GitHub Pages on each release (issue #45)
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 <noreply@anthropic.com>
2026-06-17 00:59:56 +03:00
Hakan Seven
e7afe35d62 feat(packaging): desktop shortcut, icon-cache refresh, checksums, AppStream
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 <noreply@anthropic.com>
2026-06-16 04:27:46 +03:00
Hakan Seven
084dfb1bdb fix(windows): embed the app icon into the .exe
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 <noreply@anthropic.com>
2026-06-16 04:10:01 +03:00
Hakan Seven
3bafe45ab3 fix(wix): show GPL-3 license on installer EULA page
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 <noreply@anthropic.com>
2026-06-12 16:55:09 +03:00
Claude
e87f331a1f
Revert "ci: allow workflow_dispatch to upload to an existing release tag"
This reverts commit 0bceb1e2a0.
2026-06-12 11:55:16 +00:00
Claude
0bceb1e2a0
ci: allow workflow_dispatch to upload to an existing release tag
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
2026-06-12 11:54:17 +00:00
Claude
fd949b74c7
refactor(installer): split installer UI into its own ui.wxs
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
2026-06-12 07:28:04 +00:00
Claude
556989dbdb
feat(installer): add finish screen with launch-app checkbox to Windows MSI
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
2026-06-12 07:24:36 +00:00
Hakan Seven
9c7dd2fa6b ci(release): retry .dmg creation on transient hdiutil failure
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 <noreply@anthropic.com>
2026-06-12 02:14:05 +03:00
Mojtaba Karimi
3163a5ee75 ci(windows): sign exe and installer with Azure Trusted Signing
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) <noreply@anthropic.com>
2026-06-04 12:54:40 +02:00
Hakan Seven
695c6536c4 docs+ci(macos): ad-hoc sign bundle, add Homebrew cask, clarify install
- release.yml: ad-hoc codesign the .app before packaging so a quarantined
  download avoids the "app is damaged" Gatekeeper verdict; emit the cask
  version + sha256 to the job summary each release for easy tap bumps.
- packaging/homebrew: Homebrew cask + tap/usage notes; install via
  --no-quarantine (the actual Gatekeeper bypass for an unsigned app).
- README: split macOS install into Homebrew and manual .dmg paths with
  the xattr / Settings "Open Anyway" fallbacks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 12:45:58 +03:00
Hakan Seven
7ad59bf603 fix(ci): quote candle -d args so PowerShell preserves the path
PowerShell 7's native-command argument passing breaks
`-dSource=target\release\OpenCADStudio.exe` on the `=` sign, so candle
received Source=`.exe` plus the actual path as a stray input filename
and bailed with CNDL0103. Resolve each path to an absolute string up
front and wrap every `-d<name>=<value>` in double quotes so the whole
token reaches candle intact.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 00:01:11 +03:00
Hakan Seven
dd26dfeef7 chore(release): label Windows artifacts portable / installer
Rename release uploads:
  OpenCADStudio-<tag>-windows-x86_64.exe → -portable.exe
  OpenCADStudio-<tag>-windows-x86_64.msi → -installer.msi

Makes the distinction obvious on the release page so users don't have
to guess which file is the standalone exe and which one runs setup.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 23:40:53 +03:00
Hakan Seven
a0800d95c9 feat(packaging): open files from argv, ship Windows MSI installer (#36)
Cross-platform prerequisite for OS-level file associations: the boot
task now consumes `std::env::args_os().nth(1)` as a path and dispatches
`Message::OpenRecent` for it. Flag-style args (starting with `-`) are
ignored, and `OpenRecent` already does the file-existence check, so a
bogus path lands as a clean command-line error instead of a panic.

Linux: the AppImage's desktop entry adds `image/vnd.dwg` alongside the
existing `image/vnd.dxf` MIME type and grows a `%f` placeholder in
`Exec=` so the launcher forwards the picked file path. Once the
AppImage is integrated with the system (xdg-mime / AppImageLauncher),
double-clicking a .dwg / .dxf opens it in Open CAD Studio.

Windows: new `packaging/windows/main.wxs` defines an MSI installer —
per-machine install to `Program Files\Open CAD Studio`, Start Menu
shortcut, `MajorUpgrade` so newer MSIs replace older ones, and a
single ProgID `OpenCADStudio.Drawing` that owns both `.dwg` and
`.dxf` and launches the exe with the file as `argv[1]`. The icon is
pulled from the SVG logo, converted to multi-resolution ICO at build
time with the runner's pre-installed ImageMagick. CI now also runs
`candle` / `light` (WiX Toolset 3, pre-installed on `windows-latest`)
and uploads both the bare `.exe` (portable) and `.msi` (installer)
to the release.

macOS Info.plist already declares the DWG / DXF UTIs; combined with
the argv-handling change above, double-clicking a drawing in Finder
will open it in Open CAD Studio without further packaging changes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 23:34:14 +03:00
Hakan Seven
89a01a8654 Revert "chore(github): add issue templates (bug / feature / question)"
This reverts commit 2e69d0a425.
2026-05-26 17:39:05 +03:00
Hakan Seven
2e69d0a425 chore(github): add issue templates (bug / feature / question)
YAML issue forms with required fields so new reports arrive with the
context needed to act on them (version, OS, reproduction steps for
bugs; problem-before-solution for features). Auto-applies the matching
label.

blank_issues_enabled: false forces use of one of the three templates.
config.yml also surfaces the Patreon link as a contact option.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 17:37:03 +03:00
Hakan Seven
ef1f9a08d6 chore: rename H7CAD to Open CAD Studio
Joining the OpenAEC Foundation (open-aec.com). Crate/struct become
OpenCADStudio, user-facing strings use the spaced "Open CAD Studio"
form, repo URLs point to HakanSeven12/open-cad-studio. Logo (window
icon + assets/logo.svg) redrawn with OCS initials. Drop examples/
binaries — unused.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 17:16:15 +03:00
Hakan Seven
aea113e687 chore(release): drop Intel macOS build; arm64 only
The macos-13 / x86_64-apple-darwin matrix entry was failing in the
v0.3.5 run and we don't plan to ship Intel macOS binaries. Collapse
the macOS job to a single arm64 build on macos-14 (Apple Silicon),
removing the matrix and threading the target literally through the
build / .app / .dmg steps. README updates to match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 21:31:19 +03:00
Hakan Seven
9527509ea2 chore(release): drop flatpak, add macOS .dmg, hide Windows console
- .github/workflows/release.yml: remove the build-flatpak job; matrix-
  add macOS (arm64 + x86_64) that builds H7CAD.app by hand, renders
  .icns from assets/logo.svg via librsvg + iconutil, and packages a
  UDZO .dmg. AppImage path updated to packaging/H7CAD.desktop.
- packaging/H7CAD.desktop: moved out of flatpak/ so the AppImage job
  doesn't depend on a Flatpak layout.
- packaging/Info.plist: macOS bundle template; __VERSION__ swapped
  for the release tag at build time.
- flatpak/: deleted (manifests, metainfo, desktop, builder cache).
- src/main.rs: `#![cfg_attr(all(windows, not(debug_assertions)),
  windows_subsystem = "windows")]` so the Windows GUI binary no
  longer spawns a console window alongside it (debug builds keep
  the console for log output).
- README: add macOS install section, document Gatekeeper / SmartScreen
  on first launch since the binaries are unsigned.

Bump to 0.3.5.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 21:13:02 +03:00
Hakan Seven
465dcc1600 ci: include version, OS and arch in release asset filenames
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 10:13:11 +03:00
Hakan Seven
4506cff931 ci: remove one-time upload_tag workaround from release workflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 10:11:28 +03:00
Hakan Seven
135fef54c5 ci: support upload_tag input on workflow_dispatch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 02:12:22 +03:00
Hakan Seven
0a88d063f9 ci: add AppImage build job to release workflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 01:57:40 +03:00
Hakan Seven
527cce8ff0 Rename workflow and job identifiers for clarity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 01:18:29 +03:00
Hakan Seven
a8089f7c74 Rename flatpak-release.yml to release.yml 2026-03-22 18:36:48 +03:00
Hakan Seven
803f5a005c Add Windows build job to release workflow 2026-03-22 18:35:45 +03:00
Hakan Seven
ba587e99ec Use gh release upload instead of action for flatpak bundle 2026-03-22 18:16:11 +03:00
Hakan Seven
5a3b92831f Add contents:write permission to Flatpak release workflow 2026-03-22 17:54:38 +03:00
Hakan Seven
536ae5394c Add workflow_dispatch trigger to Flatpak release workflow 2026-03-22 17:38:24 +03:00
Hakan Seven
95d4a2d7c3 Add Flatpak release workflow and CI manifest 2026-03-22 17:31:06 +03:00
Hakan Seven
10c40f7ca0
Add Patreon username to FUNDING.yml
Added Patreon username for funding support.
2026-03-22 15:10:36 +03:00