1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
「:
生成、验证并发布供 GitHub Actions 使用的连续自举包。
本工具只允许从已推送且无已跟踪改动的 yybs 分支发布。它会:
一、使用现有稳定编译器完成三阶段自举并检查固定点;
二、生成并在本机重新构建可移植自举包;
三、下载当前远端资产作为回滚备份;
四、替换 continuous-bootstrap release 中的同名资产;
五、重新下载已发布资产并逐字节核验。
用法:
./yy豫构 构建 发布连续自举包
./yy发布连续自举包 --publish
临时目录不会自动删除,其中保留发布前的远端资产,可用于手工回滚。
:」
寻观「标准库」之书。
寻观「标准库」之「语言核心」之「异常」之书。
寻观「标准库」之「数据结构」之「字符串术」之书。
寻观「标准库」之「数据结构」之「多态列」之书。
寻观「标准库」之「操作系统」之「命令行参数」之书。
寻观「标准库」之「操作系统」之「文件系统」之书。
寻观「标准库」之「操作系统」之「路径」之书。
寻观「标准库」之「操作系统」之「进程」之书。
寻观「标准库」之「操作系统」之「子进程」之书。
寻观「标准库」之「输入输出」之「笔」之书。
「去除末尾换行」乃化「字符串」而「字符串」也。
「去除末尾换行」者会「内容」而
若「串结尾是它吗」于『「:换行:」』于「内容」
则「获取子字符串」于「零」于(「减」于(「串长度」于「内容」)于「一」)于「内容」
否则「内容」
也。
「命令失败文字」乃化「字符串」而化(
「爻」「:退出状态:」合
「字符串」「:标准输出:」合
「字符串」「:错误输出:」
)而「字符串」也。
「命令失败文字」者会「说明」而会「结果」而
「说明」附『「:换行:」标准输出:』附(「结果」中「一」)
附『「:换行:」错误输出:』附(「结果」中「二」)
也。
「取得命令输出」乃化「字符串」而化(「列」于「字符串」)而「字符串」也。
「取得命令输出」者会「程序」而会「参数」而
虑「结果」者「获取输出」于「程序」于「参数」而
若「结果」中「零」
则「去除末尾换行」于(「结果」中「一」)
否则「发生事故」于(「命令失败文字」于(『命令执行失败:』附「程序」)于「结果」)
也。
「运行发布步骤」乃化「字符串」而化「字符串」而化(「列」于「字符串」)而「有」也。
「运行发布步骤」者会「说明」而会「程序」而会「参数」而
(
「打印行」于(『==> 』附「说明」);
「成功运行并打印结果」于「程序」于「参数」;
「元」
)
也。
「要求仓库状态适合发布」乃化「有」而「字符串」也。
「要求仓库状态适合发布」者会「无」而
虑「无」者若「且」于
(「路径是普通文件」于『豫言编译器/入口。豫』)
于(「路径是文件夹」于『.git』)
则「元」
否则「发生事故」于『请从豫言仓库根目录运行本工具』而
虑「分支」者「取得命令输出」于『git』于
((「列」【『branch』,『--show-current』】))而
虑「无」者若「串相等」于「分支」于『yybs』
则「元」
否则「发生事故」于(『只允许从 yybs 分支发布,当前分支为:』附「分支」)而
虑「无」者「运行发布步骤」于『更新远端 yybs 引用』于『git』于
((「列」【『fetch』,『origin』,『yybs』】))而
虑「当前提交」者「取得命令输出」于『git』于
((「列」【『rev-parse』,『HEAD』】))而
虑「远端提交」者「取得命令输出」于『git』于
((「列」【『rev-parse』,『origin/yybs』】))而
虑「无」者若「串相等」于「当前提交」于「远端提交」
则「元」
否则「发生事故」于
(『当前提交尚未推送到 origin/yybs:「:换行:」当前:』附「当前提交」附
『「:换行:」远端:』附「远端提交」)而
虑「已跟踪改动」者「取得命令输出」于『git』于
((「列」【『status』,『--porcelain』,『--untracked-files=normal』】))而
虑「无」者若「串相等」于「已跟踪改动」于『』
则「元」
否则「发生事故」于(『存在尚未提交的已跟踪改动,拒绝发布:「:换行:」』附「已跟踪改动」)而
「当前提交」
也。
「上传失败并尝试回滚」乃化「字符串」而化(
「爻」「:退出状态:」合
「字符串」「:标准输出:」合
「字符串」「:错误输出:」
)而「字符串」也。
「上传失败并尝试回滚」者会「备份资产路径」而会「上传结果」而
虑「回滚结果」者「获取输出」于『gh』于
((「列」【『release』,『upload』,『continuous-bootstrap』,「备份资产路径」,『--clobber』,『--repo』,『yuyan-lang/yuyan』】))而
若「回滚结果」中「零」
则「命令失败文字」于『发布新资产失败;旧资产已经自动恢复』于「上传结果」
否则(「命令失败文字」于『发布新资产失败』于「上传结果」)附
『「:换行:」自动恢复旧资产也失败:』附
(「命令失败文字」于『回滚失败』于「回滚结果」)
也。
「发布连续自举包」乃化「有」而「有」也。
「发布连续自举包」者会「无」而
虑「提交」者「要求仓库状态适合发布」于「元」而
虑「临时根」者「取得命令输出」于『mktemp』于
((「列」【『-d』,『/tmp/yuyan-continuous-bootstrap.XXXXXX』】))而
虑「二级编译器」者「路径合并」于(「获取当前路径」于「元」)于『yy2_bs』而
虑「三级编译器」者「路径合并」于(「获取当前路径」于「元」)于『yy3_bs』而
虑「四级编译器」者「路径合并」于(「获取当前路径」于「元」)于『yy4_bs』而
虑「自举包目录」者「路径合并」于「临时根」于『yy-bootstrap』而
虑「重建目录」者「路径合并」于「临时根」于『重建验证』而
虑「压缩包路径」者「路径合并」于「临时根」于『yuyan-bootstrap-bundle.tar.gz』而
虑「备份目录」者「路径合并」于「临时根」于『发布前备份』而
虑「备份资产路径」者「路径合并」于「备份目录」于『yuyan-bootstrap-bundle.tar.gz』而
虑「核验目录」者「路径合并」于「临时根」于『发布后核验』而
虑「核验资产路径」者「路径合并」于「核验目录」于『yuyan-bootstrap-bundle.tar.gz』而
虑「无」者「打印行」于(『将发布提交:』附「提交」)而
虑「无」者「打印行」于(『临时及回滚目录:』附「临时根」)而
虑「无」者「运行发布步骤」于『检查 GitHub 登录状态』于『gh』于
((「列」【『auth』,『status』】))而
虑「无」者「运行发布步骤」于『经豫构完成三级自举及固定点验证』于『make』于(「列」【『连续自举』,『豫构』】)而
虑「无」者「运行发布步骤」于『导出双种子自举包』于『./yy豫构』于
(「列」【『自举包』,『--编译器』,「三级编译器」,『--输出』,「自举包目录」】)而
虑「无」者「运行发布步骤」于『从可移植源码重建两个种子』于
『cp』于(「列」【『-R』,「自举包目录」,「重建目录」】)而
虑「无」者「运行发布步骤」于『验证副本,不把本机二进制混入发布包』于
(「路径合并」于「重建目录」于『构建.sh』)于「罄」而
虑「无」者「运行发布步骤」于『检查种子编译器』于(「路径合并」于「重建目录」于『yy_bs_stable』)于(「列」【『--version』】)而
虑「无」者「运行发布步骤」于『检查种子豫构』于(「路径合并」于「重建目录」于『yy豫构_stable』)于(「列」【『-h』】)而
「:文言:去机上附记,勿混入源码。汉语:macOS 打包禁用 AppleDouble 扩展属性文件,避免 Linux 把 ._*.c 当作源码。:」
虑「无」者「运行发布步骤」于『压缩可移植自举包』于『env』于
(「列」【『COPYFILE_DISABLE=1』,『tar』,『--no-xattrs』,『-czf』,「压缩包路径」,『-C』,「临时根」,『yy-bootstrap』】)而
虑「历史名」者『bootstrap-bundle-』附「提交」附『.tar.gz』而
虑「历史路径」者「路径合并」于「临时根」于「历史名」而
虑「资产名们」者「取得命令输出」于『gh』于(「列」【『release』,『view』,『historical-bootstrap』,『--repo』,『yuyan-lang/yuyan』,『--json』,『assets』,『--jq』,『.assets[].name』】)而
虑「无」者若「是子字符串吗」于「历史名」于「资产名们」则「元」否则(
虑「无」者「运行发布步骤」于『保存不可变历史资产』于『cp』于(「列」【「压缩包路径」,「历史路径」】)而
「运行发布步骤」于『发布不可变历史资产』于『gh』于(「列」【『release』,『upload』,『historical-bootstrap』,「历史路径」,『--repo』,『yuyan-lang/yuyan』】))而
虑「无」者「运行发布步骤」于『创建远端资产备份目录』于『mkdir』于
((「列」【『-p』,「备份目录」】))而
虑「无」者「运行发布步骤」于『下载当前 continuous-bootstrap 资产作为回滚备份』于『gh』于
((「列」【『release』,『download』,『continuous-bootstrap』,『--pattern』,『yuyan-bootstrap-bundle.tar.gz』,『--dir』,「备份目录」,『--clobber』,『--repo』,『yuyan-lang/yuyan』】))而
虑「无」者「打印行」于『==> 发布新的 continuous-bootstrap 资产』而
虑「上传结果」者「获取输出」于『gh』于
((「列」【『release』,『upload』,『continuous-bootstrap』,「压缩包路径」,『--clobber』,『--repo』,『yuyan-lang/yuyan』】))而
虑「无」者若「上传结果」中「零」
则(
「打印行」于(「上传结果」中「一」);
「标准错误打印行」于(「上传结果」中「二」);
「元」
)
否则「发生事故」于(「上传失败并尝试回滚」于「备份资产路径」于「上传结果」)而
虑「无」者「运行发布步骤」于『创建发布后核验目录』于『mkdir』于
((「列」【『-p』,「核验目录」】))而
虑「无」者「运行发布步骤」于『重新下载已发布资产』于『gh』于
((「列」【『release』,『download』,『continuous-bootstrap』,『--pattern』,『yuyan-bootstrap-bundle.tar.gz』,『--dir』,「核验目录」,『--clobber』,『--repo』,『yuyan-lang/yuyan』】))而
虑「无」者「运行发布步骤」于『逐字节核验远端资产』于『cmp』于
((「列」【「压缩包路径」,「核验资产路径」】))而
虑「无」者「打印行」于『continuous-bootstrap 资产发布并核验成功。』而
虑「无」者「打印行」于(『如需回滚,旧资产保存在:』附「备份资产路径」)而
「元」
也。
「打印用法」乃化「有」而「有」也。
「打印用法」者会「无」而
「标准错误打印行」于
『用法:
./yy豫构 构建 发布连续自举包
./yy发布连续自举包 --publish
』
也。
鉴「获取参数」于「元」而
有((「列」【『--publish』】))则「发布连续自举包」于「元」
或有「其他」则(「打印用法」于「元」;「退出」于「二」)。