fix(decoder): cap software playback at 16 frame threads #44
Workflow file for this run
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test-macos: | |
| name: swift test (macOS) | |
| runs-on: macos-15 | |
| timeout-minutes: 30 | |
| env: | |
| AUTHORIZATION_TEST_SUITES: 'RefreshableHLSAuthorizationTests|RefreshableSubtitleAuthorizationTests' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - name: Show toolchain | |
| run: | | |
| swift --version | |
| xcodebuild -version | |
| - name: swift build | |
| run: swift build | |
| # A test process that dies mid-run reads as exit 1 with no ✘, no backtrace and no swift-testing | |
| # summary: `swift test` collapses every abnormal child exit to a plain 1, and a signal takes the | |
| # buffered tail of the event stream with it. What was in flight is whatever the log still lists | |
| # as started but never finished. Three such deaths were an unguarded socket write raising | |
| # SIGPIPE from a test origin server (see the SO_NOSIGPIPE note in Issue177IngestPrefetchTests), | |
| # so nothing hangs and no time limit would have caught it. | |
| - name: swift test | |
| id: swift-tests | |
| run: swift test --skip "$AUTHORIZATION_TEST_SUITES" | |
| # These suites assert short authorization deadlines. Run them in a separate process | |
| # so blocking work in the broader suite cannot starve their async resolvers. | |
| # The shared filter partitions all tests without changing their deadlines or parallelism. | |
| - name: Authorization deadline regressions | |
| if: ${{ !cancelled() && steps.swift-tests.outcome != 'skipped' }} | |
| run: swift test --skip-build --filter "$AUTHORIZATION_TEST_SUITES" | |
| - name: Software VOD packet-cache regressions | |
| run: | | |
| bash Scripts/test-software-packet-coverage.sh | |
| bash Scripts/test-software-video-packet-coverage.sh | |
| bash Scripts/test-software-packet-disk-fifo.sh | |
| bash Scripts/test-software-packet-read-ahead.sh | |
| bash Scripts/test-software-read-admission.sh | |
| bash Scripts/test-software-stored-packet.sh | |
| - name: Partial H.264 composition-offset runtime regression | |
| run: | | |
| command -v ffmpeg >/dev/null || brew install ffmpeg | |
| bash Scripts/test-h264-partial-composition-controls.sh | |
| # The transport probe is a device harness and runs nowhere in CI, so nothing else would keep | |
| # it compiling. A harness that stopped building is discovered by the person who needed it. | |
| - name: build the transport probe (AE#377) | |
| run: swift build --build-tests --package-path Probes/TransportProbe | |
| build-tvos: | |
| name: xcodebuild (tvOS Simulator) | |
| runs-on: macos-15 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - name: Build for tvOS Simulator | |
| run: | | |
| xcodebuild build \ | |
| -scheme AetherEngine \ | |
| -destination 'generic/platform=tvOS Simulator' \ | |
| -derivedDataPath .build/xcode-tvos \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # The test target is the only place a platform gate in TEST code is ever checked. `swift test` | |
| # on macOS compiles the macOS side of every `#if`, so a gate put around a helper instead of | |
| # around the tests that call it looks complete there and costs nothing until someone builds | |
| # for a simulator. That is how `AetherEngineTests` stopped compiling for iOS and tvOS without | |
| # a single red run (2026-09-14, HLSOriginRelayTests). | |
| # | |
| # EXCLUDED_ARCHS because a generic simulator destination builds both slices and `libdovi.a` | |
| # ships arm64 only, so the x86_64 link fails and says nothing about this repo. | |
| - name: Build the tests for tvOS Simulator | |
| run: | | |
| xcodebuild build-for-testing \ | |
| -scheme AetherEngineTests \ | |
| -destination 'generic/platform=tvOS Simulator' \ | |
| -derivedDataPath .build/xcode-tvos-tests \ | |
| EXCLUDED_ARCHS=x86_64 \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # The transport probe also builds as an app-hosted test bundle, because a SwiftPM test target | |
| # is tool-hosted and tool-hosted testing does not exist on device destinations. That project | |
| # runs nowhere in CI either, and the person who discovers it stopped building is the one who | |
| # needed it that evening. | |
| - name: Build the transport probe's device harness (AE#377) | |
| run: | | |
| xcodebuild build-for-testing \ | |
| -project Probes/TransportProbe/Device/TransportProbe.xcodeproj \ | |
| -scheme TransportProbe \ | |
| -destination 'generic/platform=tvOS Simulator' \ | |
| -derivedDataPath .build/xcode-probe \ | |
| CODE_SIGNING_ALLOWED=NO | |
| build-ios: | |
| name: xcodebuild (iOS Simulator) | |
| runs-on: macos-15 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - name: Build for iOS Simulator | |
| run: | | |
| xcodebuild build \ | |
| -scheme AetherEngine \ | |
| -destination 'generic/platform=iOS Simulator' \ | |
| -derivedDataPath .build/xcode-ios \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # The other half of the gate check above; see the tvOS job for why the test target needs its | |
| # own build and why x86_64 is excluded. | |
| - name: Build the tests for iOS Simulator | |
| run: | | |
| xcodebuild build-for-testing \ | |
| -scheme AetherEngineTests \ | |
| -destination 'generic/platform=iOS Simulator' \ | |
| -derivedDataPath .build/xcode-ios-tests \ | |
| EXCLUDED_ARCHS=x86_64 \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # #344: the package has declared visionOS since 6.0.0 and nothing here compiled for it, so an | |
| # availability list that named tvOS/iOS/macOS and then fell through to `*` broke the visionOS | |
| # build silently. `*` resolves to the declared visionOS floor (1.0), so any API newer than that | |
| # is a compile error on visionOS and on no other platform. Nobody here owns a Vision Pro, which | |
| # makes this job the only place the platform is exercised at all. | |
| build-visionos: | |
| name: xcodebuild (visionOS Simulator) | |
| runs-on: macos-15 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - name: Build for visionOS Simulator | |
| run: | | |
| xcodebuild build \ | |
| -scheme AetherEngine \ | |
| -destination 'generic/platform=visionOS Simulator' \ | |
| -derivedDataPath .build/xcode-visionos \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # The Xcode 27 lane. Every job above resolves `latest-stable` on macos-15, which is Xcode 26.3, | |
| # while the engine is consumed and released from Xcode 27, and Swift 6.4 rejects isolation shapes | |
| # 6.3 accepted (the Sodalite test target stopped compiling on exactly that, 2026-09-16). These two | |
| # jobs compile the package and both test targets against the 27 toolchain, for macOS and for the | |
| # tvOS 27 SDK. | |
| # | |
| # They build and do not run the tests, on purpose. `xcode-27` is GitHub's preview image and runs a | |
| # BETA macOS 27 (26A5406e) under Xcode 27 beta 6: measured on two attempts of the first run, Vision | |
| # text recognition returns nil there and the loopback-origin tests starve (a global-queue block not | |
| # scheduled within 30 s, a TLS relay request timing out), a different set of network tests each | |
| # time, while all 2983 pass on macOS 27 GA on a Mac. A lane that is red for its image teaches | |
| # everyone to ignore red. Run `swift test` here once a GA macOS 27 image ships, and that is also | |
| # the point to move to its label; the preview label disappearing fails these jobs loudly first. | |
| # This lane replaces the weekly beta SDK watcher, whose one subject (#351) the 7.0 platform floor | |
| # closed. | |
| build-macos-xcode27: | |
| name: swift build --build-tests (macOS, Xcode 27) | |
| runs-on: xcode-27 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Show toolchain | |
| run: | | |
| swift --version | |
| xcodebuild -version | |
| - name: swift build --build-tests | |
| run: swift build --build-tests | |
| build-tvos-xcode27: | |
| name: xcodebuild (tvOS Simulator, Xcode 27) | |
| runs-on: xcode-27 | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Build for tvOS Simulator | |
| run: | | |
| xcodebuild build \ | |
| -scheme AetherEngine \ | |
| -destination 'generic/platform=tvOS Simulator' \ | |
| -derivedDataPath .build/xcode-tvos \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # See the tvOS job above for why the test target needs its own build and why x86_64 is excluded. | |
| - name: Build the tests for tvOS Simulator | |
| run: | | |
| xcodebuild build-for-testing \ | |
| -scheme AetherEngineTests \ | |
| -destination 'generic/platform=tvOS Simulator' \ | |
| -derivedDataPath .build/xcode-tvos-tests \ | |
| EXCLUDED_ARCHS=x86_64 \ | |
| CODE_SIGNING_ALLOWED=NO | |
| # The docs site (aetherengine-website) validates every heading anchor at build time, but it | |
| # lives in another repo and only builds AFTER a push to main, so a broken anchor ships first | |
| # and is found second: `docs/api.md` linked `formats.md#dolby-vision` against a heading that | |
| # slugs to `#dolby-vision-signaling`, and the site build failed on every dispatch from 6.58.0 | |
| # until someone looked. Same check, here, before the merge. Ubuntu on purpose: it needs no | |
| # toolchain and no network, so it reports in seconds while the macOS jobs are still starting. | |
| docs-links: | |
| name: docs links | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Validate relative links and heading anchors in the published docs | |
| run: python3 Scripts/check-doc-links.py |