Repository navigation
takt4 1.2.0 #60
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: full | |
| # The whole application, Slint included. Every job builds Slint from scratch through cargo | |
| # (7–25 minutes), so this runs only when something that can affect the UI build changes, | |
| # once a week to catch drift, and on demand. core.yml covers the engine on every push. | |
| # | |
| # This workflow is ENABLED, by the user on 2026-09-14. It had been `disabled_manually` since | |
| # 2026-09-04, which meant a UI change was covered by nothing: core.yml builds with the UI off | |
| # and does not compile a line of src/ui/. That was noticed while releasing 0.9.6 — a release | |
| # whose every changed file was under src/ui/ — and the answer was to turn this back on rather | |
| # than to keep dispatching it by hand and forgetting to. | |
| # | |
| # WINDOWS ONLY, by the user, 2026-09-06 — the same ruling core.yml carries: it used to cost | |
| # ≈150 billable minutes because macOS is billed at 10× and Slint takes 7–25 minutes to | |
| # build. The macOS and Linux app entries are commented out rather than deleted so bringing | |
| # them back is uncommenting — but bring them back knowing what they used to cost. | |
| # | |
| # **Plus the sanitizers, on every push the path filter below lets through (every push that | |
| # touches the code), by the user on 2026-09-23** (the audit's T4, which | |
| # found that neither had ever run in CI and that `linux-tsan` had never run anywhere): | |
| # AddressSanitizer over the whole tree, the UI included, on Windows; and ThreadSanitizer on | |
| # Linux, because there is no ThreadSanitizer for Windows at all. takt4's threads — the audio | |
| # callback, the model, the tracker, the output thread, the UI, the OSC and MIDI listeners | |
| # and Link's own — are the reason. The cost was put to the user and accepted. | |
| # | |
| # The path filter covers everything that can change the app (the audit found src/core, | |
| # tests/ui, tests/CMakeLists.txt, assets and tools/embed_asset.py all missing from it, so a | |
| # change there went unbuilt until the Monday run; and the audit of 2026-09-25, B4, the Rust | |
| # pin, which is the compiler Slint is built with, and LICENSE and THIRD-PARTY-NOTICES.txt, | |
| # which are embedded in takt4.exe). Documentation alone does not trigger it. | |
| # | |
| # Note the concurrency group below cancels in-progress runs for the same ref: a second push | |
| # to main while this is building kills the first run rather than queueing behind it. | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'src/**' | |
| - 'tests/**' | |
| - 'assets/**' | |
| - 'third_party/**' | |
| - 'cmake/**' | |
| - 'CMakeLists.txt' | |
| - 'CMakePresets.json' | |
| - 'tools/embed_asset.py' | |
| - 'rust-toolchain.toml' | |
| - 'LICENSE' | |
| - 'THIRD-PARTY-NOTICES.txt' | |
| - '.github/workflows/full.yml' | |
| pull_request: | |
| paths: | |
| - 'src/**' | |
| - 'tests/**' | |
| - 'assets/**' | |
| - 'third_party/**' | |
| - 'cmake/**' | |
| - 'CMakeLists.txt' | |
| - 'CMakePresets.json' | |
| - 'tools/embed_asset.py' | |
| - 'rust-toolchain.toml' | |
| - 'LICENSE' | |
| - 'THIRD-PARTY-NOTICES.txt' | |
| - '.github/workflows/full.yml' | |
| schedule: | |
| - cron: '0 6 * * 1' # Mondays, 06:00 UTC | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| build: | |
| name: ${{ matrix.preset }} | |
| runs-on: ${{ matrix.os }} | |
| # The ASan job builds the whole tree instrumented and runs every test under it. | |
| timeout-minutes: 180 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # The hosted Windows images (windows-latest and windows-2025 alike, as of the | |
| # 2026-08-24 image) ship Visual Studio 2026 only. The preset names no | |
| # generator, so CMake picks whatever Visual Studio is installed. | |
| - os: windows-latest | |
| preset: windows-msvc | |
| app: build/windows-msvc/bin/Release/takt4.exe | |
| cli: build/windows-msvc/bin/Release/takt4-cli.exe | |
| # AddressSanitizer over everything, UI included. cmake/sanitizers.cmake copies the | |
| # ASan runtime DLL beside the binaries, so they start without Visual Studio's PATH. | |
| - os: windows-latest | |
| preset: windows-asan | |
| app: build/windows-asan/bin/Release/takt4.exe | |
| cli: build/windows-asan/bin/Release/takt4-cli.exe | |
| # ThreadSanitizer: Linux is where it exists. TSAN_OPTIONS makes a report fail the | |
| # test that produced it rather than scroll past in a passing run. | |
| - os: ubuntu-24.04 | |
| preset: linux-tsan | |
| app: build/linux-tsan/bin/takt4 | |
| cli: build/linux-tsan/bin/takt4-cli | |
| # Windows only for now; see the note at the top of this file. | |
| # - os: macos-latest | |
| # preset: macos | |
| # app: build/macos/bin/takt4 | |
| # cli: build/macos/bin/takt4-cli | |
| # - os: ubuntu-24.04 | |
| # preset: linux | |
| # app: build/linux/bin/takt4 | |
| # cli: build/linux/bin/takt4-cli | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive | |
| - name: Install Linux packages | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| pkg-config libasound2-dev libjack-jackd2-dev libfontconfig-dev libfreetype-dev | |
| # The hosted images ship CMake, Ninja and a Rust toolchain that satisfy the | |
| # requirements in README.md. Record what was actually used. | |
| - name: Toolchain versions | |
| run: | | |
| cmake --version | |
| ninja --version || true | |
| rustc --version || true | |
| cargo --version || true | |
| - name: Configure | |
| run: cmake --preset ${{ matrix.preset }} | |
| # Linux goes on past the first error (Ninja's -k 0), so a run reports every file GCC | |
| # refuses rather than one per run: GCC warns about things MSVC does not, and this tree | |
| # builds with warnings as errors. | |
| - name: Build | |
| run: cmake --build --preset ${{ matrix.preset }} --parallel ${{ runner.os == 'Linux' && '-- -k 0' || '' }} | |
| # `-all`: a runner has no show on it to disturb, so it runs the [network] and [hardware] | |
| # tests the default presets leave out on a rig (the audit's T2). | |
| - name: Test | |
| env: | |
| TSAN_OPTIONS: halt_on_error=1:second_deadlock_stack=1 | |
| run: ctest --preset ${{ matrix.preset }}-all | |
| - name: Version banner | |
| run: ${{ matrix.app }} --version | |
| - name: Console tool | |
| run: | | |
| ${{ matrix.cli }} --version | |
| ${{ matrix.cli }} devices |