Skip to content

Commit 19eb311

Browse files
committed
wip: six e2e scripts that ran on no runner run again (probes read the home's payload release; web-row scripts run in the emsdk job)
1 parent 15f1d39 commit 19eb311

7 files changed

Lines changed: 68 additions & 42 deletions

File tree

‎.agents/docs/2026-11-12-ecosystem-architecture-optimization-design.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,7 @@ S1 与 S2 之间不插入新能力。S3 之后的每个新系统是对架构的
896896
| "e2e 1069 在 xcode-27 上的失败是本分支引入的回归"(已发布的引擎单独运行通过之后的结论) | 那次对照没有并行条件,不可比。快速路径在运行环境的描述文件比图文件新时拒绝,这是设计内的;描述文件属于家目录,旁边任何一个 mcpp 装包都会改写它。当天索引里新进了多个包,套件并行的脚本首次安装时,1069 的两次运行之间描述文件被改写。本地在两次运行之间改写该文件,得到同样的现象与同样的拒绝原因 | 1069 声明 `# resources: machine`;它断言的性质只在旁边无人改动家目录时成立 |
897897
| 平台组升到 openkal-windows 0.22.1(本轮所做) | openkal-run 写的是 `^0.21.0`,mcpplibs.os 的上界是 `<0.22.0`;组里一个包只有一个版本,引擎拒绝 | 修正回移到 0.21 线(0.21.1);openkal-musl 0.29.4 写 `^0.21.1`;0.22.1 留作 0.22 线的头 |
898898
| PR 上的 e2e 即全量 | PR 运行按改动选择(`E2E_SET=pr`),一次推送可能只选中几个脚本 | 合入前对分支手动触发一次全量运行;它查出了 `mcpp why platform` 的一处回归(合并陈述时丢了平台自己的行与提供者),已修 |
899+
| "全量运行的覆盖检查失败是 macOS 作业被取消的后果"(本轮所做的判断) | 覆盖检查的输出列出六个脚本没有在任何 runner 上运行过:13、28、31 的探测写死了 runner 已不安装的载荷版本或位置(30 的 A 模式同因被略过),650、653、657 需要 emsdk 载荷而分片没有。此前自行跳过的脚本以 0 退出、记为通过,所以检查看不见;改为 77 之后才显现,而 PR 运行按改动选择,也看不见 | 13、28、30、31 从家目录读取载荷版本(`_toolchain_env.sh`);650、653、657 与 981、1079 一起在安装 emsdk 的作业里运行;合入前再做一次全量运行 |
899900

900901
### 15.3 尚未实施
901902

‎.github/workflows/ci-target-matrix.yml‎

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -379,24 +379,24 @@ jobs:
379379
exit 1
380380
fi
381381
echo "ok: wasm32-emscripten ran through the payload's runner; the decoy node was never run"
382-
# #851 (e2e 981) needs the emsdk payload this step has just installed;
383-
# the shards have none and skip it, so it runs here, in that home.
384-
MCPP="$MCPP_UNDER_TEST" bash tests/e2e/981_a_web_link_has_the_profiles_level_and_the_wasm_exception_model.sh 2>&1 \
385-
| tee "$RUNNER_TEMP/981.log"
386-
if grep -q '^SKIP' "$RUNNER_TEMP/981.log" || ! grep -qx 'PASS: 981' "$RUNNER_TEMP/981.log"; then
387-
echo "::error::e2e 981 did not run to its PASS line over the installed emsdk"
388-
exit 1
389-
fi
390-
# e2e 1079 (the `longjmp` member of `abi`) needs the same payload and a
391-
# node of the image; the shards have no emsdk and it skips itself there.
392-
# A script that does not apply exits 77, so the status says it ran.
393-
MCPP="$MCPP_UNDER_TEST" bash tests/e2e/1079_an_emscripten_rows_longjmp_model_round_trips.sh 2>&1 \
394-
| tee "$RUNNER_TEMP/1079.log"
395-
rc=${PIPESTATUS[0]}
396-
if [ "$rc" -ne 0 ]; then
397-
echo "::error::e2e 1079 ended with $rc over the installed emsdk (77: it skipped itself)"
398-
exit 1
399-
fi
382+
# THE WEB-ROW SCRIPTS RUN HERE, OVER THE PAYLOAD THIS STEP HAS JUST
383+
# INSTALLED. The shards have no emsdk, and each of these leaves there
384+
# with 77 after its `SKIP:` line; until 2026-11-12 that exit was 0, the
385+
# shards reported them as passes, and 650, 653 and 657 ran on no
386+
# runner. A status other than 0 fails the step, 77 included.
387+
for t in 650_wasm_row_names_its_launcher.sh \
388+
653_exceptions_is_the_second_abi_member.sh \
389+
657_a_build_program_under_the_web_row_uses_the_host_compiler.sh \
390+
981_a_web_link_has_the_profiles_level_and_the_wasm_exception_model.sh \
391+
1079_an_emscripten_rows_longjmp_model_round_trips.sh; do
392+
echo "::group::e2e $t"
393+
MCPP="$MCPP_UNDER_TEST" bash "tests/e2e/$t" && rc=0 || rc=$?
394+
echo "::endgroup::"
395+
if [ "$rc" -ne 0 ]; then
396+
echo "::error::e2e $t ended with $rc over the installed emsdk (77: it skipped itself)"
397+
exit 1
398+
fi
399+
done
400400
401401
coverage:
402402
# THE DENOMINATOR. Every check above is per host, and no per-host check

‎CHANGELOG.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@
118118
its merged fields in this version's first form).
119119
- An e2e part whose only script does not apply on the machine is a run that
120120
reported a case, not an empty run.
121+
- Six e2e scripts run on a runner again. A script that does not apply on a
122+
machine leaves with 77 and is reported as a skip; it left with 0 and was
123+
reported as a pass, and the coverage check of the first full run named six
124+
scripts no runner had run. The probes of 13, 28 and 31 named a payload
125+
release or a store the runners no longer have, and read the release from
126+
the home now (`_toolchain_env.sh`), as does Mode A of 30, which was left out
127+
for the same reason. 650, 653 and 657 need the emsdk payload and run in the
128+
job that installs it, beside 981 and 1079.
121129

122130
## [2026.11.10.2] - 2026-11-10
123131

‎tests/e2e/13_toolchain_pin.sh‎

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
# (that would require glibc/sysroot env activation, which is xlings'
1010
# subos shim concern, not mcpp's toolchain-resolve feature).
1111
set -e
12+
source "$(dirname "$0")/_toolchain_env.sh"
1213

1314
TMP=$(mktemp -d)
1415
trap "rm -rf $TMP" EXIT
@@ -21,11 +22,21 @@ mkdir -p "$SANDBOX_HOME/registry/data/xpkgs"
2122
# predicate (physical location must resolve inside cfg.registryDir), so the
2223
# seed is deliberately KEPT: it doubles as a live canary — if the fence ever
2324
# regresses, the machine's gcc breaks loudly and immediately.
24-
if [[ -d "$HOME/.xlings/data/xpkgs/xim-x-gcc/16.1.0" ]]; then
25-
ln -s "$HOME/.xlings/data/xpkgs/xim-x-gcc" \
26-
"$SANDBOX_HOME/registry/data/xpkgs/xim-x-gcc"
25+
# The payload is the one this machine has: in the home mcpp installs into
26+
# (`mcpp toolchain install gcc <version>`, which is where CI's runners have it)
27+
# or in the system xlings. The probe named the system xlings and 16.1.0 alone
28+
# until 2026-11-12, and the script skipped itself on every runner.
29+
GCC_SEED=""
30+
for store in "$(dirname "$MCPP_E2E_GCC_ROOT")" "$HOME/.xlings/data/xpkgs/xim-x-gcc"; do
31+
if [[ -d "$store/$GCC_VERSION" ]]; then
32+
GCC_SEED="$store"
33+
break
34+
fi
35+
done
36+
if [[ -n "$GCC_SEED" ]]; then
37+
ln -s "$GCC_SEED" "$SANDBOX_HOME/registry/data/xpkgs/xim-x-gcc"
2738
else
28-
echo "SKIP: system xlings has no gcc 16.1.0"
39+
echo "SKIP: neither mcpp's home nor the system xlings has gcc $GCC_VERSION"
2940
echo "OK"
3041
exit 77
3142
fi
@@ -36,7 +47,7 @@ cd "$TMP"
3647
"$MCPP" new myapp > /dev/null
3748
cd myapp
3849

39-
cat > mcpp.toml <<'EOF'
50+
cat > mcpp.toml <<EOF
4051
[package]
4152
name = "myapp"
4253
version = "0.1.0"
@@ -45,7 +56,7 @@ standard = "c++23"
4556
modules = true
4657
import_std = true
4758
[toolchain]
48-
linux = "gcc@16.1.0"
59+
linux = "gcc@${GCC_VERSION}"
4960
[modules]
5061
sources = ["src/**/*.cppm", "src/**/*.cpp"]
5162
[targets.myapp]
@@ -66,9 +77,9 @@ echo "$out" | grep -q 'toolchain' || { echo "missing toolchain: $out"; exit 1;
6677
# render as `@mcpp/...` — so we match the shortened form
6778
# rather than the absolute one. The trailing path components are
6879
# what actually prove the toolchain came from mcpp's sandbox.
69-
echo "$out" | grep -q 'Resolved.*gcc@16.1.0' || {
70-
echo "missing Resolved gcc@16.1.0: $out"; exit 1; }
71-
echo "$out" | grep -q '@mcpp/registry/data/xpkgs/xim-x-gcc/16.1.0/bin/g++' || {
80+
echo "$out" | grep -q "Resolved.*gcc@${GCC_VERSION}" || {
81+
echo "missing Resolved gcc@${GCC_VERSION}: $out"; exit 1; }
82+
echo "$out" | grep -q "@mcpp/registry/data/xpkgs/xim-x-gcc/${GCC_VERSION}/bin/g++" || {
7283
echo "Resolved path doesn't reference the mcpp sandbox xpkg: $out"; exit 1; }
7384

7485
echo "OK"

‎tests/e2e/28_target_static.sh‎

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@
99
# it in this test (would be a 200 MB download per CI run).
1010
set -e
1111

12-
# musl-gcc lives in the workspace toolchain (.xlings.json) once
13-
# `xlings install -y` is run. CI does this; locally the developer has it
14-
# from the `.xlings.json` workspace install too.
15-
if ! command -v x86_64-linux-musl-g++ >/dev/null 2>&1 \
16-
&& ! [ -x "$HOME/.xlings/data/xpkgs/xim-x-musl-gcc/15.1.0/bin/x86_64-linux-musl-g++" ] \
17-
&& ! [ -x "$HOME/.mcpp/registry/data/xpkgs/xim-x-musl-gcc/15.1.0/bin/x86_64-linux-musl-g++" ]
18-
then
19-
echo "SKIP: no musl-gcc 15.1.0 available — not testing --target=*-linux-musl"
12+
# The musl toolchain is the one this home has (`mcpp toolchain install gcc
13+
# <version>-musl`; CI's shards install it), whichever release that is. The probe
14+
# named 15.1.0 until 2026-11-12, the runners installed a later one, and the
15+
# script skipped itself on every runner.
16+
source "$(dirname "$0")/_toolchain_env.sh"
17+
if ! [ -x "$MUSL_GCC_ROOT/bin/x86_64-linux-musl-g++" ]; then
18+
echo "SKIP: no musl-gcc payload in this home: not testing --target=*-linux-musl"
2019
echo "OK"
2120
exit 77
2221
fi
@@ -47,14 +46,14 @@ cat >> mcpp.toml <<EOF
4746
linux = "gcc@${GNU_GCC_VER}"
4847
4948
[target.x86_64-linux-musl]
50-
toolchain = "gcc@15.1.0-musl"
49+
toolchain = "gcc@${MUSL_GCC_VERSION}-musl"
5150
linkage = "static"
5251
EOF
5352
else
54-
cat >> mcpp.toml <<'EOF'
53+
cat >> mcpp.toml <<EOF
5554
5655
[target.x86_64-linux-musl]
57-
toolchain = "gcc@15.1.0-musl"
56+
toolchain = "gcc@${MUSL_GCC_VERSION}-musl"
5857
linkage = "static"
5958
EOF
6059
fi

‎tests/e2e/30_pack_modes.sh‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
# Verifies the contract of each mode by extracting the produced tarball
66
# and inspecting the resulting binary + (for non-static) bundled libs.
77
#
8-
# Skipped when musl-gcc isn't installed (Mode A needs it). The default
9-
# Mode C path runs unconditionally.
8+
# Mode A needs a musl-gcc payload and is left out where the home has none; the
9+
# payload is whichever release the home has (_toolchain_env.sh). Its probe named
10+
# 15.1.0 until 2026-11-12, the runners installed a later one, and Mode A ran on
11+
# no runner. The default Mode C path runs unconditionally.
1012
set -e
1113

1214
TMP=$(mktemp -d)
1315
trap "rm -rf $TMP" EXIT
1416
export MCPP_HOME=$HOME/.mcpp
17+
source "$(dirname "$0")/_toolchain_env.sh"
1518

1619
cd "$TMP"
1720
"$MCPP" new myapp > /dev/null
@@ -71,7 +74,7 @@ grep -q 'Hello' "$TMP/c-name.log" || {
7174
cat "$TMP/c-name.log"; echo "Mode C: top-level entry output missing"; exit 1; }
7275

7376
# ─── Mode A (static, musl) ─────────────────────────────────────────────
74-
musl_gcc="$HOME/.mcpp/registry/data/xpkgs/xim-x-musl-gcc/15.1.0/bin/x86_64-linux-musl-g++"
77+
musl_gcc="$MUSL_GCC_ROOT/bin/x86_64-linux-musl-g++"
7578
if [[ -x "$musl_gcc" ]]; then
7679
"$MCPP" pack --mode static > "$TMP/pack-a.log" 2>&1 || {
7780
cat "$TMP/pack-a.log"; echo "Mode A pack failed"; exit 1; }

‎tests/e2e/31_transitive_deps.sh‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ trap "rm -rf $TMP" EXIT
1414
export MCPP_HOME="$TMP/mcpp-home"
1515
MCPP_INHERIT_CONFIG=0 MCPP_INHERIT_SUBOS=0 source "$(dirname "$0")/_inherit_toolchain.sh"
1616

17-
MUSL_PAYLOAD="$MCPP_HOME/registry/data/xpkgs/xim-x-musl-gcc/15.1.0/bin/x86_64-linux-musl-g++"
17+
# The musl payload is the one linked from the developer's home, whichever
18+
# release that is. The probe named 15.1.0 until 2026-11-12, the runners
19+
# installed a later one, and the script skipped itself on every runner.
20+
source "$(dirname "$0")/_toolchain_env.sh"
21+
MUSL_PAYLOAD="$MUSL_GCC_ROOT/bin/x86_64-linux-musl-g++"
1822
if [[ ! -x "$MUSL_PAYLOAD" ]]; then
1923
echo "SKIP: no reusable musl-gcc xpkg payload"
2024
echo "OK"

0 commit comments

Comments
 (0)