Skip to content

mutation workflow: Post Setup Rust cleanup fails after Relocate workflow source step (regression from #343) #368

Description

@leynos

Summary

Regression from the #343 fix ("workflow-src checkout pollutes the
caller's tree during mutation runs", merged 2026-07-18): the new
"Relocate workflow source" step moves the checked-out workflow source
tree out of the caller's workspace (into $RUNNER_TEMP/workflow-src)
after the setup-rust composite action has already been invoked
from the local workflow-src/.github/actions/setup-rust path. When
that composite action's own post/cleanup step runs later in the job,
it can no longer find its action.yml at the original path, and the
job fails even though the actual mutation-testing step succeeded.

Observed

leynos/weaver run 29675944487 (2026-07-19, schedule, mutants job for
crates/weaverd/src/dispatch/handler/tests.rs +
tests_helpers.rs) failed the job despite "Run mutation testing"
completing successfully with mutation_cargo_exit_code=0 /
mutation_cargo_outcome=all mutants caught (0 mutants matched the
path filter, so [33m WARN[0m No mutants found under the active filters / "Found 0 mutants to test").

The job step sequence was:

5  Setup Rust                       success
6  Install cargo-mutants            success
7  Run setup commands               skipped
...
10 Relocate workflow source         success   (moves workflow-src out of the caller tree)
11 Run mutation testing             success   (0 mutants; exits 0)
12 Upload mutation report           success
21 Post Setup uv                    success
22 Post Setup Rust                  FAILURE
23 Post Checkout workflow repository success
...

The failing "Post Setup Rust" step logged:

##[error]Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under
'/home/runner/work/weaver/weaver/workflow-src/.github/actions/setup-rust'.
Did you forget to run actions/checkout before running your local
action?

i.e. the composite action's cleanup phase re-resolves its own path
under .../weaver/workflow-src/..., but step 10 ("Relocate workflow
source") has already mv'd that directory to
$RUNNER_TEMP/workflow-src earlier in the same job, per the #343 fix.
Because the job's overall conclusion is derived from all steps, the
run is reported as a failure even though mutation testing itself
passed with 0 survivors — a false-negative failure that will fire on
every mutants-job run downstream of the #343 fix landing (2026-07-18),
not just this one shard.

This run is unrelated to #183 (fixed by #184, merged 2026-07-18) and
unrelated to the separate sempai tracing-test baseline failure
(reported in leynos/weaver#209) — the mutation run itself is clean
here; only the post-job cleanup of the local setup-rust composite
action is broken.

Suggested fix

Composite/local actions resolve relative to the checkout that
referenced them at the point they were uses:-invoked; their post:
cleanup re-resolves the same relative path at the end of the job. Once
workflow-src is relocated out of the caller's tree (to satisfy
#343), any composite action invoked via a uses: ./workflow-src/...
reference stops working for its post: phase. Options:

  • Invoke setup-rust (and any other local composite actions with
    post: cleanup hooks) from the relocated $RUNNER_TEMP/workflow-src
    path from the start, so the reference stays valid for the whole job
    lifetime, and only relocate files that are not referenced as
    uses: ./... action paths after this point.
  • Or: don't relocate at all — check out the workflow source into a
    sibling directory outside the caller's tree in the first place
    ($RUNNER_TEMP/workflow-src), and have mutation_detect_changes/
    hygiene-sensitive tooling reference that absolute path instead of
    moving it out from under an already-registered composite action
    mid-job.
  • At minimum, mark the "Relocate workflow source" step to run only
    after all uses: ./workflow-src/... composite actions for the job
    have completed both their main and post phases, or split relocation
    per-job so it happens after the last local-action reference.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghighHigh criticality issue

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions