Skip to content

app-build.yml does not trigger on StrandTests/**, so a test-only PR verifies nothing #1954

Closed

Description

@ryanbr

app-build.yml is what compiles the app targets and runs the app-target tests:

      - name: Test ${{ matrix.scheme }}
        if: matrix.scheme == 'Strand'

Its trigger lists the sources but not the tests:

    paths:
      - 'Strand/**'
      - 'StrandiOS/**'
      - 'StrandiOSShared/**'
      - 'StrandiOSWidgets/**'
      - 'Packages/**'
      - 'project.yml'
      - '.github/workflows/app-build.yml'

StrandTests/** is absent. A PR that touches only app-target tests therefore
builds nothing and runs nothing, so a test file that does not compile, or one
that fails, merges unverified and then fails on the next unrelated PR that
happens to touch Strand/**.

Why it matters more than it looks

StrandTests is where the app-target logic lives that the Swift packages cannot
reach: backfill continuation, scheduled-report and strain-target policy, and the
source-guard tests that pin call-site invariants no unit test can drive. Adding
one of those is a common shape of change, and it is precisely the shape this
filter does not cover.

The failure is also mis-attributed when it lands: the PR that goes red is the one
that touched Strand/**, not the one that introduced the broken test.

Fix

Add StrandTests/** to the same paths list. One line, no new job, no extra
macOS minutes except on PRs that genuinely change those tests.

Found while confirming that a new guard test in #1951 would actually run in CI.
It does, but only because that PR also edits BLEManager.swift.

Activity

  1. ryanbr commented on Sep 7, 2026

    @ryanbr
    OwnerAuthor

    Landed in #1955. StrandTests/** is now in app-build.yml's trigger paths, so a test-only PR builds and runs the app-target suite instead of silently verifying nothing.

    Recorded in the workflow comment while doing it: this was the only test directory that needed naming, and the reason is layout rather than oversight. Android's tests sit under android/** and the package suites under Packages/**, both already inside their subject's glob, while StrandTests is a sibling of Strand/ rather than part of it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions