You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions缓存构建后测试仍重新编译应用的问题求助

Swift CI缓存后swift test重复编译的问题排查与解决

问题本质

  • swift build默认仅构建主程序目标,而swift test会自动构建主程序+测试目标,当前缓存仅包含主程序编译产物,测试目标无缓存可用,触发全量编译。
  • 缓存命中时跳过swift build,但swift test检测到测试目标未编译,会从头构建所有内容。
  • GitHub Actions缓存的文件可能存在权限异常,Swift Package Manager误判文件需要重新编译。

解决方案

1. 扩展缓存覆盖范围

修改缓存key,包含测试代码文件的哈希,确保测试目标的产物也被缓存:

- name: Load Swift Build cache
  uses: actions/cache@v3
  id: cached-build
  with:
    path: .build
    key: swift-${{ runner.os }}-${{ env.SWIFT_VERSION }}-${{ hashFiles('**/Package.resolved', 'Sources/**/*.swift', 'Tests/**/*.swift') }}
    restore-keys: |
      swift-${{ runner.os }}-${{ env.SWIFT_VERSION }}-
      swift-${{ runner.os }}-
      swift-

2. 预构建测试目标

用swift build --build-tests同时构建主程序和测试目标,确保缓存包含测试所需的所有产物:

- name: Build Application and Tests
  run: swift build --build-tests
  # 无需判断缓存命中,Swift会自动跳过已编译的目标

3. 测试时跳过构建

确认缓存完整的情况下,直接用--skip-build跳过构建步骤,仅运行测试:

- name: Run tests
  run: |
    if [ "${{ steps.cached-build.outputs.cache-hit }}" == "true" ]; then
      swift test --skip-build
    else
      swift test
    fi

4. 修复缓存文件权限

缓存恢复后修复文件权限,避免Swift误判:

- name: Fix .build permissions
  if: steps.cached-build.outputs.cache-hit == 'true'
  run: chmod -R u+w .build

完整优化后的工作流片段

- name: Set up Swift ${{ env.SWIFT_VERSION }}
  uses: fwal/setup-swift@v1
  with:
    swift-version: ${{ env.SWIFT_VERSION }}

- name: Load Swift Build cache
  uses: actions/cache@v3
  id: cached-build
  with:
    path: .build
    key: swift-${{ runner.os }}-${{ env.SWIFT_VERSION }}-${{ hashFiles('**/Package.resolved', 'Sources/**/*.swift', 'Tests/**/*.swift') }}
    restore-keys: |
      swift-${{ runner.os }}-${{ env.SWIFT_VERSION }}-
      swift-${{ runner.os }}-
      swift-

- name: Fix .build permissions (if cached)
  if: steps.cached-build.outputs.cache-hit == 'true'
  run: chmod -R u+w .build

- name: Build Application and Tests
  run: swift build --build-tests

- name: Run tests
  run: swift test --skip-build

内容的提问来源于stack exchange,提问作者colin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:41:12