@@ -48,16 +48,32 @@ mkdir -p "$LOGDIR"
4848# setup. Two idempotent steps: protect the DIRECTORY (inheritance flags are
4949# directory-only — a /T re-root leaves files with empty deny-all DACLs),
5050# then /reset the children to re-inherit the clean set.
51- case " $( uname -s 2> /dev/null) " in
52- MINGW* | MSYS* )
51+ stamp_windows_build_dir () {
52+ local when=" $1 "
53+ case " $( uname -s 2> /dev/null) " in
54+ MINGW* | MSYS* ) ;;
55+ * ) return 0 ;;
56+ esac
57+ local runner_dir_w me stamp_out reset_out
5358 runner_dir_w=" $( cygpath -w " $( dirname " $RUNNER " ) " ) "
5459 me=" $( whoami | tr -d ' \r' ) "
55- MSYS2_ARG_CONV_EXCL=' *' icacls " $runner_dir_w " /inheritance:r \
60+ stamp_out= $( MSYS2_ARG_CONV_EXCL=' *' icacls " $runner_dir_w " /inheritance:r \
5661 /grant:r " ${me} :(OI)(CI)F" ' *S-1-5-18:(OI)(CI)F' ' *S-1-5-32-544:(OI)(CI)F' \
57- /Q > /dev/null 2>&1 || true
58- MSYS2_ARG_CONV_EXCL=' *' icacls " ${runner_dir_w} \\ *" /reset /T /C /Q > /dev/null 2>&1 || true
59- ;;
60- esac
62+ /Q 2>&1 ) || echo " WARN: build-dir DACL stamp ($when ) failed (user=$me dir=$runner_dir_w ): $stamp_out "
63+ reset_out=$( MSYS2_ARG_CONV_EXCL=' *' icacls " ${runner_dir_w} \\ *" /reset /T /C /Q 2>&1 ) ||
64+ echo " WARN: build-dir child DACL reset ($when ) failed: $( printf ' %s' " $reset_out " | tail -2) "
65+ # The stamp is load-bearing for the install-flow suites: verify it and say
66+ # so, in either direction — a silent stamp once cost a full CI round to
67+ # even see WHETHER it had run.
68+ if MSYS2_ARG_CONV_EXCL=' *' icacls " $runner_dir_w " 2> /dev/null |
69+ grep -qE ' Authenticated Users|CREATOR OWNER' ; then
70+ echo " WARN: build-dir DACL still grants cross-account mutation after $when stamp:"
71+ MSYS2_ARG_CONV_EXCL=' *' icacls " $runner_dir_w " 2>&1 | head -8
72+ else
73+ echo " build-dir DACL stamped clean ($when , $runner_dir_w , user=$me )"
74+ fi
75+ }
76+ stamp_windows_build_dir pre-wave
6177
6278SUITES_FILE=" $LOGDIR /suites.txt"
6379RESULTS_FILE=" $LOGDIR /results.txt"
@@ -232,6 +248,13 @@ while IFS= read -r sname; do
232248 echo " $sname " >> " $FLEX_FILE "
233249 fi
234250done < " $SER_FILE "
251+ # Wave suites spawn Cygwin-family tooling that can rewrite the build
252+ # directory's DACL behind the first stamp (observed: an arm shard whose
253+ # tail held the install-flow suites failed the source-directory policy
254+ # minutes after a clean pre-wave stamp, while its sibling shard passed).
255+ # Re-stamp at the tail boundary so the deadline-sensitive tail — which
256+ # hosts those suites — always starts from the verified-clean shape.
257+ stamp_windows_build_dir pre-tail
235258xargs -P " ${CBM_TAIL_JOBS:- 2} " -I{} bash -c ' run_one "$@"' _ {} < " $FLEX_FILE "
236259while IFS= read -r sname; do
237260 run_one " $sname "
0 commit comments