Update workflow settings #28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Mousecape | |
| on: | |
| # 推送触发 | |
| push: | |
| branches: [main, develop, feature] | |
| paths-ignore: | |
| - '**.md' | |
| - 'docs/**' | |
| # PR 触发 | |
| pull_request: | |
| branches: [main, develop, feature] | |
| # 手动触发 | |
| workflow_dispatch: | |
| # 并发控制 | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| runs-on: macos-26 | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true | |
| strategy: | |
| matrix: | |
| configuration: [Release, Debug] | |
| if: github.event.pull_request.head.repo.full_name == github.repository | |
| steps: | |
| - name: Setup SSH | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 | |
| chmod 600 ~/.ssh/id_ed25519 | |
| ssh-keyscan github.com >> ~/.ssh/known_hosts | |
| - name: Checkout with submodules | |
| uses: actions/checkout@v5 | |
| with: | |
| submodules: recursive | |
| - name: Check submodule | |
| run: | | |
| ls -la | |
| ls -la core | |
| - name: Cache Xcode DerivedData | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/Library/Developer/Xcode/DerivedData | |
| ~/Library/Caches/org.swift.swiftpm | |
| key: ${{ runner.os }}-xcode-${{ matrix.configuration }}-${{ hashFiles('**/*.xcodeproj/project.pbxproj') }} | |
| restore-keys: | | |
| ${{ runner.os }}-xcode-${{ matrix.configuration }}- | |
| ${{ runner.os }}-xcode- | |
| - name: Select Xcode 26 | |
| run: | | |
| # 列出可用的 Xcode 版本 | |
| ls /Applications/ | grep Xcode | |
| # 选择最新的 Xcode 26.x | |
| XCODE_PATH=$(ls -d /Applications/Xcode_26.*.app 2>/dev/null | sort -V | tail -1) | |
| echo "Selected: $XCODE_PATH" | |
| sudo xcode-select -s "$XCODE_PATH" | |
| # 移除默认 Xcode.app 符号链接,避免 toolchain 路径冲突 | |
| if [ -e /Applications/Xcode.app ]; then | |
| sudo mv /Applications/Xcode.app /Applications/Xcode_default_backup.app | |
| fi | |
| xcodebuild -version | |
| - name: Build Mousecape (${{ matrix.configuration }}) | |
| run: | | |
| xcodebuild -project Mousecape/Mousecape.xcodeproj \ | |
| -scheme Mousecape \ | |
| -configuration ${{ matrix.configuration }} \ | |
| CODE_SIGN_IDENTITY="-" \ | |
| CODE_SIGNING_REQUIRED=NO \ | |
| CODE_SIGNING_ALLOWED=YES \ | |
| build | |
| - name: Prepare artifact | |
| run: | | |
| # 查找构建产物 | |
| BUILD_DIR=$(find ~/Library/Developer/Xcode/DerivedData -name "Mousecape.app" -type d | head -1) | |
| if [ -n "$BUILD_DIR" ]; then | |
| echo "Found app at: $BUILD_DIR" | |
| mkdir -p /tmp/artifact | |
| # 根据配置决定文件名后缀 | |
| if [ "${{ matrix.configuration }}" == "Debug" ]; then | |
| FILENAME="Mousecape_debug.app.zip" | |
| else | |
| FILENAME="Mousecape.app.zip" | |
| fi | |
| # 使用 ditto 创建 zip 保持 .app 结构 | |
| ditto -c -k --keepParent "$BUILD_DIR" "/tmp/artifact/${FILENAME}" | |
| echo "Created zip: /tmp/artifact/${FILENAME}" | |
| ls -lh /tmp/artifact/ | |
| else | |
| echo "Error: Mousecape.app not found" | |
| find ~/Library/Developer/Xcode/DerivedData -name "*.app" -type d | |
| exit 1 | |
| fi | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: Mousecape-${{ matrix.configuration }}-${{ github.sha }} | |
| path: /tmp/artifact/*.zip | |
| retention-days: 7 |