implement create dmg for macOS 10.11 & above (#2252)
This commit is contained in:
parent
bbcfeaa361
commit
2973b30ad7
3 changed files with 82 additions and 19 deletions
62
.github/workflows/create_dmg.yml
vendored
Normal file
62
.github/workflows/create_dmg.yml
vendored
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
name: Create macOS DMG
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build ${{ matrix.arch }}
|
||||||
|
runs-on: macos-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
# This creates two parallel jobs
|
||||||
|
arch: [arm64, amd64]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
|
||||||
|
# 1. 安装指定版本的 Go (可选,但推荐)
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v6
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
|
||||||
|
# 2. 安装 pnpm
|
||||||
|
- name: Install pnpm
|
||||||
|
run: brew install pnpm
|
||||||
|
|
||||||
|
# 3. 运行你的 Makefile 编译二进制文件
|
||||||
|
- name: Build with Make
|
||||||
|
run: make build ARCH=${{ matrix.arch }} && make build-macos-app ARCH=${{ matrix.arch }}
|
||||||
|
|
||||||
|
# 4. 签名
|
||||||
|
- name: Ad-hoc Sign
|
||||||
|
run: codesign --force --deep --sign - "build/PicoClaw Launcher.app"
|
||||||
|
|
||||||
|
# 5. 安装打包工具
|
||||||
|
- name: Install create-dmg
|
||||||
|
run: brew install create-dmg
|
||||||
|
|
||||||
|
# 6. 执行打包命令
|
||||||
|
- name: Create DMG
|
||||||
|
run: |
|
||||||
|
mkdir -p dist
|
||||||
|
create-dmg \
|
||||||
|
--volname "PicoClaw Installer" \
|
||||||
|
--window-pos 200 120 \
|
||||||
|
--window-size 800 400 \
|
||||||
|
--icon-size 100 \
|
||||||
|
--icon "PicoClaw Launcher.app" 200 190 \
|
||||||
|
--hide-extension "PicoClaw Launcher.app" \
|
||||||
|
--app-drop-link 600 185 \
|
||||||
|
"dist/picoclaw-${{ matrix.arch }}.dmg" \
|
||||||
|
"build/PicoClaw Launcher.app"
|
||||||
|
|
||||||
|
# 6. 上传文件到 GitHub Artifacts (供你下载)
|
||||||
|
- name: Upload DMG
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: macos-dmg-${{ matrix.arch }}
|
||||||
|
path: dist/*.dmg
|
||||||
17
Makefile
17
Makefile
|
|
@ -93,13 +93,13 @@ ifeq ($(UNAME_S),Linux)
|
||||||
endif
|
endif
|
||||||
else ifeq ($(UNAME_S),Darwin)
|
else ifeq ($(UNAME_S),Darwin)
|
||||||
PLATFORM=darwin
|
PLATFORM=darwin
|
||||||
WEB_GO=CGO_ENABLED=1 go
|
WEB_GO=CGO_LDFLAGS="-mmacosx-version-min=10.11" CGO_CFLAGS="-mmacosx-version-min=10.11" CGO_ENABLED=1 go
|
||||||
ifeq ($(UNAME_M),x86_64)
|
ifeq ($(UNAME_M),x86_64)
|
||||||
ARCH=amd64
|
ARCH?=amd64
|
||||||
else ifeq ($(UNAME_M),arm64)
|
else ifeq ($(UNAME_M),arm64)
|
||||||
ARCH=arm64
|
ARCH?=arm64
|
||||||
else
|
else
|
||||||
ARCH=$(UNAME_M)
|
ARCH?=$(UNAME_M)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
PLATFORM=$(UNAME_S)
|
PLATFORM=$(UNAME_S)
|
||||||
|
|
@ -122,7 +122,7 @@ generate:
|
||||||
build: generate
|
build: generate
|
||||||
@echo "Building $(BINARY_NAME) for $(PLATFORM)/$(ARCH)..."
|
@echo "Building $(BINARY_NAME) for $(PLATFORM)/$(ARCH)..."
|
||||||
@mkdir -p $(BUILD_DIR)
|
@mkdir -p $(BUILD_DIR)
|
||||||
@$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BINARY_PATH) ./$(CMD_DIR)
|
@GOARCH=${ARCH} $(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BINARY_PATH) ./$(CMD_DIR)
|
||||||
@echo "Build complete: $(BINARY_PATH)"
|
@echo "Build complete: $(BINARY_PATH)"
|
||||||
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
||||||
|
|
||||||
|
|
@ -130,7 +130,7 @@ build: generate
|
||||||
build-launcher:
|
build-launcher:
|
||||||
@echo "Building picoclaw-launcher for $(PLATFORM)/$(ARCH)..."
|
@echo "Building picoclaw-launcher for $(PLATFORM)/$(ARCH)..."
|
||||||
@mkdir -p $(BUILD_DIR)
|
@mkdir -p $(BUILD_DIR)
|
||||||
@$(MAKE) -C web build \
|
@GOARCH=${ARCH} $(MAKE) -C web build \
|
||||||
OUTPUT="$(CURDIR)/$(BUILD_DIR)/picoclaw-launcher-$(PLATFORM)-$(ARCH)" \
|
OUTPUT="$(CURDIR)/$(BUILD_DIR)/picoclaw-launcher-$(PLATFORM)-$(ARCH)" \
|
||||||
WEB_GO='$(WEB_GO)' \
|
WEB_GO='$(WEB_GO)' \
|
||||||
GO_BUILD_TAGS='$(GO_BUILD_TAGS)' \
|
GO_BUILD_TAGS='$(GO_BUILD_TAGS)' \
|
||||||
|
|
@ -324,14 +324,13 @@ docker-clean:
|
||||||
|
|
||||||
|
|
||||||
## build-macos-app: Build PicoClaw macOS .app bundle (no terminal window)
|
## build-macos-app: Build PicoClaw macOS .app bundle (no terminal window)
|
||||||
build-macos-app:
|
build-macos-app:build-launcher
|
||||||
@echo "Building macOS .app bundle..."
|
@echo "Building macOS .app bundle..."
|
||||||
@if [ "$(UNAME_S)" != "Darwin" ]; then \
|
@if [ "$(UNAME_S)" != "Darwin" ]; then \
|
||||||
echo "Error: This target is only available on macOS"; \
|
echo "Error: This target is only available on macOS"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
@cd web && $(MAKE) build && cd ..
|
@./scripts/build-macos-app.sh $(PLATFORM)-$(ARCH)
|
||||||
@./scripts/build-macos-app.sh $(BINARY_NAME)-$(PLATFORM)-$(ARCH)
|
|
||||||
@echo "macOS .app bundle created: $(BUILD_DIR)/PicoClaw.app"
|
@echo "macOS .app bundle created: $(BUILD_DIR)/PicoClaw.app"
|
||||||
|
|
||||||
## help: Show this help message
|
## help: Show this help message
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ if [ -z "$EXECUTABLE" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
LAUNCHER_EXECUTABLE="picoclaw-launcher-${EXECUTABLE}"
|
||||||
|
EXECUTABLE="picoclaw-${EXECUTABLE}"
|
||||||
echo "executable: $EXECUTABLE"
|
echo "executable: $EXECUTABLE"
|
||||||
|
|
||||||
APP_NAME="PicoClaw Launcher"
|
APP_NAME="PicoClaw Launcher"
|
||||||
|
|
@ -33,17 +35,17 @@ mkdir -p "$APP_RESOURCES"
|
||||||
|
|
||||||
# Copy executable
|
# Copy executable
|
||||||
echo "Copying executable..."
|
echo "Copying executable..."
|
||||||
if [ -f "./web/build/${APP_EXECUTABLE}" ]; then
|
if [ -f "./build/${LAUNCHER_EXECUTABLE}" ]; then
|
||||||
cp "./web/build/${APP_EXECUTABLE}" "${APP_MACOS}/"
|
cp "./build/${LAUNCHER_EXECUTABLE}" "${APP_MACOS}/${APP_EXECUTABLE}"
|
||||||
else
|
else
|
||||||
echo "Error: ./web/build/${APP_EXECUTABLE} not found. Please build the web backend first."
|
echo "Error: ./build/${LAUNCHER_EXECUTABLE} not found. Please build the web backend first."
|
||||||
echo "Run: make build in web dir"
|
echo "Run: make build-launcher"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ -f "./build/picoclaw" ]; then
|
if [ -f "./build/${EXECUTABLE}" ]; then
|
||||||
cp "./build/picoclaw" "${APP_MACOS}/"
|
cp "./build/${EXECUTABLE}" "${APP_MACOS}/picoclaw"
|
||||||
else
|
else
|
||||||
echo "Error: ./build/picoclaw not found. Please build the main file first."
|
echo "Error: ./build/${EXECUTABLE} not found. Please build the main file first."
|
||||||
echo "Run: make build"
|
echo "Run: make build"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
@ -76,10 +78,10 @@ cat > "${APP_CONTENTS}/Info.plist" << 'EOF'
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>LSRequiresCarbon</key>
|
|
||||||
<true/>
|
|
||||||
<key>LSUIElement</key>
|
<key>LSUIElement</key>
|
||||||
<string>1</string>
|
<true/>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>10.11</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
EOF
|
EOF
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue