Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 66 additions & 3 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,18 @@ env:
# 2026.8.10.1 又加了一层:2026.8.8.2 的 registry 无法解析
# `xim:libglvnd@>=1.7.0.1` —— compat.glx-runtime@2026.08.08 在 linux 上的硬依赖,
# 任何经 compat.glfw 的 X11 profile 触及图形栈的包(eui-neo 等)都会踩到,导致
# linux 上安装即失败(main 的 graphics 检查因此持续变红)。2026.8.10.1 的 registry
# 带上了 libglvnd;glibc 修复(2026.8.8.2)依然被满足。
MCPP_VERSION: "2026.8.10.1"
# linux 上安装即失败(main 的 graphics 检查因此持续变红)。
#
# 补充根因:这不是索引的数据缺陷,是**内带 xlings 的版本**。四段版本参与范围比较
# 由 xlings `2026.8.9.2` 修好(N 段 semver 重写);mcpp `2026.8.8.2` 内带的是
# `2026.8.8.1`,正好落在修复之前,所以它把一个存在的包报成 `not found`。
# `2026.8.10.1` 起内带的 xlings 已含该修复。**`xim-pkgindex` 一个字都不用改。**
#
# 取 `2026.8.10.3` 而不是 `.1`,是因为它另外带两个直接影响本仓的修复:
# - mcpp#405 依赖 BMI 缓存命中时,被恢复的包传递依赖的 `std` 没进构建图 ——
# **每个图形项目的第二次构建必挂**(消费方自己不 `import std` 时现形)。
# - mcpp#407 `mcpp build` 会重放 `mcpp test` 留下的构建图。
MCPP_VERSION: "2026.8.10.3"

jobs:
lint:
Expand Down Expand Up @@ -1131,3 +1140,57 @@ jobs:
name: member-timings
path: member-timings.tsv
retention-days: 90

# ─────────────────────────────────────────────────────────────────────────
# A full sweep that fails must be SEEN.
#
# Selective CI is structurally unable to notice a published package that
# broke because something UPSTREAM changed: no PR's diff names it, so no
# PR selects it. The weekly cron exists for exactly that, and it already
# ran — but a red cron blocks nothing and pages nobody, so it may as well
# not have run. Measured: eight graphics members failed the same way for
# weeks while `main` showed green, because the job that builds them was
# `skipped` on every push.
#
# `main` is green and the packages install are two different claims. This
# job turns the second one into an issue somebody sees.
#
# Only for full sweeps (schedule / manual dispatch). A PR's failure is
# already visible on the PR.
sweep-alert:
name: full sweep failed — open an issue
needs: [workspace]
if: >-
always()
&& needs.workspace.result == 'failure'
&& (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Open or update the sweep-failure issue
env:
GH_TOKEN: ${{ github.token }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
set -euo pipefail
TITLE="full workspace sweep is failing"
# One issue, reopened and appended to — not one per run. A tracker
# that produces a new issue every week is a tracker people mute.
NUM=$(gh issue list --state all --search "$TITLE in:title" \
--json number,title,state \
--jq "[.[] | select(.title == \"$TITLE\")] | first | .number // empty")
BODY=$(printf '%s\n' \
"The weekly full sweep failed: $RUN_URL" \
"" \
"This is the only signal that catches a published package broken by an" \
"upstream change — selective CI cannot select a member no diff names." \
"" \
"Check the \`workspace\` job's failed shards for which members regressed.")
if [ -n "$NUM" ]; then
gh issue reopen "$NUM" 2>/dev/null || true
gh issue comment "$NUM" --body "$BODY"
echo "commented on #$NUM"
else
gh issue create --title "$TITLE" --body "$BODY"
fi
Loading