274 lines
8.6 KiB
YAML
274 lines
8.6 KiB
YAML
|
|
version: "3"
|
|||
|
|
|
|||
|
|
includes:
|
|||
|
|
common: ../Taskfile.yml
|
|||
|
|
|
|||
|
|
tasks:
|
|||
|
|
build:
|
|||
|
|
summary: 构建 macOS 程序
|
|||
|
|
internal: true
|
|||
|
|
cmds:
|
|||
|
|
- task: build:native
|
|||
|
|
vars:
|
|||
|
|
ARCH:
|
|||
|
|
ref: .ARCH
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
BUILD_FLAGS:
|
|||
|
|
ref: .BUILD_FLAGS
|
|||
|
|
EXTRA_TAGS:
|
|||
|
|
ref: .EXTRA_TAGS
|
|||
|
|
DEV:
|
|||
|
|
ref: .DEV
|
|||
|
|
SCAN:
|
|||
|
|
ref: .SCAN
|
|||
|
|
|
|||
|
|
build:native:
|
|||
|
|
summary: 使用本机构建 macOS 程序
|
|||
|
|
internal: true
|
|||
|
|
deps:
|
|||
|
|
- task: common:go:mod:tidy
|
|||
|
|
- task: common:build:frontend
|
|||
|
|
vars:
|
|||
|
|
BUILD_FLAGS:
|
|||
|
|
ref: .BUILD_FLAGS
|
|||
|
|
DEV:
|
|||
|
|
ref: .DEV
|
|||
|
|
SCAN:
|
|||
|
|
ref: .SCAN
|
|||
|
|
- task: common:generate:icons
|
|||
|
|
cmds:
|
|||
|
|
- go build {{.BUILD_FLAGS}} -o {{.OUTPUT}}
|
|||
|
|
vars:
|
|||
|
|
BUILD_FLAGS: '{{if eq .DEV "true"}}{{if .EXTRA_TAGS}}-tags {{.EXTRA_TAGS}} {{end}}-buildvcs=false -gcflags=all="-l" -ldflags="-X cursor/internal/buildinfo.Version={{.APP_VERSION}}"{{else}}-tags production{{if .EXTRA_TAGS}},{{.EXTRA_TAGS}}{{end}} -trimpath -buildvcs=false -ldflags="-w -s -X cursor/internal/buildinfo.Version={{.APP_VERSION}}"{{end}}'
|
|||
|
|
BINARY_NAME: '{{.BINARY_NAME | default .APP_NAME}}'
|
|||
|
|
DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.BINARY_NAME}}'
|
|||
|
|
OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}'
|
|||
|
|
env:
|
|||
|
|
GOOS: darwin
|
|||
|
|
CGO_ENABLED: 1
|
|||
|
|
GOARCH: '{{.ARCH | default ARCH}}'
|
|||
|
|
CGO_CFLAGS: "-mmacosx-version-min=10.15"
|
|||
|
|
CGO_LDFLAGS: "-mmacosx-version-min=10.15"
|
|||
|
|
MACOSX_DEPLOYMENT_TARGET: "10.15"
|
|||
|
|
|
|||
|
|
build:universal:
|
|||
|
|
summary: 构建 macOS 通用包(amd64 + arm64)
|
|||
|
|
internal: true
|
|||
|
|
deps:
|
|||
|
|
- task: build
|
|||
|
|
vars:
|
|||
|
|
ARCH: amd64
|
|||
|
|
BINARY_NAME: "{{.APP_NAME}}-amd64"
|
|||
|
|
OUTPUT: "{{.BIN_DIR}}/{{.APP_NAME}}-amd64"
|
|||
|
|
- task: build
|
|||
|
|
vars:
|
|||
|
|
ARCH: arm64
|
|||
|
|
BINARY_NAME: "{{.APP_NAME}}-arm64"
|
|||
|
|
OUTPUT: "{{.BIN_DIR}}/{{.APP_NAME}}-arm64"
|
|||
|
|
cmds:
|
|||
|
|
- lipo -create -output "{{.BIN_DIR}}/{{.APP_NAME}}" "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" "{{.BIN_DIR}}/{{.APP_NAME}}-arm64"
|
|||
|
|
- rm -f "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" "{{.BIN_DIR}}/{{.APP_NAME}}-arm64"
|
|||
|
|
|
|||
|
|
package:
|
|||
|
|
summary: 打包 macOS .app(可通过 APP_BUNDLE 指定输出包名)
|
|||
|
|
internal: true
|
|||
|
|
cmds:
|
|||
|
|
- task: build
|
|||
|
|
vars:
|
|||
|
|
ARCH:
|
|||
|
|
ref: .ARCH
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
BUILD_FLAGS:
|
|||
|
|
ref: .BUILD_FLAGS
|
|||
|
|
EXTRA_TAGS:
|
|||
|
|
ref: .EXTRA_TAGS
|
|||
|
|
DEV:
|
|||
|
|
ref: .DEV
|
|||
|
|
SCAN:
|
|||
|
|
ref: .SCAN
|
|||
|
|
- task: create:app:bundle
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
|
|||
|
|
package:dmg:
|
|||
|
|
summary: 打包 macOS DMG(可通过 APP_BUNDLE/DMG_NAME 指定输出文件名)
|
|||
|
|
internal: true
|
|||
|
|
cmds:
|
|||
|
|
- task: package
|
|||
|
|
vars:
|
|||
|
|
ARCH:
|
|||
|
|
ref: .ARCH
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
BUILD_FLAGS:
|
|||
|
|
ref: .BUILD_FLAGS
|
|||
|
|
EXTRA_TAGS:
|
|||
|
|
ref: .EXTRA_TAGS
|
|||
|
|
DEV:
|
|||
|
|
ref: .DEV
|
|||
|
|
SCAN:
|
|||
|
|
ref: .SCAN
|
|||
|
|
- task: create:dmg
|
|||
|
|
vars:
|
|||
|
|
ARCH:
|
|||
|
|
ref: .ARCH
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
DMG_NAME:
|
|||
|
|
ref: .DMG_NAME
|
|||
|
|
- task: cleanup:package:artifacts
|
|||
|
|
vars:
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
|
|||
|
|
package:archive:
|
|||
|
|
summary: 打包 macOS updater 归档(.tar.gz)
|
|||
|
|
internal: true
|
|||
|
|
cmds:
|
|||
|
|
- task: package
|
|||
|
|
vars:
|
|||
|
|
ARCH:
|
|||
|
|
ref: .ARCH
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
BUILD_FLAGS:
|
|||
|
|
ref: .BUILD_FLAGS
|
|||
|
|
EXTRA_TAGS:
|
|||
|
|
ref: .EXTRA_TAGS
|
|||
|
|
DEV:
|
|||
|
|
ref: .DEV
|
|||
|
|
SCAN:
|
|||
|
|
ref: .SCAN
|
|||
|
|
- task: create:archive
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
ARCHIVE_PATH:
|
|||
|
|
ref: .ARCHIVE_PATH
|
|||
|
|
- task: cleanup:package:artifacts
|
|||
|
|
vars:
|
|||
|
|
OUTPUT:
|
|||
|
|
ref: .OUTPUT
|
|||
|
|
BINARY_NAME:
|
|||
|
|
ref: .BINARY_NAME
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
|
|||
|
|
package:universal:
|
|||
|
|
summary: 打包 macOS 通用 .app
|
|||
|
|
internal: true
|
|||
|
|
cmds:
|
|||
|
|
- task: build:universal
|
|||
|
|
- task: create:app:bundle
|
|||
|
|
|
|||
|
|
create:app:bundle:
|
|||
|
|
summary: 生成 .app 包
|
|||
|
|
internal: true
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE: '{{.APP_BUNDLE | default (printf "%s.app" .APP_NAME)}}'
|
|||
|
|
BINARY_NAME: '{{.BINARY_NAME | default .APP_NAME}}'
|
|||
|
|
BINARY_PATH: '{{.OUTPUT | default (printf "%s/%s" .BIN_DIR .BINARY_NAME)}}'
|
|||
|
|
EXECUTABLE_NAME: '{{.EXECUTABLE_NAME | default .APP_NAME}}'
|
|||
|
|
cmds:
|
|||
|
|
- rm -rf "{{.BIN_DIR}}/{{.APP_BUNDLE}}"
|
|||
|
|
- mkdir -p "{{.BIN_DIR}}/{{.APP_BUNDLE}}/Contents/MacOS"
|
|||
|
|
- mkdir -p "{{.BIN_DIR}}/{{.APP_BUNDLE}}/Contents/Resources"
|
|||
|
|
- cp build/darwin/icons.icns "{{.BIN_DIR}}/{{.APP_BUNDLE}}/Contents/Resources"
|
|||
|
|
- cp "{{.BINARY_PATH}}" "{{.BIN_DIR}}/{{.APP_BUNDLE}}/Contents/MacOS/{{.EXECUTABLE_NAME}}"
|
|||
|
|
- cp build/darwin/Info.plist "{{.BIN_DIR}}/{{.APP_BUNDLE}}/Contents"
|
|||
|
|
- task: codesign:adhoc
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE:
|
|||
|
|
ref: .APP_BUNDLE
|
|||
|
|
|
|||
|
|
codesign:adhoc:
|
|||
|
|
summary: 使用临时签名(开发测试)
|
|||
|
|
internal: true
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE: '{{.APP_BUNDLE | default (printf "%s.app" .APP_NAME)}}'
|
|||
|
|
cmds:
|
|||
|
|
- codesign --force --deep --sign - "{{.BIN_DIR}}/{{.APP_BUNDLE}}"
|
|||
|
|
|
|||
|
|
create:dmg:
|
|||
|
|
summary: 生成 macOS DMG 包(优先使用 create-dmg,不存在时回退 hdiutil)
|
|||
|
|
internal: true
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE: '{{.APP_BUNDLE | default (printf "%s.app" .APP_NAME)}}'
|
|||
|
|
DMG_NAME: '{{.DMG_NAME | default (printf "%s.dmg" .APP_NAME)}}'
|
|||
|
|
STAGING_DIR: '{{.BIN_DIR}}/.dmg-{{.ARCH | default ARCH}}'
|
|||
|
|
cmds:
|
|||
|
|
- rm -rf "{{.STAGING_DIR}}"
|
|||
|
|
- mkdir -p "{{.STAGING_DIR}}"
|
|||
|
|
- cp -R "{{.BIN_DIR}}/{{.APP_BUNDLE}}" "{{.STAGING_DIR}}/{{.APP_NAME}}.app"
|
|||
|
|
- |
|
|||
|
|
if [ -f "build/dmg-extras/提示损坏?点我.command" ]; then
|
|||
|
|
cp "build/dmg-extras/提示损坏?点我.command" "{{.STAGING_DIR}}/提示损坏?点我.command"
|
|||
|
|
chmod +x "{{.STAGING_DIR}}/提示损坏?点我.command"
|
|||
|
|
fi
|
|||
|
|
- |
|
|||
|
|
if command -v create-dmg >/dev/null 2>&1; then
|
|||
|
|
rm -f "{{.BIN_DIR}}/{{.DMG_NAME}}"
|
|||
|
|
create-dmg --volname "{{.APP_NAME}}" --window-size 600 400 --icon-size 100 --app-drop-link 450 200 "{{.BIN_DIR}}/{{.DMG_NAME}}" "{{.STAGING_DIR}}"
|
|||
|
|
else
|
|||
|
|
hdiutil create -volname "{{.APP_NAME}}" -srcfolder "{{.STAGING_DIR}}" -ov -format UDZO "{{.BIN_DIR}}/{{.DMG_NAME}}"
|
|||
|
|
fi
|
|||
|
|
- rm -rf "{{.STAGING_DIR}}"
|
|||
|
|
|
|||
|
|
create:archive:
|
|||
|
|
summary: 生成 macOS updater tar.gz 归档
|
|||
|
|
internal: true
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE: '{{.APP_BUNDLE | default (printf "%s.app" .APP_NAME)}}'
|
|||
|
|
ARCHIVE_PATH: '{{.ARCHIVE_PATH | default (printf "%s/%s.tar.gz" .BIN_DIR .APP_NAME)}}'
|
|||
|
|
cmds:
|
|||
|
|
- rm -f "{{.ARCHIVE_PATH}}"
|
|||
|
|
- env LC_ALL=C tar -C "{{.BIN_DIR}}" -czf "{{.ARCHIVE_PATH}}" "{{.APP_BUNDLE}}"
|
|||
|
|
|
|||
|
|
cleanup:package:artifacts:
|
|||
|
|
summary: 清理打包中间产物
|
|||
|
|
internal: true
|
|||
|
|
vars:
|
|||
|
|
APP_BUNDLE: '{{.APP_BUNDLE | default (printf "%s.app" .APP_NAME)}}'
|
|||
|
|
BINARY_NAME: '{{.BINARY_NAME | default .APP_NAME}}'
|
|||
|
|
BINARY_PATH: '{{.OUTPUT | default (printf "%s/%s" .BIN_DIR .BINARY_NAME)}}'
|
|||
|
|
cmds:
|
|||
|
|
- rm -f "{{.BINARY_PATH}}"
|
|||
|
|
- rm -rf "{{.BIN_DIR}}/{{.APP_BUNDLE}}"
|
|||
|
|
|
|||
|
|
run:
|
|||
|
|
summary: 运行本地开发包
|
|||
|
|
vars:
|
|||
|
|
BINARY_NAME: '{{.BINARY_NAME | default .APP_NAME}}'
|
|||
|
|
EXECUTABLE_NAME: '{{.EXECUTABLE_NAME | default .APP_NAME}}'
|
|||
|
|
cmds:
|
|||
|
|
- mkdir -p "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS"
|
|||
|
|
- mkdir -p "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources"
|
|||
|
|
- cp build/darwin/icons.icns "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources"
|
|||
|
|
- cp "{{.BIN_DIR}}/{{.BINARY_NAME}}" "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS/{{.EXECUTABLE_NAME}}"
|
|||
|
|
- cp "build/darwin/Info.dev.plist" "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Info.plist"
|
|||
|
|
- codesign --force --deep --sign - "{{.BIN_DIR}}/{{.APP_NAME}}.dev.app"
|
|||
|
|
- '{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS/{{.EXECUTABLE_NAME}}'
|