Commit be64163
fix(ci): allow-major 改为求值时刻实时读标签,红 run 不再永久红 (#5620)
`pr-automation.yml` 的 `Guard against accidental major bumps (launch window)`
第三个 clause 一直读 `contains(github.event.pull_request.labels.*.name,
'allow-major')` —— 与 #5580 修掉的是同一个读法、同一个后果:载荷是事件触发那一刻的
快照,开 PR 后再补 `allow-major` 该 run 看不见;而 `rerun_failed_jobs` 复用同一份
载荷(pm-dispatch Operational notes 5),于是这个红 run 按构造重跑不成绿,只能靠一次
新的真实事件顶掉。
复用 #5580 的落地形状(`a9c7e6ba0` 在同一 job 新增 `id: labels` 实时读标签步骤,
以 `steps.labels.outputs.skip` 供下游 `if:` 消费):新增 `id: allow_major` 步骤,
同一个 `gh api repos/$REPO/pulls/$PR` 端点、同一个 `grep -qxF` 整行精确匹配、同一个
here-string(避免 `grep -q` 进管道后写入端吃 SIGPIPE、在 pipefail 下翻转判定)、
同一个 #4690 容忍方向 —— 读不到标签判 `allow=false`,即照常执行守卫。守卫步骤的第三个
clause 改读 `steps.allow_major.outputs.allow != 'true'`。
与 #5580 的两处刻意分歧,均因本标签在 job **末尾**被消费而非开头:
1. **不保留载荷 fast-path。** #5580 保留它是因为载荷里已有 `skip-changeset` 可跳过
整个 job(checkout + install 全免)换一次 API 调用;这里下游只剩一条
`node scripts/check-changeset-no-major.mjs`,fast-path 省不下任何东西,却会一并
保留 #5580 承认的那个反向 stale 格(事件后被**移除**的标签仍豁免本 run)。去掉后,
豁免只能由「真的观测到的标签」建立。
2. **不加 #6378 式结算窗口**,并按残留记录而非当作已解决。#6378 的等待只能记在
「注定要红」的 PR 头上,而这里的「注定要红」= 「声明了 major 且没有标签」——
只有 `check-changeset-no-major.mjs` 知道,且它以 exit 1 表达。要据此设条件就得把
脚本跑两遍、或吞掉输出再回放,即改变该守卫的报错形状;而本步骤的**位置**已经把
竞态窗口收窄:它排在 checkout + setup-node + `pnpm install --frozen-lockfile`
+ 计数 + 两个 `check-*.mjs` 之后,而 job 开头的 fast-path 读位于开 PR 后约 +10s
(#6378 实测 run 31204438874),标签落地延迟实测 +10..45s(#6310、#6358)。
更关键:与 #5580 的方向不同,这里的首红**有救** —— 读是实时的,补标签后
`rerun_failed_jobs` 即收敛为绿。消掉「永久红」正是 #5620 记的那笔。
**休眠不作为依据。** `check-changeset-no-major.mjs` 在 pre-release 窗口整体让位
(其 RC EXEMPTION 头注),`.changeset/pre.json` 现为 `"mode": "pre"`,故该守卫今天
不可能红、标签也用不上。它在 `changeset pre exit` 当刻自动重新武装 —— 恰是全栈 major
讨论最密集、`allow-major` 最可能被现场手工补标签的窗口。文件内注释写明了这一点。
回归钉:`scripts/check-empty-changeset.mjs` 的 consumer 自测块(该仓唯一断言本 job
标签读取形状的地方)增 5 条断言 —— 工作流内不得再出现 `allow-major` 的载荷读法、
恰好一处实时 `grep -qxF 'allow-major'`、守卫必须消费 `steps.allow_major.outputs.allow`、
实时读须同时尊重两处 skip-changeset 读、`allow=true` 只能写一次且必须在真正观测到
标签的 grep 之后(容忍方向按位置钉死,而非数分支)。
⛔ 未动:job 名与既有 step 命名约定(无新增 job,必需检查上下文不受影响)、计数逻辑、
`BASE_SHA`/merge-base、release 与 pre-mode 策略、`docs/adr/**`。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F8q5J1MQyocgtNspb15fSn1 parent 6595262 commit be64163
2 files changed
Lines changed: 145 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
721 | 721 | | |
722 | 722 | | |
723 | 723 | | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
724 | 808 | | |
725 | 809 | | |
726 | 810 | | |
| |||
734 | 818 | | |
735 | 819 | | |
736 | 820 | | |
737 | | - | |
738 | | - | |
739 | | - | |
740 | | - | |
741 | | - | |
742 | | - | |
743 | | - | |
744 | | - | |
745 | | - | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
746 | 825 | | |
747 | 826 | | |
748 | 827 | | |
749 | | - | |
| 828 | + | |
750 | 829 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
820 | 820 | | |
821 | 821 | | |
822 | 822 | | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
| 863 | + | |
| 864 | + | |
| 865 | + | |
| 866 | + | |
| 867 | + | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
823 | 879 | | |
824 | 880 | | |
825 | 881 | | |
| |||
0 commit comments