16 Commits
Author SHA1 Message Date
VoiceLessQ 014422ad15 fix(packaging): declare the launcher's real window class in its .desktop file (#1026)
The window sets its app id (Wayland) and WM_CLASS (X11) to
ai.storyteller.artcraft-launcher, but the entry said
StartupWMClass=artcraft-launcher. Desktops that find the entry by its
file name were fine; an entry under another name (AppImageLauncher,
Gear Lever, a hand-made one) never matched, so the dock showed a
generic icon and the launcher could not be pinned.
2026-10-30 22:00:18 -04:00
JeremyandClaude Opus 5.5 2738185596 feat(versions): the shared version folder exists before any app starts
Flatpak mounts an app's read-only grant for ArtCraft/versions only when the
folder exists as the app starts. The launcher now makes it on start, and its
Flatpak grants xdg-data/ArtCraft/versions with :create, which also covers an
XDG_DATA_HOME outside home, where --filesystem=home does not reach.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 22:08:38 +00:00
skylar taylor-barrick 8165feb8e0 test(packaging): explain metadata assertion failures 2026-10-29 12:24:50 -06:00
skylar taylor-barrick 323c8760a3 fix(packaging): declare the build target glibc floor 2026-10-29 12:22:41 -06:00
skylar taylor-barrick 4ab652afd8 Migrate Craft Launcher to egui 0.37 (#873)
* Migrate Launcher to egui 0.37 and preserve current-main behavior

* egui037: record final published pins and local qualification

* fix(ui): gate CJK language drawing until fonts are installed

* Document migrated launcher UI contracts and regression invariants
2026-10-25 10:49:00 -04:00
Dylan M. Taylor 5752c9d881 chore: resolve SonarCloud maintainability issues (#844)
* chore: resolve SonarCloud maintainability issues

- Refactor table_header in crates/ui-egui/src/views.rs to reduce cognitive complexity (rust:S3776)
- Define SHA256_LINE_FMT constant in packaging/linux/package.sh (shelldre:S1192)

* fix(ci): fix shellcheck SC2059, clippy needless borrow, and cargo fmt

* fix(packaging): assign positional parameters to local variables in check_sha256
2026-10-23 22:33:18 -04:00
Dylan M. TaylorandCodebuff 674b893f0e Refactor the complex fns, expand wildcard imports, tidy closures and lifetimes (SonarCloud) (#836)
* Refactor the complex fns, expand wildcard imports, tidy closures and lifetimes (SonarCloud)

- S3776: split the twelve flagged functions (portable install, backend check
  sweep, app details drawer/hero/identity, toolbar and its banner rows, table
  header/rows/cells, action menu and its phases, settings install panels,
  widgets cells, narrow-header test) into focused helpers
- S2208: replace the nine `use super::*` in platform test modules with the
  exact imports each module needs
- S1612: call clone() on the iterator directly instead of in a closure
- S8833: drop the redundant reference in iterator-based loops
- shellcheck: use [[ ]] division guard in packaging/linux/package.sh

* Lint: pass a fixed printf format to sha256sum, not a variable (shellcheck SC2059)

The shellcheck gate flags printf with a variable format string; inline
'%s  %s' at the four sha256 check sites so the format is a literal. No
behavior change.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>

* Fix: a Windows build needs CraftApp in the windows module's scope

uninstall_msi references CraftApp but the module's super import omitted
it, breaking the Windows clippy job only (caught by CI, not by the
Linux check the branch was verified with).

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>

* Address the CodeRabbit review: no missing-entry assert, and the paused
row's resume button measures against the full row width again

- details: return early when the shown detail has no matching entry
  (non-test code never panics); the assert only fired in debug builds
- actions_in: paused_actions gets the full row width, as the branch
  subtracted the discard and menu buttons from it itself; passing
  main_w sized the resume button one CONTROL_H + gap too narrow

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>

---------

Co-authored-by: Codebuff <noreply@codebuff.com>
2026-10-23 17:14:44 -04:00
aiongg 9256915b76 Packaging: pin the signing client and appimagetool, and check their hashes (#688)
* Packaging: pin the Windows signing client and check its hash

* Packaging: pin appimagetool and check its hash

* Fail clearly when no appimagetool is pinned for the architecture

* Pin the AppImage runtime
2026-10-23 12:59:57 -04:00
Dylan M. Taylor ce3b29f4f2 packaging: [[ ]] tests, named positional parameters and explicit returns (SonarCloud S7688, S7679, S7682) (#808)
* packaging: [[ ]] tests, named positional parameters and explicit returns (SonarCloud S7688, S7679, S7682)

Every packaging script is bash (macOS ships bash 3.2, which has [[ ]]), so the
single-bracket tests become [[ ]]: no word splitting or globbing of unquoted
operands. Every right-hand side of = is quoted or a plain literal, so no test
turns into a pattern match.

Functions that read positional parameters copy them into named locals, and the
env.sh helpers end with a bare return, which keeps the last command's status.

* fix: use POSIX test in generated /bin/sh helper
2026-10-23 11:28:35 -04:00
Dylan M. Taylor 89ff63e6fc security: enforce HTTPS on curl downloads (SonarCloud S6506)
Add --proto '=https' to curl invocations so redirects cannot downgrade to
plaintext HTTP. Resolves SonarCloud S6506 (shell/docker/githubactions).
2026-10-21 17:06:36 -04:00
Mex 0b3097c7d2 Respect managed AppImage desktop entries and refresh icon caches (#355)
* Respect managed AppImage desktop integration and refresh icon caches

* fix: preserve customized AppImage desktop executables

Enhance entry refresh logic to preserve customized fields.

* test: cover custom and ambiguous AppImage executables
2026-10-17 21:14:41 -06:00
Brandon ThomasandClaude Opus 5.5 cbae640688 Add FigCraft; release 0.4.1 (#313)
* Add FigCraft to the launcher

FigCraft (storytold/figcraft): interface design and prototyping, the
thirteenth Craft App and the sixth in the New group.

- Catalog row (brand colour #02da96 from FigCraft's icon README), details
  page (no pictures yet), Linux desktop categories, icon tables, tagline
  in every catalog, xtask local mirror list.
- Icon copied unmodified from FigCraft's repo; ATTRIBUTION.md row.
- The Windows installer art fits five rows of icons.
- Test that a companion figcraft-server tarball is never picked as the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Release 0.4.1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:28:29 -04:00
Nezuko-Chan 41ded15851 Fallback apps to install from release tarballs when no usable Flatpak spawn is available (#87) 2026-10-12 01:54:08 -04:00
Brandon ThomasandClaude Opus 5.5 b66486df82 Release 0.3.1: Linux riscv64 packages again under the shared release workflow (#170)
craft-common-actions calls `package.sh --formats deb,rpm,tar`, but package.sh
split formats on spaces only, so the riscv64 job built the binary, matched no
format, wrote nothing to dist/release and failed the 0.3.0 release at upload.
package.sh now accepts commas or spaces and rejects unknown format names.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 16:28:01 -04:00
e8614afa3f Add a Linux riscv64 release build (deb, rpm, tar.gz) (#102)
* Add Linux riscv64 release build and switch runners to Ubuntu 26.04

- release.yml: new linux-riscv64 job cross-compiled on ubuntu-26.04 against
  ports.ubuntu.com riscv64 libs, tar.gz only, artcraft-launcher --version
  smoke-tested under QEMU. Updated flatpak runner matrix to ubuntu-26.04.
  Draft-release job now requires linux-riscv64 and checks the tarball.
- packaging/linux/package.sh: CROSS_ARCH / CROSS_TARGET / CROSS_COMPILE / EMULATOR support.
- platform.rs: add Arch::Riscv64 variant, map linux-riscv64 token, and prioritize
  tarball format for riscv64 on Linux.
- web.rs: detect riscv64 architecture in visitor user agent.
- README and AGENTS.md: document the riscv64 tarball.

* linux: build deb and rpm packages for riscv64

* ci: configure actionlint to recognize ubuntu-26.04 runner labels

* Keep riscv64 and Flatpak release jobs on Ubuntu 24.04

24.04 is what PhotoCraft's linux-riscv64 job uses, so the riscv64 binaries
need glibc 2.39 (as the README says) rather than 26.04's newer glibc, and
the release pipeline keeps runner images it has already proven on. Drop the
actionlint label config that 26.04 needed, revert the default_kinds and
download_kinds matches to match on the OS alone, simplify the riscv UA check,
and rustfmt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 02:15:28 -04:00
Brandon ThomasandClaude Opus 5.5 ec69f0be2c ArtCraft Launcher: install and update the Craft App Suite
A native Rust/egui launcher for the 12 Craft Apps (7 classic + 5 new).

- Grid (icon cards) or sortable table view, filters and search
- Status per app: available, installed and up to date, or update
  available with version and release date
- Installs where each OS keeps apps, from the official release packages:
  /Applications (DMG), Program Files (MSI), deb/rpm via the system
  package manager (Flatpak/AppImage fallback), /usr/local on FreeBSD
- Detects apps installed by hand; updates keep the installed format
- Every download verified against its published SHA-256; running apps
  are never replaced
- Tray/menu-bar mode, start at login, one notification per new version
- GitHub API with ETag cache, falling back to release pages when
  rate-limited; release source is pluggable for a future catalog API
- Web build lists latest releases with per-platform downloads
- Packaging and release workflows for macOS, Windows (x64/x86/arm64),
  Linux (x86_64/aarch64), FreeBSD and web

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:08:24 -04:00