Commit Graph
71 Commits
Author SHA1 Message Date
Luis b3b49987d4 Release: refresh contributor credits for each release (#2254) (#3898)
About > Contributors still showed an old snapshot, because nothing
regenerated contributors/contributors.json before a release. Opt in to
the shared refresh from craft-common-actions: a read-only credits job
regenerates the snapshot for the release commit, and the shared release
workflow installs it before every source build. The snapshot is not
committed back.
2026-11-08 02:12:52 +01:00
FredApps 0b23cc6384 Copy the shared house rules into AGENTS.md.
The blocks come from craft-contrib at dde09ea31e2e457f5b4653a6e76f7cdf55944bdf. CLAUDE.md imports AGENTS.md. The house-rules workflow checks the copy.
2026-11-06 11:50:01 +01:00
FredApps 5cd7eb107e CI: Windows leg for pull requests that change Windows code, or labelled full-ci (#3793)
* CI: Windows leg for pull requests that change Windows code, or labelled full-ci

* ci-windows: also run on manifest and Cargo.lock changes

* deps: craft-update with flate2's miniz backend (fixes larger-than-raw ZIP TIFFs on Windows)

craft-update's zip dependency used the `deflate` feature, which pulls in
flate2's zlib-rs backend. Cargo unifies flate2's features across the app, so
on Windows the whole of Lightcraft used zlib-rs, whose level 1 (the TIFF
exporter's DeflateLevel::Fast) is a static-Huffman mode that can make a
16-bit ZIP TIFF larger than the uncompressed one. storytold/craft-libs#608
switches craft-update to `deflate-flate2` (miniz_oxide), the backend Linux
and macOS already use.

Only craft-update's rev moves (c5a1cbf -> a231e51); the other craft-libs
crates stay where they are.

* ci-windows: cover lightcraft-cli and menus/files.rs (cfg(windows) code)
2026-11-05 16:37:49 +01:00
FredApps ffb79a6c03 CI: keep the gate timeout at 80 min (30 cuts off green runs)
Reverts 0b5c6ff46. A green gate run takes about 40 min, so a 30 min
watchdog kills healthy runs (run 42015761190 timed out at 30:00).
2026-11-05 13:01:28 +01:00
FredApps 0b5c6ff46a CI: stop a hung gate at 30 min 2026-11-05 12:53:58 +01:00
FredApps 4f5b3a3fcc CI: gate timeout back to 80 min (a green run takes about 40)
Reverts db60ab400: at 30 min the gate stopped a healthy run (exit 124 at 30:00, run 42015761190), which also showed the watchdog's process list and error work.
2026-11-05 12:37:12 +01:00
FredApps db60ab4008 CI: stop a hung gate at 30 min 2026-11-05 12:03:09 +01:00
FredApps 1d82c72c6d CI: stop a hung gate at 80 min with a process list (gate-timeout-minutes) 2026-11-05 11:07:39 +01:00
Dylan M. Taylor 0b5e6c7a06 Pass the Linux signing key to the release workflow (#3759) 2026-11-04 17:45:13 -05:00
Dylan M. Taylor 07301cbd1e ci: grant packages write permission to release workflow 2026-10-31 23:42:58 -04:00
Dylan M. Taylor b2d89895ad CI: workflows only call craft-common-actions at @main (#3356)
AGENTS.md (and CLAUDE.md where present) gets a CI workflows section: workflows only call
craft-common-actions at @main, with no other jobs; feature and fix PRs don't touch CI and
link or open a craft-common-actions issue (a PR only for a small fix that is safe for
every app and does not increase CI time); legacy jobs
aren't added to and move only as their own task, staying until a shared workflow runs them.

windows-arm64.yml moves from its SHA pin to @main. The pinned revision is on
craft-common-actions main and the workflow (and the actions it calls) is identical
there, so nothing changes in behaviour.
2026-10-29 22:36:34 -04:00
aiongg 97eb5fdb83 ci: use storytold/craft-common-actions at the merged installer-policy commit 2026-10-27 20:51:53 +00:00
Jeremy 148cc09be1 fix(installer): harden install-policy checks and packaging-lint workflow 2026-10-27 12:01:29 +00:00
Jeremy bf86920980 fix(installer): address scope and ARM64 review feedback 2026-10-27 12:01:28 +00:00
Jeremy ea9130676b feat(installer): default to a per-user ArtCraft folder 2026-10-27 12:01:28 +00:00
skylar taylor-barrick 662df66f1c Preserve queued file drops across dialogs and restore Flatpak sources (#2975) 2026-10-27 03:50:41 +01:00
skylartaylor c057ccc23f Migrate LightCraft to egui 0.37 and reconcile dependency and font locks
Preserve current main, adapt frame/input and IME handling, and keep library
check results stable across layout passes. Include the matching Nix font lock
and reviewed attribution changes.
2026-10-25 02:54:42 +01:00
skylartaylor 50df646183 M0.37: port LightCraft UI, input and capture lifecycle to egui 0.37 2026-10-24 08:02:12 +02:00
francoisgnandClaude Opus 5.5 144d900c21 Merge upstream/main (integration batch 43, #2729, #2737, #2412) into round3a-integration
Conflicts:
- apps/lightcraft/src/native_menu.rs: upstream's item swapping (macOS keys
  given up for real, Help menu not swapped, Settings / Quit tracked) with
  KEY-GRID's keymap-aware rows. `Item.label` stays the text the row shows
  (native_item_presentation), so `Item::native_label` reuses it instead of
  formatting it again; Settings / Quit store theirs through
  display_item_label, as upstream's native_label did. No early return after
  a rebuild (upstream).
- crates/ui-egui/src/i18n.rs: upstream's tests (#2729: one test per check
  across languages, gaps reported, never a failure) plus the batch's two new
  ones (dropped-photos notice, Polish counts); production code as merged.
- grid.rs, keyword_list.rs, masking.rs: the translation tests #2729 removed
  stay removed; the batch's new keyword and segmenter tests stay.
- cmd/library.rs, ui-egui/src/lib.rs: both test modules, each with its
  #[cfg(test)].
- xtask/src/main.rs: #2302's test_selected and upstream's translation_gaps.
- docs: tracker / gap rows take both sides' edits, headers list both sides'
  changes, history rows of both sides newest-first. What's New: one section
  per date, newest first (the batch had 10-22 above 10-23, and second 10-21
  and 10-19 sections); no line lost.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:26:48 +03:00
Dylan M. Taylor 5ca49b3eab ci(sonar): don't cancel superseded runs on main, so coverage is published (#2737) 2026-10-23 17:01:32 -04:00
aiongg d71b83b2bc Catalog import: resolve catalog paths with craft-docpath's resolve_absolute (#2412)
doc_path::resolve uses craft_docpath::resolve_absolute; a path that resolves but is not absolute here is reported as not on this computer. Adds tests for Windows-form, GVFS-relative and colon-in-name paths, and a git-sources check in nix.yml and release.yml.
2026-10-23 16:42:09 -04:00
francoisgnandClaude Opus 5.5 b1611b6d5e Merge upstream/main (#2667 shared CI gate workflow) into round3a-integration
.github/workflows/ci.yml (add/add with #2302): upstream's, which runs the
same `cargo xtask ci` gate through craft-common-actions' gate.yml. #2302's
workflow is superseded; its `ci --quick` (xtask) stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:41:21 +03:00
aiongg 069e32f909 CI: shared gate workflow; FreeBSD nightly and on release (#2667)
* CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release

ci.yml is new: it calls the shared workflow (cached apt packages, nextest, main-only cache saves, Cargo.lock check). FreeBSD and Windows ARM64 run nightly and on pushes to release instead of on pull requests. Depends on storytold/craft-common-actions#69.

* CI: the gate installs no nextest (xtask ci runs cargo test)
2026-10-23 14:23:53 -04:00
francoisgn bddbcd46d2 Merge PR #1385: Issue #1184: a pull request template 2026-10-22 22:31:15 +03:00
francoisgn b3c5b25b9a Merge PR #2302: Gap 9: cargo xtask ci on every PR (Linux x64); ci --quick; o
# Conflicts:
#	CLAUDE.md
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-22 22:31:14 +03:00
Dylan M. Taylor 511908ab06 ci: add SonarCloud scan via shared reusable workflow
Calls storytold/craft-common-actions/.github/workflows/sonarcloud.yml@main
with secrets: inherit. Adds SonarCloud badge to README where missing and
removes the redundant sonar-project.properties (config now passed by the
reusable workflow).
2026-10-21 15:47:01 -04:00
Brandon ThomasandClaude Opus 5.5 79d916c149 Release 0.11.0
The web release now builds with craft-fonts too (web-craft-fonts), as VectorCraft's
does, so the published web app ships the Chinese and Japanese faces docs/releasing.md
promises.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:05:43 -04:00
aiongg 06a5c2edb7 Merge PR #2244: fonts: Georgian UI text from craft-fonts' Noto Sans Georgian (release builds) 2026-10-21 14:53:17 +00:00
Dylan M. Taylor abb49bdd76 ci: switch to shared nix workflow from craft-common-actions (#1980) 2026-10-21 02:38:14 -04:00
Matthew James SivakandPaperclip 10c4d0c0ab Gap 9: only a PR's own pushes share a CI concurrency group
A group holds one active and one pending run, so `ci-${{ github.ref }}` let a
later push to main replace a queued run and skip its `cargo xtask ci`. Pull
request pushes keep the shared group (that supersession is the point); every
other run — a push to main, a manual one — now gets `ci-<run_id>`, a group of
its own, and always runs.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-20 15:07:19 +02:00
Matthew James SivakandClaude Opus 5.5 960e1f14e8 Gap 9: ci --quick reads git's -z output, tests the crates that embed changed files; CI keeps main's runs
- ci.yml: cancel-in-progress only for pull requests, so a push to main never cancels the run of
  the push before it.
- ci --quick: `git diff --name-status -z -M` and `git ls-files -z`, parsed as NUL-separated
  fields (a rename or copy takes two paths), so a non-ASCII path, which git otherwise quotes and
  escapes, still maps to its package.
- ci --quick: files outside a package that it compiles in (include_str!/include_bytes!, a build
  script's rerun-if-changed: fonts, camera profiles and the app icon under assets/,
  docs/whats-new.md, docs/raw/coverage-sweep.tsv, docs/raf-corpus.sha256, contributors/) count
  as a change to that package. A test scans the workspace and fails when one is not mapped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:10:53 +02:00
Davit MatchakhelidzeandClaude Opus 5.5 2015f44c06 Release: keep the web build without craft-fonts for now (its WASM would pass Cloudflare's 25 MiB limit); docs say so
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-20 12:56:17 +04:00
Davit Matchakhelidze 97ef4f7ecc Merge main 2026-10-19 18:13:03 +04:00
Matthew James SivakandClaude Opus 5.5 5690afe51a Gap 9: cargo xtask ci on every PR (Linux x64); ci --quick; one local ci at a time
- .github/workflows/ci.yml: the full `cargo xtask ci` on every pull request and push to main
  (Linux x64, craft-fonts, rust-cache for dependencies), so it becomes the merge gate.
- `cargo xtask ci --quick [--base REF]`: fmt, clippy, the changed packages' tests, layers and
  assets, plus heif / parity / wasm when the changes touch them, measured against the merge base
  with origin/main (xtask/src/ci_quick.rs). Workspace-wide files test everything.
- A machine-wide lock (xtask/src/ci_lock.rs): a second `ci`, from another worktree, waits and
  names the run it waits for. LIGHTCRAFT_CI_SLOTS=N, LIGHTCRAFT_CI_LOCK=off|<dir>.
- README, CLAUDE.md quality gate, gaps.md gap 9, target-app-parity.md stability note.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:59:30 +02:00
Dylan M. Taylor fb7ac08b9a ci: configure Dependabot for Cargo and GitHub Actions
Co-authored-by: Dylan M. Taylor <dylan@dylanmtaylor.com>
2026-10-18 12:31:40 -06:00
Davit MatchakhelidzeandClaude Opus 5.5 18cfda0ee9 Release: build the web version with craft-fonts too (web-craft-fonts)
The shared release workflow builds the web release without CRAFT_FONTS_DIR unless web-craft-fonts
is set, so the web version would still have no Georgian face (CodeRabbit on vectorcraft#2934).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-18 20:25:24 +04:00
Davit MatchakhelidzeandClaude Opus 5.5 07b2f55022 fonts: Georgian UI text from craft-fonts' Noto Sans Georgian on the web
Native already appends every non-CJK craft face via ui_fallback; the wasm build
only embedded BIZ UDPGothic and Noto Sans Thai, so add Noto Sans Georgian to
that filter. Check its glyphs next to Thai and Arabic, and bump craft-fonts-ref
to a71c20e (storytold/craft-fonts#27).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-18 16:14:56 +04:00
skylartaylor 3885b61e6b ci: retain LightCraft installer and package checks 2026-10-16 05:25:18 +02:00
Dylan M. Taylor 0802892132 ci: refactor workflows to use storytold/craft-common-actions 2026-10-15 21:19:37 -04:00
Brandon Thomas 431194d5fd Merge origin/main into batch 36 2026-10-15 00:07:19 -04:00
skylar taylor-barrickandskylartaylor 38adc178a0 ci: add comfortable runtime limits to unbounded jobs (#1836)
Co-authored-by: skylartaylor <26588250+skylartaylor@users.noreply.github.com>
2026-10-15 05:16:09 +02:00
Brandon Thomas de137ef5fc Merge PR #1311 2026-10-14 22:29:07 -04:00
Brandon Thomas 8a406d0dfc Merge PR #1211 2026-10-14 22:29:02 -04:00
LabDennis 1f4aaaec47 Fonts: finish Thai fallback delivery for desktop and web releases
Retain the complete reviewed change, including prior integration resolutions,
on current upstream.

#736: deliver Thai UI fonts in desktop and web releases

Use the merged craft-fonts input containing Noto Sans Thai across release,
FreeBSD and Nix builds. Retain the small Thai face in the wasm subset and
reject required release inputs that lack it. Exercise the reported Thai
folder name through all UI families and include original font licence texts
in Windows installers as well as portable packages.

Refs #736; completes delivery of the fallback added in #750.

Validation: UI tests, UI-only strict Clippy, 28 wasm checks, HEIF checks,
assets, layers, parity and formatting pass. All 21 unrelated workspace
failures reproduce with upstream Rust sources and the old font input;
existing Rust 1.95 metadata/engine Clippy findings remain unchanged.
2026-10-14 18:52:15 +02:00
notdezziandZCode 54321e6175 Packaging: confirm a successful uninstall with the completion dialog (fixes #892)
The MSI never included WiX's ExitDialog: the Publish events point at it, but only
a DialogRef pulls the UI extension's fragment (with its on-exit=success show) into
the package, so every successful run ended silently. Reference it, and note that
the shared completion page is the uninstall confirmation; packaging-lint now fails
when the reference is lost again.

🤖 Generated with [ZCode](https://zcode.ai)

Co-Authored-By: ZCode <noreply@zcode.ai>
2026-10-13 16:15:46 +02:00
dev-null-undefinedandClaude dfe87240b0 Nix: evaluate the flake in CI so a new git dependency can't break nix build / nix develop again
Since UI.9 (9bfabc98) Cargo.lock has a git source, craft-ui from
storytold/craft-libs. importCargoLock needs a hash for every git
dependency, so evaluation stopped with "No hash was found while vendoring
the git dependency craft-ui-0.1.0" and both `nix build` and `nix develop`
failed on NixOS for two days (#1314 fixed it with
cargoLock.allowBuiltinFetchGit).

The flake is not built in CI, so nothing noticed: the new Nix workflow
runs `nix flake check --no-build --all-systems` whenever flake.nix,
flake.lock, nix/ or Cargo.lock change.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-13 13:07:36 +02:00
Nathaniel LedfordandClaude Opus 5.5 5895918791 Issue #1184: a pull request template
.github/PULL_REQUEST_TEMPLATE.md asks for what the people merging ask for
most in their comments on past pull requests: the issue it fixes, overlap
with other open pull requests, whether existing edits render differently,
the shared version numbers it takes, where decoder and camera data came
from, and new dependencies or CI changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:08:52 -04:00
Chad ElliottandClaude Opus 5.5 8c84677079 docs(windows): #399 note the pre-0.6 install-folder upgrade fix
Add a What's New entry for keeping the install folder when upgrading from a
pre-0.6 Windows installer, and describe the new Windows MSI job in the
Packaging lint workflow header.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:46:21 -05:00
THEtheChadandGPT-6 Astra 32a358180c fix(windows): #399 preserve legacy MSI install folders
Fall back to the parent directory of the App Paths executable when an
older installer did not write InstallFolder. Keep explicit destinations
and the newer stored folder ahead of the legacy fallback.

Exercise the real MSI searches and actions with isolated per-user probes
on x64 and x86, including legacy paths with spaces and Unicode.

Co-Authored-By: GPT-6 Astra <noreply@openai.com>
2026-10-11 03:42:56 +00:00
Brandon ThomasandClaude Opus 5.5 9e6c4c6fc9 Release prep: 0.6.0 and Linux riscv64 release build (#844)
- release.yml: new linux-riscv64 job (ported from GridCraft): cross-compiles on
  ubuntu-24.04 against ports.ubuntu.com riscv64 libs, packages a tar.gz with
  package.sh --formats tar, smoke-tests lightcraft-cli under QEMU. The release
  job needs it, so its tarball lands in the draft and SHA256SUMS.
- packaging/linux/package.sh: CROSS_ARCH/CROSS_TARGET/CROSS_COMPILE/EMULATOR
  support (target dir, cross strip, emulated --version).
- README Downloads and docs/releasing.md list the riscv64 tarball.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:38:10 -04:00