forked from 1b-agent/opencadstudio-upstream
Merge pull request #1286 from felixriestra/upstream-pr/dmg-applications-shortcut
This commit is contained in:
commit
b6ad2eba26
1 file changed
+62
-2
@@ -112,13 +112,73 @@ codesign --verify --strict --verbose=2 "$APP"
|
||||
echo "==> dmg"
|
||||
DMG="$DIST/OpenCADStudio-v$VERSION-macos-arm64.dmg"
|
||||
rm -f "$DMG"
|
||||
|
||||
# Stage the .app next to a symlink to /Applications so the DMG opens onto
|
||||
# the familiar "drag the icon onto Applications" installer layout, rather
|
||||
# than dropping just the bare .app into the user's Downloads-mounted volume
|
||||
# with no indication of where it's supposed to go (#769).
|
||||
STAGING="$DIST/dmg-staging"
|
||||
rm -rf "$STAGING"
|
||||
mkdir -p "$STAGING"
|
||||
cp -R "$APP" "$STAGING/"
|
||||
ln -s /Applications "$STAGING/Applications"
|
||||
|
||||
# Build read-write first so Finder can save the window's icon layout, then
|
||||
# convert to the compressed read-only image the CI job's own DMG step
|
||||
# already produces — same two-stage approach that layout customization
|
||||
# always needs, since a UDZO image can't be mounted for editing afterward.
|
||||
RW_DMG="$DIST/OpenCADStudio-rw.dmg"
|
||||
rm -f "$RW_DMG"
|
||||
for i in 1 2 3 4 5; do
|
||||
if hdiutil create -volname "Open CAD Studio" -srcfolder "$APP" -ov -format UDZO "$DMG"; then
|
||||
if hdiutil create -volname "Open CAD Studio" -srcfolder "$STAGING" -ov -format UDRW -fs HFS+ "$RW_DMG"; then
|
||||
break
|
||||
fi
|
||||
echo "hdiutil failed (attempt $i), retrying..." >&2
|
||||
echo "hdiutil create (rw) failed (attempt $i), retrying..." >&2
|
||||
sleep 3
|
||||
done
|
||||
[ -f "$RW_DMG" ] || { echo "hdiutil create (rw) failed permanently" >&2; exit 1; }
|
||||
|
||||
MOUNT_DIR="$(mktemp -d /tmp/ocs-dmg-mount.XXXXXX)"
|
||||
hdiutil attach "$RW_DMG" -mountpoint "$MOUNT_DIR" -quiet
|
||||
# Finder's own volume list can lag a moment behind `hdiutil attach`
|
||||
# returning, and "container window of <alias>" isn't a valid reference the
|
||||
# way "container window of disk <name>" is — so poll by name (up to 15s)
|
||||
# before touching it, rather than a fixed sleep or a path-based reference.
|
||||
osascript <<APPLESCRIPT || echo "DMG layout script failed (non-fatal, keeping default Finder view)" >&2
|
||||
tell application "Finder"
|
||||
repeat 30 times
|
||||
if (exists disk "Open CAD Studio") then exit repeat
|
||||
delay 0.5
|
||||
end repeat
|
||||
tell disk "Open CAD Studio"
|
||||
open
|
||||
set current view of container window to icon view
|
||||
set toolbar visible of container window to false
|
||||
set statusbar visible of container window to false
|
||||
set the bounds of container window to {200, 120, 760, 480}
|
||||
set viewOptions to the icon view options of container window
|
||||
set arrangement of viewOptions to not arranged
|
||||
set icon size of viewOptions to 96
|
||||
set position of item "OpenCADStudio.app" of container window to {140, 180}
|
||||
set position of item "Applications" of container window to {420, 180}
|
||||
close
|
||||
open
|
||||
update without registering applications
|
||||
delay 1
|
||||
end tell
|
||||
end tell
|
||||
APPLESCRIPT
|
||||
hdiutil detach "$MOUNT_DIR" -quiet
|
||||
|
||||
for i in 1 2 3 4 5; do
|
||||
if hdiutil convert "$RW_DMG" -format UDZO -ov -o "$DMG"; then
|
||||
break
|
||||
fi
|
||||
echo "hdiutil convert failed (attempt $i), retrying..." >&2
|
||||
sleep 3
|
||||
done
|
||||
rm -f "$RW_DMG"
|
||||
rm -rf "$STAGING"
|
||||
[ -f "$DMG" ] || { echo "hdiutil failed permanently" >&2; exit 1; }
|
||||
|
||||
if [ -n "${NOTARY_PROFILE:-}" ] && [ "$DEVELOPER_ID" != "-" ]; then
|
||||
|
||||
Reference in new issue
Block a user