From d4b911a80580bad9b39cf981e98bdc154c68a8a3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 16:01:41 +0000 Subject: [PATCH] Add CI: run the Linux-portable ContinuityCore tests on every PR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The repo had no CI despite ~127 unit tests. Following the AGENTS.md recipe, assemble a throwaway package from the non-Accelerate sources and run swift test on Linux — 111 of the cases (parsers, Camelot, flow ordering, curves, transition plan, loudness, silence trimming) run on every PR; the Accelerate-backed BPM/key suites still need a Mac. --- .github/workflows/core-tests.yml | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/core-tests.yml diff --git a/.github/workflows/core-tests.yml b/.github/workflows/core-tests.yml new file mode 100644 index 0000000..5246f46 --- /dev/null +++ b/.github/workflows/core-tests.yml @@ -0,0 +1,53 @@ +# Runs the platform-agnostic ContinuityCore test suite on Linux for every PR. +# +# BeatTracker/KeyDetector import Accelerate (Apple-only), and SwiftPM compiles the target as a +# unit — so the full package can't build on Linux. Per AGENTS.md, we assemble a throwaway +# package from the non-Accelerate sources/tests (111 of ~127 test cases: Camelot/flow ordering, +# crossfade curves, transition plan, loudness, silence trimming, YouTube/Spotify URL + page +# parsing). The BPM and key suites still need a Mac. +name: Core tests + +on: + pull_request: + push: + branches: [main] + +jobs: + core-tests-linux: + runs-on: ubuntu-24.04 + container: swift:6.0 + steps: + - uses: actions/checkout@v4 + + - name: Assemble Linux-buildable subset + run: | + set -eu + SRC=Packages/ContinuityCore + DST=/tmp/coretest + mkdir -p "$DST/Sources/ContinuityCore" "$DST/Tests/ContinuityCoreTests" + for f in "$SRC"/Sources/ContinuityCore/*.swift; do + case "$(basename "$f")" in + BeatTracker.swift|KeyDetector.swift) ;; # import Accelerate — Apple-only + *) cp "$f" "$DST/Sources/ContinuityCore/" ;; + esac + done + for f in "$SRC"/Tests/ContinuityCoreTests/*.swift; do + case "$(basename "$f")" in + BeatTrackerTests.swift|KeyDetectorTests.swift|KeyDetectorAccuracyTests.swift) ;; + *) cp "$f" "$DST/Tests/ContinuityCoreTests/" ;; + esac + done + cat > "$DST/Package.swift" <<'EOF' + // swift-tools-version:5.9 + import PackageDescription + let package = Package( + name: "ContinuityCore", + targets: [ + .target(name: "ContinuityCore"), + .testTarget(name: "ContinuityCoreTests", dependencies: ["ContinuityCore"]), + ] + ) + EOF + + - name: swift test + run: swift test --package-path /tmp/coretest