Skip to content

SPM support — Sandbox and Build#44

Merged
ericodx merged 6 commits into
mainfrom
sandbox-and-build
Mar 31, 2026
Merged

SPM support — Sandbox and Build#44
ericodx merged 6 commits into
mainfrom
sandbox-and-build

Conversation

@ericodx
Copy link
Copy Markdown
Owner

@ericodx ericodx commented Mar 31, 2026

Summary

  • Phase 2 — Sandbox: SandboxFactory.injectSupportFile now detects the SPM Sources/ layout and writes __SMTSupport.swift into the first alphabetical target subdirectory (e.g. Sources/MyLib/) instead of directly into Sources/. Falls back to Sources/ when no subdirectories exist.
  • Phase 3 — Build: BuildArtifact.xctestrunURL and BuildArtifact.plist are now optional (URL? / XCTestRunPlist?), enabling a nil-safe artifact for SPM builds. BuildStage.buildSPM executes swift build --build-tests (with optional --target) and returns an artifact with nil xctestrunURL/plist. TestExecutionStage guards against a nil plist and nil-safe xctestrunURL before entering the Xcode test path.

Type of Change

  • feat: A new feature has been added.
  • fix: A bug has been fixed.
  • perf: A code change that improves performance.
  • refactor: A code change that neither fixes a bug nor adds a feature.
  • test: Addition or correction of tests.
  • docs: Changes only to the documentation.
  • ci: Changes related to continuous integration and deployment scripts.
  • build: Changes that affect the build system or external dependencies.
  • deps: Dependency version upgrades with no logic changes.
  • chore: Other changes that do not fit into the previous categories.
  • revert: Reverts a previous commit.

Invariants Checklist

  • Original project is never modified — all mutations happen inside an isolated sandbox
  • xcodebuild build-for-testing runs exactly once for all schematizable mutants
  • No mutant results are lost or duplicated
  • Mutant positions (file, line, column) are accurate in all reported results
  • A cancelled task never leaves a simulator slot permanently acquired from the pool
  • schematizedContent never contains the __swiftMutationTestingID global declaration
  • Swift 6 Strict Concurrency compatible
  • Pipeline stages remain stateless pure transformations

Pipeline Impact

Which stages are affected?

  • SandboxFactory
  • BuildStage
  • SimulatorPool
  • TestExecutionStage
  • IncompatibleMutantExecutor
  • PerFileBuildFallback
  • CacheStore
  • Reporters (Text / JSON / HTML / Sonar)
  • CLI / Configuration
  • Models / RunnerInput contract
  • None

Testing

  • Unit tests added or updated
  • Tests use mock ProcessLaunching — no real xcodebuild, xcrun simctl, or xcresulttool
  • Tests use FileHelpers for any filesystem interaction (temp directories only)
  • Snapshot tests added or updated (if reporter output format changed)
  • Integration tests added or updated and tagged separately (if pipeline or CLI behavior changed)
  • All tests pass locally (swift test)

@ericodx ericodx self-assigned this Mar 31, 2026
@ericodx ericodx changed the title Sandbox and build feat: SPM support — Phase 2 (Sandbox) and Phase 3 (Build) Mar 31, 2026
@ericodx ericodx added feature New feature or request test Addition or correction of tests labels Mar 31, 2026
@ericodx ericodx merged commit a0c98e9 into main Mar 31, 2026
1 check passed
@ericodx ericodx deleted the sandbox-and-build branch March 31, 2026 01:44
@ericodx ericodx changed the title feat: SPM support — Phase 2 (Sandbox) and Phase 3 (Build) SPM support — Sandbox and Build Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request test Addition or correction of tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant