103 lines
3.7 KiB
YAML
103 lines
3.7 KiB
YAML
name: Build macOS Universal2 Application
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
release:
|
|
types: [created]
|
|
|
|
jobs:
|
|
build-macos:
|
|
# 更改第 1 处:指定使用 macOS 14 (Apple Silicon, arm64) 运行环境
|
|
# 这是构建 universal2 应用的前提
|
|
runs-on: macos-14
|
|
|
|
steps:
|
|
# 第 1 步: 检出代码
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
# 第 2 步: 设置 Python 环境
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
# 第 3 步: 安装 uv
|
|
- name: Install uv
|
|
run: |
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
|
|
|
# 第 4 步: 安装依赖
|
|
- name: Install dependencies with uv
|
|
run: uv sync
|
|
|
|
# 第 5 步: 安装 UPX (macOS 版本)
|
|
- name: Install UPX
|
|
run: |
|
|
brew install upx
|
|
|
|
# 第 6 步: 运行 PyInstaller (macOS universal2 版本)
|
|
- name: Build the application with PyInstaller for universal2
|
|
run: |
|
|
uv run pyinstaller lite_mac.spec --noconfirm
|
|
|
|
# 第 7 步: 获取应用版本号
|
|
- name: Get application version
|
|
id: get_version
|
|
run: |
|
|
VERSION=$(python -c "import docutranslate; print(docutranslate.__version__)")
|
|
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
|
|
# 第 8 步: 创建 macOS 应用包结构
|
|
- name: Create macOS app bundle structure
|
|
run: |
|
|
mkdir -p dist/DocuTranslate.app/Contents/MacOS
|
|
mkdir -p dist/DocuTranslate.app/Contents/Resources
|
|
|
|
# 移动可执行文件
|
|
# PyInstaller 生成的 universal2 可执行文件名与 spec 文件中的 name 字段一致
|
|
# 假设 spec 文件中的 name 是 'DocuTranslate',这里可以直接使用
|
|
mv dist/DocuTranslate dist/DocuTranslate.app/Contents/MacOS/DocuTranslate
|
|
chmod +x dist/DocuTranslate.app/Contents/MacOS/DocuTranslate
|
|
|
|
# 复制图标文件
|
|
cp DocuTranslate.icns dist/DocuTranslate.app/Contents/Resources/
|
|
|
|
# 创建 Info.plist
|
|
cat > dist/DocuTranslate.app/Contents/Info.plist << EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>CFBundleExecutable</key>
|
|
<string>DocuTranslate</string>
|
|
<key>CFBundleIconFile</key>
|
|
<string>DocuTranslate.icns</string>
|
|
<key>CFBundleIdentifier</key>
|
|
<string>com.yourcompany.DocuTranslate</string>
|
|
<key>CFBundleName</key>
|
|
<string>DocuTranslate</string>
|
|
<key>CFBundleVersion</key>
|
|
<string>${{ github.run_number }}</string>
|
|
<key>CFBundleShortVersionString</key>
|
|
<string>${{ env.VERSION }}</string>
|
|
<key>NSHighResolutionCapable</key>
|
|
<true/>
|
|
</dict>
|
|
</plist>
|
|
EOF
|
|
shell: bash
|
|
|
|
# 第 9 步: 将 .app 打包成 .dmg 磁盘映像(带版本号)
|
|
- name: Create DMG Disk Image with version
|
|
run: |
|
|
hdiutil create -volname "DocuTranslate Installer" -srcfolder dist/DocuTranslate.app -ov -format UDZO "dist/DocuTranslate-${{ env.VERSION }}-macOS-universal.dmg"
|
|
|
|
# 第 10 步: 上传 .dmg 文件作为构建产物
|
|
- name: Upload macOS DMG
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: DocuTranslate-macOS-universal
|
|
path: dist/DocuTranslate-${{ env.VERSION }}-macOS-universal.dmg |