Release under the SolidCraft name: binaries, assets and installers (#383)
* Release under the SolidCraft name: binaries, assets and installers The desktop binary is now `solidcraft` and the CLI `solidcraft-cli` (the two app packages are renamed; their folders move with the rest of the rename later). Every release asset is named solidcraft-<ver>-… / SolidCraft-<ver>-windows-x64.exe, and the installers show the SolidCraft product name. Kept so existing installs keep updating (docs/compatibility.md): - `solvecraft-cli` alias binary in every package, forwarding to solidcraft-cli with a deprecation note on stderr (tests/legacy_alias.rs). - Linux app ID ai.storyteller.solvecraft (Flatpak ID, desktop entry, Wayland app_id). - MSI UpgradeCode, so the MSI upgrades in place. - deb Replaces/Conflicts/Provides and rpm Obsoletes/Provides solvecraft. - An old-named .zsync copy so earlier AppImages find updates; a legacy .flatpakrepo copy. - .solvecraft file associations; SOLVECRAFT_* fallbacks in the packaging scripts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT * MSI: register the legacy .solvecraft extension without a duplicate open verb Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f06b76e14f
commit
6090e89b3f
50 files changed
+478
-317
No files matched your search
@@ -13,7 +13,7 @@
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>SolidCraft</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>ai.storyteller.solvecraft</string>
|
||||
<string>ai.storyteller.solidcraft</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@@ -24,7 +24,7 @@
|
||||
<string>@SHORT_VERSION@</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@SHORT_VERSION@</string>
|
||||
<key>SolveCraftVersion</key>
|
||||
<key>SolidCraftVersion</key>
|
||||
<string>@VERSION@</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>SolidCraft</string>
|
||||
@@ -43,7 +43,8 @@
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>SolidCraft design</string>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array><string>solvecraft</string></array>
|
||||
<!-- solvecraft: designs saved before the rename (compatibility shim, docs/compatibility.md). -->
|
||||
<array><string>solidcraft</string><string>solvecraft</string></array>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
|
||||
@@ -2,16 +2,13 @@ Install SolidCraft
|
||||
|
||||
Drag SolidCraft.app onto Applications.
|
||||
|
||||
Updating an older SolveCraft.app installation
|
||||
Updating an older installation
|
||||
|
||||
1. Quit the app.
|
||||
2. In Applications, rename the existing SolveCraft.app to SolidCraft.app.
|
||||
3. Drag SolidCraft.app from this disk image onto Applications and choose Replace.
|
||||
2. Drag SolidCraft.app from this disk image onto Applications and choose Replace.
|
||||
|
||||
If both names are already present, keep SolidCraft.app and move the old
|
||||
SolveCraft.app to the Trash. The disk image does not remove old installations.
|
||||
If your Dock shortcut still uses the old name, remove it from the Dock, then
|
||||
open SolidCraft.app from Applications and choose Options > Keep in Dock.
|
||||
Some earlier releases were installed as SolveCraft.app. Move that one to the Trash
|
||||
once SolidCraft.app is in Applications, and replace any Dock shortcut with the
|
||||
old name (open SolidCraft.app, then choose Options > Keep in Dock).
|
||||
|
||||
Your designs and settings keep their existing locations. The bundle identifier
|
||||
remains ai.storyteller.solvecraft; saved designs still use .solvecraft.
|
||||
Your designs and settings are not affected by the update.
|
||||
+21
-15
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build and package SolidCraft for macOS:
|
||||
#
|
||||
# $DIST/solvecraft-<version>-macos-<arch>.dmg SolidCraft.app on a drag-to-Applications DMG
|
||||
# $DIST/solvecraft-cli-<version>-macos-<arch>.zip the headless CLI with the licence files
|
||||
# $DIST/solidcraft-<version>-macos-<arch>.dmg SolidCraft.app on a drag-to-Applications DMG
|
||||
# $DIST/solidcraft-cli-<version>-macos-<arch>.zip the headless CLI (and its solvecraft-cli
|
||||
# compatibility alias) with the licence files
|
||||
#
|
||||
# Usage: packaging/macos/package.sh [--arch universal|aarch64|x86_64] [--skip-build]
|
||||
#
|
||||
@@ -12,6 +13,9 @@ set -euo pipefail
|
||||
# shellcheck source=../env.sh
|
||||
. "$(dirname "${BASH_SOURCE[0]}")/../env.sh"
|
||||
HERE="$ROOT/packaging/macos"
|
||||
# macOS has no Flatpak-style update channel keyed by this id, so it follows the new name
|
||||
# (the Linux reverse-DNS APP_ID stays as a compatibility shim; docs/compatibility.md).
|
||||
MACOS_BUNDLE_ID=ai.storyteller.solidcraft
|
||||
|
||||
ARCH=universal
|
||||
SKIP_BUILD=0
|
||||
@@ -35,19 +39,19 @@ export MACOSX_DEPLOYMENT_TARGET=11.0
|
||||
SHORT_VERSION="${VERSION%%-*}"
|
||||
WORK="$CARGO_TARGET_DIR/macos-package"
|
||||
APP="$WORK/SolidCraft.app"
|
||||
DMG="$DIST/solvecraft-$VERSION-macos-$ARCH.dmg"
|
||||
CLI_ZIP="$DIST/solvecraft-cli-$VERSION-macos-$ARCH.zip"
|
||||
DMG="$DIST/solidcraft-$VERSION-macos-$ARCH.dmg"
|
||||
CLI_ZIP="$DIST/solidcraft-cli-$VERSION-macos-$ARCH.zip"
|
||||
|
||||
echo "==> SolidCraft $VERSION for macOS ($ARCH)"
|
||||
if [ "$SKIP_BUILD" = 0 ]; then
|
||||
args=()
|
||||
for t in "${TARGETS[@]}"; do args+=(--target "$t"); done
|
||||
(cd "$ROOT" && cargo build --release --locked -p solvecraft -p solvecraft-cli "${args[@]}")
|
||||
(cd "$ROOT" && cargo build --release --locked -p solidcraft -p solidcraft-cli "${args[@]}")
|
||||
fi
|
||||
|
||||
rm -rf "$WORK"
|
||||
mkdir -p "$WORK/bin"
|
||||
for bin in solvecraft solvecraft-cli; do
|
||||
for bin in solidcraft solidcraft-cli solvecraft-cli; do
|
||||
inputs=()
|
||||
for t in "${TARGETS[@]}"; do inputs+=("$CARGO_TARGET_DIR/$t/release/$bin"); done
|
||||
lipo -create -output "$WORK/bin/$bin" "${inputs[@]}"
|
||||
@@ -57,13 +61,13 @@ done
|
||||
# ---- SolidCraft.app ----------------------------------------------------------------------------
|
||||
echo "==> assembling $APP"
|
||||
mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources"
|
||||
cp "$WORK/bin/solvecraft" "$APP/Contents/MacOS/SolidCraft"
|
||||
cp "$WORK/bin/solidcraft" "$APP/Contents/MacOS/SolidCraft"
|
||||
# The icon, drawn by the CLI (no image files are committed).
|
||||
SET="$WORK/SolidCraft.iconset"
|
||||
mkdir -p "$SET"
|
||||
for s in 16 32 128 256 512; do
|
||||
"$WORK/bin/solvecraft-cli" icon --size "$s" --out "$SET/icon_${s}x${s}.png" >/dev/null
|
||||
"$WORK/bin/solvecraft-cli" icon --size $((s * 2)) --out "$SET/icon_${s}x${s}@2x.png" >/dev/null
|
||||
"$WORK/bin/solidcraft-cli" icon --size "$s" --out "$SET/icon_${s}x${s}.png" >/dev/null
|
||||
"$WORK/bin/solidcraft-cli" icon --size $((s * 2)) --out "$SET/icon_${s}x${s}@2x.png" >/dev/null
|
||||
done
|
||||
iconutil -c icns -o "$APP/Contents/Resources/SolidCraft.icns" "$SET"
|
||||
mkdir -p "$APP/Contents/Resources/Licenses"
|
||||
@@ -95,12 +99,11 @@ hdiutil attach -readonly -nobrowse -mountpoint "$MNT" "$DMG"
|
||||
ls -la "$MNT" "$MNT/SolidCraft.app/Contents" "$MNT/SolidCraft.app/Contents/MacOS" "$MNT/SolidCraft.app/Contents/Resources"
|
||||
test -L "$MNT/Applications" && test "$(readlink "$MNT/Applications")" = /Applications
|
||||
plutil -lint "$MNT/SolidCraft.app/Contents/Info.plist"
|
||||
# Check the names Finder/LaunchServices actually use, as well as compatibility identity.
|
||||
# Check the names Finder/LaunchServices actually use, and the bundle identity.
|
||||
for key in CFBundleName CFBundleDisplayName CFBundleExecutable CFBundleIconFile; do
|
||||
test "$(/usr/libexec/PlistBuddy -c "Print :$key" "$MNT/SolidCraft.app/Contents/Info.plist")" = SolidCraft
|
||||
done
|
||||
test "$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$MNT/SolidCraft.app/Contents/Info.plist")" = "$APP_ID"
|
||||
test ! -e "$MNT/SolveCraft.app"
|
||||
test "$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$MNT/SolidCraft.app/Contents/Info.plist")" = "$MACOS_BUNDLE_ID"
|
||||
test -s "$MNT/SolidCraft.app/Contents/Resources/SolidCraft.icns"
|
||||
cmp "$HERE/README.txt" "$MNT/README.txt"
|
||||
case "$ARCH" in universal) WANT=(arm64 x86_64) ;; aarch64) WANT=(arm64) ;; *) WANT=(x86_64) ;; esac
|
||||
@@ -115,14 +118,17 @@ hdiutil detach "$MNT"
|
||||
|
||||
# ---- CLI ---------------------------------------------------------------------------------------
|
||||
echo "==> building $CLI_ZIP"
|
||||
CLI_DIR="$WORK/solvecraft-cli-$VERSION-macos-$ARCH"
|
||||
CLI_DIR="$WORK/solidcraft-cli-$VERSION-macos-$ARCH"
|
||||
mkdir -p "$CLI_DIR"
|
||||
cp "$WORK/bin/solidcraft-cli" "$CLI_DIR/"
|
||||
codesign --force --sign - --timestamp=none --identifier "$MACOS_BUNDLE_ID-cli" "$CLI_DIR/solidcraft-cli"
|
||||
# Compatibility shim (docs/compatibility.md): the old CLI name forwards to solidcraft-cli.
|
||||
cp "$WORK/bin/solvecraft-cli" "$CLI_DIR/"
|
||||
codesign --force --sign - --timestamp=none --identifier ai.storyteller.solvecraft-cli "$CLI_DIR/solvecraft-cli"
|
||||
codesign --force --sign - --timestamp=none --identifier "$MACOS_BUNDLE_ID-cli-alias" "$CLI_DIR/solvecraft-cli"
|
||||
copy_docs "$CLI_DIR"
|
||||
rm -f "$CLI_ZIP"
|
||||
ditto -c -k --keepParent "$CLI_DIR" "$CLI_ZIP"
|
||||
|
||||
"$WORK/bin/solvecraft-cli" --version
|
||||
"$WORK/bin/solidcraft-cli" --version
|
||||
echo "==> done"
|
||||
ls -lh "$DMG" "$CLI_ZIP"
|
||||
Reference in new issue
Block a user