@ship.zone/ci-spec 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +15 -0
- package/conformance/compile-cases.json +820 -0
- package/conformance/runner-job-cases.json +11 -0
- package/conformance/runner-jobs/incoherent/command-argument-above-limit.json +70 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/package.json +1 -1
- package/readme.md +1 -1
- package/spec/ci-actions.md +12 -5
- package/spec/runner-protocol.md +1 -0
- package/spec/runner.openapi.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
package/changelog.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-09-27 - 2.1.1
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- state the YAML 1.2 character, byte order mark, escape, and document rules, and bound nesting depth (ci-actions)
|
|
8
|
+
- A C0 control character other than tab, line feed, and carriage return fails with `workflow_yaml_syntax` anywhere, including in a quoted scalar. DEL, C1 control characters other than NEL, U+FFFE, U+FFFF, and U+FEFF are content inside a quoted scalar, as YAML 1.2 requires for JSON compatibility, and fail with `workflow_yaml_syntax` anywhere else.
|
|
9
|
+
- Runs of U+FEFF at the start of a line are byte order marks, not content, before the line on which the document begins, on that line, after a document end marker `...`, and after the document's content when only blank and comment lines follow up to the end of the file or the next `---` or `...` marker, as YAML 1.2 allows a document prefix after a document; the file's own leading byte order mark is the first of them. Any other U+FEFF outside a quoted scalar fails with `workflow_yaml_syntax`.
|
|
10
|
+
- A `\u` high surrogate escape directly followed by a `\u` low surrogate escape denotes one supplementary character, as in JSON; every other escape of a surrogate code point, which RFC 8785 cannot serialize, fails with `workflow_yaml_syntax`.
|
|
11
|
+
- Collections nest at most 64 deep, eight times the depth of the deepest collection a schema-valid workflow holds; a collection of depth 65 fails with `workflow_yaml_syntax`, so a parser can stop there instead of exhausting its stack. Only workflows that fail schema validation are affected.
|
|
12
|
+
- Documents are counted as YAML 1.2 counts them: a `---` marker or content begins a document, and `...` markers, comments, blank lines, and byte order marks begin none. A file of only `...` fails with `workflow_yaml_document_count`, a document followed by several `...` markers is one document, and `--- # comment` is one empty document that fails schema validation.
|
|
13
|
+
- Adds 22 compile vectors: 15 YAML-layer failures, 2 workflows that pass the YAML layer and fail schema validation (depth 64 and an empty explicit document), and 5 compiled workflows that fix byte order mark lines before and after the document, `...` markers, and quoted-scalar content. The test's reference YAML layer decides them.
|
|
14
|
+
- apply the 16 KiB command argument limit to UTF-8 bytes (ci-actions, runner-protocol)
|
|
15
|
+
- Protocol Limits already counted the argument limit after UTF-8 encoding. A command argument of more than 16,384 UTF-8 bytes now has its codes: compilation fails with `command_limit_exceeded`, and Job Coherence lists the rule under `job_command_limit_exceeded`. The schemas keep `maxLength` 16,384, which counts characters.
|
|
16
|
+
- Adds the compile vector `workflow-command-argument-above-limit` and the runner job fixture `conformance/runner-jobs/incoherent/command-argument-above-limit.json`, an argument of 8,193 characters and 16,385 bytes, so every job failure code now has a case.
|
|
17
|
+
|
|
3
18
|
## 2026-09-27 - 2.1.0
|
|
4
19
|
|
|
5
20
|
### Features
|
|
@@ -1085,6 +1085,204 @@
|
|
|
1085
1085
|
"code": "workflow_yaml_syntax"
|
|
1086
1086
|
}
|
|
1087
1087
|
},
|
|
1088
|
+
{
|
|
1089
|
+
"id": "yaml-character-c0-control-comment",
|
|
1090
|
+
"description": "A comment holds U+0007 (BEL): YAML 1.2 allows no C0 control character but tab, line feed, and carriage return.",
|
|
1091
|
+
"workflow": {
|
|
1092
|
+
"source": "spec: 2.0.0 # \u0007\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
|
|
1093
|
+
},
|
|
1094
|
+
"isolated": true,
|
|
1095
|
+
"expected": {
|
|
1096
|
+
"outcome": "failed",
|
|
1097
|
+
"code": "workflow_yaml_syntax"
|
|
1098
|
+
}
|
|
1099
|
+
},
|
|
1100
|
+
{
|
|
1101
|
+
"id": "yaml-character-c0-control-quoted",
|
|
1102
|
+
"description": "A double-quoted scalar holds a raw U+001B (ESC): not even a quoted scalar allows a C0 control character.",
|
|
1103
|
+
"workflow": {
|
|
1104
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - \"te\u001bst\"\n"
|
|
1105
|
+
},
|
|
1106
|
+
"isolated": true,
|
|
1107
|
+
"expected": {
|
|
1108
|
+
"outcome": "failed",
|
|
1109
|
+
"code": "workflow_yaml_syntax"
|
|
1110
|
+
}
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
"id": "yaml-character-delete-plain",
|
|
1114
|
+
"description": "A plain scalar holds U+007F (DEL), which only a quoted scalar allows.",
|
|
1115
|
+
"workflow": {
|
|
1116
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - te\u007fst\n"
|
|
1117
|
+
},
|
|
1118
|
+
"isolated": true,
|
|
1119
|
+
"expected": {
|
|
1120
|
+
"outcome": "failed",
|
|
1121
|
+
"code": "workflow_yaml_syntax"
|
|
1122
|
+
}
|
|
1123
|
+
},
|
|
1124
|
+
{
|
|
1125
|
+
"id": "yaml-character-c1-control-block",
|
|
1126
|
+
"description": "A block scalar holds U+009B, a C1 control character, which only a quoted scalar allows.",
|
|
1127
|
+
"workflow": {
|
|
1128
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - |\n te\u009bst\n"
|
|
1129
|
+
},
|
|
1130
|
+
"isolated": true,
|
|
1131
|
+
"expected": {
|
|
1132
|
+
"outcome": "failed",
|
|
1133
|
+
"code": "workflow_yaml_syntax"
|
|
1134
|
+
}
|
|
1135
|
+
},
|
|
1136
|
+
{
|
|
1137
|
+
"id": "yaml-character-fffe-plain",
|
|
1138
|
+
"description": "A plain scalar holds U+FFFE, which only a quoted scalar allows.",
|
|
1139
|
+
"workflow": {
|
|
1140
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - te\ufffest\n"
|
|
1141
|
+
},
|
|
1142
|
+
"isolated": true,
|
|
1143
|
+
"expected": {
|
|
1144
|
+
"outcome": "failed",
|
|
1145
|
+
"code": "workflow_yaml_syntax"
|
|
1146
|
+
}
|
|
1147
|
+
},
|
|
1148
|
+
{
|
|
1149
|
+
"id": "yaml-character-ffff-comment",
|
|
1150
|
+
"description": "A comment holds U+FFFF, which only a quoted scalar allows.",
|
|
1151
|
+
"workflow": {
|
|
1152
|
+
"source": "spec: 2.0.0 # \uffff\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
|
|
1153
|
+
},
|
|
1154
|
+
"isolated": true,
|
|
1155
|
+
"expected": {
|
|
1156
|
+
"outcome": "failed",
|
|
1157
|
+
"code": "workflow_yaml_syntax"
|
|
1158
|
+
}
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"id": "yaml-byte-order-mark-in-plain-scalar",
|
|
1162
|
+
"description": "A plain scalar holds U+FEFF: outside a quoted scalar it is only a byte order mark at the start of a line.",
|
|
1163
|
+
"workflow": {
|
|
1164
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - te\ufeffst\n"
|
|
1165
|
+
},
|
|
1166
|
+
"isolated": true,
|
|
1167
|
+
"expected": {
|
|
1168
|
+
"outcome": "failed",
|
|
1169
|
+
"code": "workflow_yaml_syntax"
|
|
1170
|
+
}
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
"id": "yaml-byte-order-mark-in-comment",
|
|
1174
|
+
"description": "A comment holds U+FEFF.",
|
|
1175
|
+
"workflow": {
|
|
1176
|
+
"source": "spec: 2.0.0 # \ufeff\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
|
|
1177
|
+
},
|
|
1178
|
+
"isolated": true,
|
|
1179
|
+
"expected": {
|
|
1180
|
+
"outcome": "failed",
|
|
1181
|
+
"code": "workflow_yaml_syntax"
|
|
1182
|
+
}
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"id": "yaml-byte-order-mark-within-document",
|
|
1186
|
+
"description": "The line of the jobs key begins with U+FEFF, which is a byte order mark only before the document begins or after a document end marker.",
|
|
1187
|
+
"workflow": {
|
|
1188
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\n\ufeffjobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
|
|
1189
|
+
},
|
|
1190
|
+
"expected": {
|
|
1191
|
+
"outcome": "failed",
|
|
1192
|
+
"code": "workflow_yaml_syntax"
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
"id": "yaml-escape-lone-high-surrogate",
|
|
1197
|
+
"description": "The escape \\uD800 without a following low surrogate escape.",
|
|
1198
|
+
"workflow": {
|
|
1199
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - \"te\\uD800st\"\n"
|
|
1200
|
+
},
|
|
1201
|
+
"isolated": true,
|
|
1202
|
+
"expected": {
|
|
1203
|
+
"outcome": "failed",
|
|
1204
|
+
"code": "workflow_yaml_syntax"
|
|
1205
|
+
}
|
|
1206
|
+
},
|
|
1207
|
+
{
|
|
1208
|
+
"id": "yaml-escape-lone-low-surrogate",
|
|
1209
|
+
"description": "The escape \\uDC00 without a preceding high surrogate escape.",
|
|
1210
|
+
"workflow": {
|
|
1211
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - \"te\\uDC00st\"\n"
|
|
1212
|
+
},
|
|
1213
|
+
"isolated": true,
|
|
1214
|
+
"expected": {
|
|
1215
|
+
"outcome": "failed",
|
|
1216
|
+
"code": "workflow_yaml_syntax"
|
|
1217
|
+
}
|
|
1218
|
+
},
|
|
1219
|
+
{
|
|
1220
|
+
"id": "yaml-escape-surrogate-long-form",
|
|
1221
|
+
"description": "A surrogate pair written as \\U escapes; only \\u escapes form a pair.",
|
|
1222
|
+
"workflow": {
|
|
1223
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - \"\\U0000D83D\\U0000DE00\"\n"
|
|
1224
|
+
},
|
|
1225
|
+
"isolated": true,
|
|
1226
|
+
"expected": {
|
|
1227
|
+
"outcome": "failed",
|
|
1228
|
+
"code": "workflow_yaml_syntax"
|
|
1229
|
+
}
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
"id": "yaml-depth-at-limit",
|
|
1233
|
+
"description": "Collections nested 64 deep pass the YAML layer; no schema-valid workflow nests deeper than 8.",
|
|
1234
|
+
"workflow": {
|
|
1235
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n matrix:\n value: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[a]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
|
|
1236
|
+
},
|
|
1237
|
+
"expected": {
|
|
1238
|
+
"outcome": "failed",
|
|
1239
|
+
"code": "workflow_schema_invalid"
|
|
1240
|
+
}
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
"id": "yaml-depth-above-limit",
|
|
1244
|
+
"description": "A collection of depth 65.",
|
|
1245
|
+
"workflow": {
|
|
1246
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n matrix:\n value: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[a]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
|
|
1247
|
+
},
|
|
1248
|
+
"expected": {
|
|
1249
|
+
"outcome": "failed",
|
|
1250
|
+
"code": "workflow_yaml_syntax"
|
|
1251
|
+
}
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
"id": "yaml-document-end-marker-only",
|
|
1255
|
+
"description": "A document end marker begins no document.",
|
|
1256
|
+
"workflow": {
|
|
1257
|
+
"source": "...\n"
|
|
1258
|
+
},
|
|
1259
|
+
"expected": {
|
|
1260
|
+
"outcome": "failed",
|
|
1261
|
+
"code": "workflow_yaml_document_count"
|
|
1262
|
+
}
|
|
1263
|
+
},
|
|
1264
|
+
{
|
|
1265
|
+
"id": "yaml-two-directives-end-markers",
|
|
1266
|
+
"description": "Each --- begins a document, so the file has two empty documents.",
|
|
1267
|
+
"workflow": {
|
|
1268
|
+
"source": "---\n---\n"
|
|
1269
|
+
},
|
|
1270
|
+
"expected": {
|
|
1271
|
+
"outcome": "failed",
|
|
1272
|
+
"code": "workflow_yaml_document_count"
|
|
1273
|
+
}
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
"id": "yaml-empty-explicit-document",
|
|
1277
|
+
"description": "A --- marker with only a comment is one empty document, whose null value fails the schema.",
|
|
1278
|
+
"workflow": {
|
|
1279
|
+
"source": "--- # empty\n"
|
|
1280
|
+
},
|
|
1281
|
+
"expected": {
|
|
1282
|
+
"outcome": "failed",
|
|
1283
|
+
"code": "workflow_schema_invalid"
|
|
1284
|
+
}
|
|
1285
|
+
},
|
|
1088
1286
|
{
|
|
1089
1287
|
"id": "number-positive-infinity",
|
|
1090
1288
|
"workflow": {
|
|
@@ -1371,6 +1569,17 @@
|
|
|
1371
1569
|
"code": "environment_limit_exceeded"
|
|
1372
1570
|
}
|
|
1373
1571
|
},
|
|
1572
|
+
{
|
|
1573
|
+
"id": "workflow-command-argument-above-limit",
|
|
1574
|
+
"description": "An argument of 8,193 characters and 16,385 UTF-8 bytes: within the schema, above the argument limit.",
|
|
1575
|
+
"workflow": {
|
|
1576
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - ééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééa\n"
|
|
1577
|
+
},
|
|
1578
|
+
"expected": {
|
|
1579
|
+
"outcome": "failed",
|
|
1580
|
+
"code": "command_limit_exceeded"
|
|
1581
|
+
}
|
|
1582
|
+
},
|
|
1374
1583
|
{
|
|
1375
1584
|
"id": "workflow-artifact-name-repeated",
|
|
1376
1585
|
"workflow": {
|
|
@@ -2100,6 +2309,617 @@
|
|
|
2100
2309
|
]
|
|
2101
2310
|
}
|
|
2102
2311
|
},
|
|
2312
|
+
{
|
|
2313
|
+
"id": "compile-document-end-markers",
|
|
2314
|
+
"description": "A document followed by two document end markers is one document.",
|
|
2315
|
+
"workflow": {
|
|
2316
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n...\n...\n"
|
|
2317
|
+
},
|
|
2318
|
+
"context": {
|
|
2319
|
+
"repository": {
|
|
2320
|
+
"tenantId": "tenant-1",
|
|
2321
|
+
"repositoryId": "example/app",
|
|
2322
|
+
"url": "https://code.foss.global/example/app"
|
|
2323
|
+
},
|
|
2324
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2325
|
+
"source": {
|
|
2326
|
+
"format": "tar.gz",
|
|
2327
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2328
|
+
"sizeBytes": 1024,
|
|
2329
|
+
"extractedSizeBytes": 4096,
|
|
2330
|
+
"entryCount": 4
|
|
2331
|
+
},
|
|
2332
|
+
"trigger": {
|
|
2333
|
+
"kind": "push",
|
|
2334
|
+
"ref": "refs/heads/main"
|
|
2335
|
+
},
|
|
2336
|
+
"trustClass": "trusted",
|
|
2337
|
+
"protectedTagRun": false,
|
|
2338
|
+
"secrets": []
|
|
2339
|
+
},
|
|
2340
|
+
"policy": {
|
|
2341
|
+
"limits": {
|
|
2342
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2343
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2344
|
+
"maximumSourceEntries": 1000,
|
|
2345
|
+
"maximumLogChunkBytes": 65536,
|
|
2346
|
+
"maximumTotalLogBytes": 10485760,
|
|
2347
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2348
|
+
"maximumWorkspaceEntries": 100000
|
|
2349
|
+
},
|
|
2350
|
+
"ociIsolation": "container"
|
|
2351
|
+
},
|
|
2352
|
+
"expected": {
|
|
2353
|
+
"outcome": "compiled",
|
|
2354
|
+
"workflowDigest": "e2462fbc6d73768acce6bdbd5d691dd473351f1b0ccc6d6b4871ac156e2b6eea",
|
|
2355
|
+
"nodes": [
|
|
2356
|
+
{
|
|
2357
|
+
"id": "test",
|
|
2358
|
+
"kind": "job",
|
|
2359
|
+
"needs": [],
|
|
2360
|
+
"job": {
|
|
2361
|
+
"spec": "2.0.0",
|
|
2362
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2363
|
+
"workflowDigest": "e2462fbc6d73768acce6bdbd5d691dd473351f1b0ccc6d6b4871ac156e2b6eea",
|
|
2364
|
+
"requirements": {
|
|
2365
|
+
"executionProfile": "oci",
|
|
2366
|
+
"isolation": "container",
|
|
2367
|
+
"labels": [
|
|
2368
|
+
"linux"
|
|
2369
|
+
],
|
|
2370
|
+
"features": [
|
|
2371
|
+
"source.tar-gz"
|
|
2372
|
+
],
|
|
2373
|
+
"limits": {
|
|
2374
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2375
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2376
|
+
"maximumSourceEntries": 1000,
|
|
2377
|
+
"maximumArtifactArchiveBytes": 0,
|
|
2378
|
+
"maximumArtifactExtractedBytes": 0,
|
|
2379
|
+
"maximumArtifactEntries": 0,
|
|
2380
|
+
"maximumArtifacts": 0,
|
|
2381
|
+
"maximumCacheArchiveBytes": 0,
|
|
2382
|
+
"maximumCacheExtractedBytes": 0,
|
|
2383
|
+
"maximumCacheEntries": 0,
|
|
2384
|
+
"maximumCaches": 0,
|
|
2385
|
+
"maximumLogChunkBytes": 65536,
|
|
2386
|
+
"maximumTotalLogBytes": 10485760,
|
|
2387
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2388
|
+
"maximumWorkspaceEntries": 100000
|
|
2389
|
+
}
|
|
2390
|
+
},
|
|
2391
|
+
"permissions": {
|
|
2392
|
+
"source": "read",
|
|
2393
|
+
"artifacts": "none",
|
|
2394
|
+
"caches": "none",
|
|
2395
|
+
"images": "none"
|
|
2396
|
+
},
|
|
2397
|
+
"network": {
|
|
2398
|
+
"mode": "none"
|
|
2399
|
+
},
|
|
2400
|
+
"execution": {
|
|
2401
|
+
"profile": "oci",
|
|
2402
|
+
"image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
2403
|
+
},
|
|
2404
|
+
"steps": [
|
|
2405
|
+
{
|
|
2406
|
+
"command": [
|
|
2407
|
+
"pnpm",
|
|
2408
|
+
"test"
|
|
2409
|
+
],
|
|
2410
|
+
"environment": {
|
|
2411
|
+
"SHIPZONE_CI_MATRIX_JSON": "{}",
|
|
2412
|
+
"SHIPZONE_CI_INPUTS_JSON": "{}"
|
|
2413
|
+
}
|
|
2414
|
+
}
|
|
2415
|
+
],
|
|
2416
|
+
"source": {
|
|
2417
|
+
"format": "tar.gz",
|
|
2418
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2419
|
+
"sizeBytes": 1024,
|
|
2420
|
+
"extractedSizeBytes": 4096,
|
|
2421
|
+
"entryCount": 4
|
|
2422
|
+
},
|
|
2423
|
+
"secrets": {},
|
|
2424
|
+
"timeoutMs": 3600000,
|
|
2425
|
+
"artifacts": [],
|
|
2426
|
+
"caches": [],
|
|
2427
|
+
"compiledPlanDigest": "9e9600a688b681648f2fd70bf488c8aee3625570f8e5feb592a98d985aa74fa4"
|
|
2428
|
+
},
|
|
2429
|
+
"secretBindings": {}
|
|
2430
|
+
}
|
|
2431
|
+
]
|
|
2432
|
+
}
|
|
2433
|
+
},
|
|
2434
|
+
{
|
|
2435
|
+
"id": "compile-byte-order-mark-lines",
|
|
2436
|
+
"description": "Runs of U+FEFF at the start of lines before the document, on the line it begins, and after a document end marker are byte order marks, not content.",
|
|
2437
|
+
"workflow": {
|
|
2438
|
+
"source": "\ufeff\ufeff\ufeff# prefix\n\ufeff\n\ufeffspec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n...\n\ufeff\ufeff# after the end marker\n"
|
|
2439
|
+
},
|
|
2440
|
+
"context": {
|
|
2441
|
+
"repository": {
|
|
2442
|
+
"tenantId": "tenant-1",
|
|
2443
|
+
"repositoryId": "example/app",
|
|
2444
|
+
"url": "https://code.foss.global/example/app"
|
|
2445
|
+
},
|
|
2446
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2447
|
+
"source": {
|
|
2448
|
+
"format": "tar.gz",
|
|
2449
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2450
|
+
"sizeBytes": 1024,
|
|
2451
|
+
"extractedSizeBytes": 4096,
|
|
2452
|
+
"entryCount": 4
|
|
2453
|
+
},
|
|
2454
|
+
"trigger": {
|
|
2455
|
+
"kind": "push",
|
|
2456
|
+
"ref": "refs/heads/main"
|
|
2457
|
+
},
|
|
2458
|
+
"trustClass": "trusted",
|
|
2459
|
+
"protectedTagRun": false,
|
|
2460
|
+
"secrets": []
|
|
2461
|
+
},
|
|
2462
|
+
"policy": {
|
|
2463
|
+
"limits": {
|
|
2464
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2465
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2466
|
+
"maximumSourceEntries": 1000,
|
|
2467
|
+
"maximumLogChunkBytes": 65536,
|
|
2468
|
+
"maximumTotalLogBytes": 10485760,
|
|
2469
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2470
|
+
"maximumWorkspaceEntries": 100000
|
|
2471
|
+
},
|
|
2472
|
+
"ociIsolation": "container"
|
|
2473
|
+
},
|
|
2474
|
+
"expected": {
|
|
2475
|
+
"outcome": "compiled",
|
|
2476
|
+
"workflowDigest": "4926ea865106edf755c92fabff734b07678ea31199140d93ab69e4675e66e354",
|
|
2477
|
+
"nodes": [
|
|
2478
|
+
{
|
|
2479
|
+
"id": "test",
|
|
2480
|
+
"kind": "job",
|
|
2481
|
+
"needs": [],
|
|
2482
|
+
"job": {
|
|
2483
|
+
"spec": "2.0.0",
|
|
2484
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2485
|
+
"workflowDigest": "4926ea865106edf755c92fabff734b07678ea31199140d93ab69e4675e66e354",
|
|
2486
|
+
"requirements": {
|
|
2487
|
+
"executionProfile": "oci",
|
|
2488
|
+
"isolation": "container",
|
|
2489
|
+
"labels": [
|
|
2490
|
+
"linux"
|
|
2491
|
+
],
|
|
2492
|
+
"features": [
|
|
2493
|
+
"source.tar-gz"
|
|
2494
|
+
],
|
|
2495
|
+
"limits": {
|
|
2496
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2497
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2498
|
+
"maximumSourceEntries": 1000,
|
|
2499
|
+
"maximumArtifactArchiveBytes": 0,
|
|
2500
|
+
"maximumArtifactExtractedBytes": 0,
|
|
2501
|
+
"maximumArtifactEntries": 0,
|
|
2502
|
+
"maximumArtifacts": 0,
|
|
2503
|
+
"maximumCacheArchiveBytes": 0,
|
|
2504
|
+
"maximumCacheExtractedBytes": 0,
|
|
2505
|
+
"maximumCacheEntries": 0,
|
|
2506
|
+
"maximumCaches": 0,
|
|
2507
|
+
"maximumLogChunkBytes": 65536,
|
|
2508
|
+
"maximumTotalLogBytes": 10485760,
|
|
2509
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2510
|
+
"maximumWorkspaceEntries": 100000
|
|
2511
|
+
}
|
|
2512
|
+
},
|
|
2513
|
+
"permissions": {
|
|
2514
|
+
"source": "read",
|
|
2515
|
+
"artifacts": "none",
|
|
2516
|
+
"caches": "none",
|
|
2517
|
+
"images": "none"
|
|
2518
|
+
},
|
|
2519
|
+
"network": {
|
|
2520
|
+
"mode": "none"
|
|
2521
|
+
},
|
|
2522
|
+
"execution": {
|
|
2523
|
+
"profile": "oci",
|
|
2524
|
+
"image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
2525
|
+
},
|
|
2526
|
+
"steps": [
|
|
2527
|
+
{
|
|
2528
|
+
"command": [
|
|
2529
|
+
"pnpm",
|
|
2530
|
+
"test"
|
|
2531
|
+
],
|
|
2532
|
+
"environment": {
|
|
2533
|
+
"SHIPZONE_CI_MATRIX_JSON": "{}",
|
|
2534
|
+
"SHIPZONE_CI_INPUTS_JSON": "{}"
|
|
2535
|
+
}
|
|
2536
|
+
}
|
|
2537
|
+
],
|
|
2538
|
+
"source": {
|
|
2539
|
+
"format": "tar.gz",
|
|
2540
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2541
|
+
"sizeBytes": 1024,
|
|
2542
|
+
"extractedSizeBytes": 4096,
|
|
2543
|
+
"entryCount": 4
|
|
2544
|
+
},
|
|
2545
|
+
"secrets": {},
|
|
2546
|
+
"timeoutMs": 3600000,
|
|
2547
|
+
"artifacts": [],
|
|
2548
|
+
"caches": [],
|
|
2549
|
+
"compiledPlanDigest": "983b722b51e648482748ebd266d886e8599dad95970026641d5f37f3a2f65986"
|
|
2550
|
+
},
|
|
2551
|
+
"secretBindings": {}
|
|
2552
|
+
}
|
|
2553
|
+
]
|
|
2554
|
+
}
|
|
2555
|
+
},
|
|
2556
|
+
{
|
|
2557
|
+
"id": "compile-byte-order-mark-trailing-comment",
|
|
2558
|
+
"description": "A comment line after the document begins with U+FEFF: without a document end marker, it is the prefix of a following document that is absent.",
|
|
2559
|
+
"workflow": {
|
|
2560
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n\ufeff# trailing comment\n"
|
|
2561
|
+
},
|
|
2562
|
+
"context": {
|
|
2563
|
+
"repository": {
|
|
2564
|
+
"tenantId": "tenant-1",
|
|
2565
|
+
"repositoryId": "example/app",
|
|
2566
|
+
"url": "https://code.foss.global/example/app"
|
|
2567
|
+
},
|
|
2568
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2569
|
+
"source": {
|
|
2570
|
+
"format": "tar.gz",
|
|
2571
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2572
|
+
"sizeBytes": 1024,
|
|
2573
|
+
"extractedSizeBytes": 4096,
|
|
2574
|
+
"entryCount": 4
|
|
2575
|
+
},
|
|
2576
|
+
"trigger": {
|
|
2577
|
+
"kind": "push",
|
|
2578
|
+
"ref": "refs/heads/main"
|
|
2579
|
+
},
|
|
2580
|
+
"trustClass": "trusted",
|
|
2581
|
+
"protectedTagRun": false,
|
|
2582
|
+
"secrets": []
|
|
2583
|
+
},
|
|
2584
|
+
"policy": {
|
|
2585
|
+
"limits": {
|
|
2586
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2587
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2588
|
+
"maximumSourceEntries": 1000,
|
|
2589
|
+
"maximumLogChunkBytes": 65536,
|
|
2590
|
+
"maximumTotalLogBytes": 10485760,
|
|
2591
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2592
|
+
"maximumWorkspaceEntries": 100000
|
|
2593
|
+
},
|
|
2594
|
+
"ociIsolation": "container"
|
|
2595
|
+
},
|
|
2596
|
+
"expected": {
|
|
2597
|
+
"outcome": "compiled",
|
|
2598
|
+
"workflowDigest": "ffd5489463937ced56358a73c93b7423d76aecfd6634c19d0d3b829f74a03890",
|
|
2599
|
+
"nodes": [
|
|
2600
|
+
{
|
|
2601
|
+
"id": "test",
|
|
2602
|
+
"kind": "job",
|
|
2603
|
+
"needs": [],
|
|
2604
|
+
"job": {
|
|
2605
|
+
"spec": "2.0.0",
|
|
2606
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2607
|
+
"workflowDigest": "ffd5489463937ced56358a73c93b7423d76aecfd6634c19d0d3b829f74a03890",
|
|
2608
|
+
"requirements": {
|
|
2609
|
+
"executionProfile": "oci",
|
|
2610
|
+
"isolation": "container",
|
|
2611
|
+
"labels": [
|
|
2612
|
+
"linux"
|
|
2613
|
+
],
|
|
2614
|
+
"features": [
|
|
2615
|
+
"source.tar-gz"
|
|
2616
|
+
],
|
|
2617
|
+
"limits": {
|
|
2618
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2619
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2620
|
+
"maximumSourceEntries": 1000,
|
|
2621
|
+
"maximumArtifactArchiveBytes": 0,
|
|
2622
|
+
"maximumArtifactExtractedBytes": 0,
|
|
2623
|
+
"maximumArtifactEntries": 0,
|
|
2624
|
+
"maximumArtifacts": 0,
|
|
2625
|
+
"maximumCacheArchiveBytes": 0,
|
|
2626
|
+
"maximumCacheExtractedBytes": 0,
|
|
2627
|
+
"maximumCacheEntries": 0,
|
|
2628
|
+
"maximumCaches": 0,
|
|
2629
|
+
"maximumLogChunkBytes": 65536,
|
|
2630
|
+
"maximumTotalLogBytes": 10485760,
|
|
2631
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2632
|
+
"maximumWorkspaceEntries": 100000
|
|
2633
|
+
}
|
|
2634
|
+
},
|
|
2635
|
+
"permissions": {
|
|
2636
|
+
"source": "read",
|
|
2637
|
+
"artifacts": "none",
|
|
2638
|
+
"caches": "none",
|
|
2639
|
+
"images": "none"
|
|
2640
|
+
},
|
|
2641
|
+
"network": {
|
|
2642
|
+
"mode": "none"
|
|
2643
|
+
},
|
|
2644
|
+
"execution": {
|
|
2645
|
+
"profile": "oci",
|
|
2646
|
+
"image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
2647
|
+
},
|
|
2648
|
+
"steps": [
|
|
2649
|
+
{
|
|
2650
|
+
"command": [
|
|
2651
|
+
"pnpm",
|
|
2652
|
+
"test"
|
|
2653
|
+
],
|
|
2654
|
+
"environment": {
|
|
2655
|
+
"SHIPZONE_CI_MATRIX_JSON": "{}",
|
|
2656
|
+
"SHIPZONE_CI_INPUTS_JSON": "{}"
|
|
2657
|
+
}
|
|
2658
|
+
}
|
|
2659
|
+
],
|
|
2660
|
+
"source": {
|
|
2661
|
+
"format": "tar.gz",
|
|
2662
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2663
|
+
"sizeBytes": 1024,
|
|
2664
|
+
"extractedSizeBytes": 4096,
|
|
2665
|
+
"entryCount": 4
|
|
2666
|
+
},
|
|
2667
|
+
"secrets": {},
|
|
2668
|
+
"timeoutMs": 3600000,
|
|
2669
|
+
"artifacts": [],
|
|
2670
|
+
"caches": [],
|
|
2671
|
+
"compiledPlanDigest": "069c5d49b54c41a6dd656a2ffa7b61993d541e519e621d5f678675e6d7fb2c5c"
|
|
2672
|
+
},
|
|
2673
|
+
"secretBindings": {}
|
|
2674
|
+
}
|
|
2675
|
+
]
|
|
2676
|
+
}
|
|
2677
|
+
},
|
|
2678
|
+
{
|
|
2679
|
+
"id": "compile-byte-order-mark-trailing-blank-and-comment",
|
|
2680
|
+
"description": "A blank line, then a comment line that begins with U+FEFF, after the document.",
|
|
2681
|
+
"workflow": {
|
|
2682
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n\n\ufeff# trailing comment\n"
|
|
2683
|
+
},
|
|
2684
|
+
"context": {
|
|
2685
|
+
"repository": {
|
|
2686
|
+
"tenantId": "tenant-1",
|
|
2687
|
+
"repositoryId": "example/app",
|
|
2688
|
+
"url": "https://code.foss.global/example/app"
|
|
2689
|
+
},
|
|
2690
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2691
|
+
"source": {
|
|
2692
|
+
"format": "tar.gz",
|
|
2693
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2694
|
+
"sizeBytes": 1024,
|
|
2695
|
+
"extractedSizeBytes": 4096,
|
|
2696
|
+
"entryCount": 4
|
|
2697
|
+
},
|
|
2698
|
+
"trigger": {
|
|
2699
|
+
"kind": "push",
|
|
2700
|
+
"ref": "refs/heads/main"
|
|
2701
|
+
},
|
|
2702
|
+
"trustClass": "trusted",
|
|
2703
|
+
"protectedTagRun": false,
|
|
2704
|
+
"secrets": []
|
|
2705
|
+
},
|
|
2706
|
+
"policy": {
|
|
2707
|
+
"limits": {
|
|
2708
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2709
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2710
|
+
"maximumSourceEntries": 1000,
|
|
2711
|
+
"maximumLogChunkBytes": 65536,
|
|
2712
|
+
"maximumTotalLogBytes": 10485760,
|
|
2713
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2714
|
+
"maximumWorkspaceEntries": 100000
|
|
2715
|
+
},
|
|
2716
|
+
"ociIsolation": "container"
|
|
2717
|
+
},
|
|
2718
|
+
"expected": {
|
|
2719
|
+
"outcome": "compiled",
|
|
2720
|
+
"workflowDigest": "519951a2272c4bc7bab2c40dff765c2f519a22f63785de56c88a3670e9ed5638",
|
|
2721
|
+
"nodes": [
|
|
2722
|
+
{
|
|
2723
|
+
"id": "test",
|
|
2724
|
+
"kind": "job",
|
|
2725
|
+
"needs": [],
|
|
2726
|
+
"job": {
|
|
2727
|
+
"spec": "2.0.0",
|
|
2728
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2729
|
+
"workflowDigest": "519951a2272c4bc7bab2c40dff765c2f519a22f63785de56c88a3670e9ed5638",
|
|
2730
|
+
"requirements": {
|
|
2731
|
+
"executionProfile": "oci",
|
|
2732
|
+
"isolation": "container",
|
|
2733
|
+
"labels": [
|
|
2734
|
+
"linux"
|
|
2735
|
+
],
|
|
2736
|
+
"features": [
|
|
2737
|
+
"source.tar-gz"
|
|
2738
|
+
],
|
|
2739
|
+
"limits": {
|
|
2740
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2741
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2742
|
+
"maximumSourceEntries": 1000,
|
|
2743
|
+
"maximumArtifactArchiveBytes": 0,
|
|
2744
|
+
"maximumArtifactExtractedBytes": 0,
|
|
2745
|
+
"maximumArtifactEntries": 0,
|
|
2746
|
+
"maximumArtifacts": 0,
|
|
2747
|
+
"maximumCacheArchiveBytes": 0,
|
|
2748
|
+
"maximumCacheExtractedBytes": 0,
|
|
2749
|
+
"maximumCacheEntries": 0,
|
|
2750
|
+
"maximumCaches": 0,
|
|
2751
|
+
"maximumLogChunkBytes": 65536,
|
|
2752
|
+
"maximumTotalLogBytes": 10485760,
|
|
2753
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2754
|
+
"maximumWorkspaceEntries": 100000
|
|
2755
|
+
}
|
|
2756
|
+
},
|
|
2757
|
+
"permissions": {
|
|
2758
|
+
"source": "read",
|
|
2759
|
+
"artifacts": "none",
|
|
2760
|
+
"caches": "none",
|
|
2761
|
+
"images": "none"
|
|
2762
|
+
},
|
|
2763
|
+
"network": {
|
|
2764
|
+
"mode": "none"
|
|
2765
|
+
},
|
|
2766
|
+
"execution": {
|
|
2767
|
+
"profile": "oci",
|
|
2768
|
+
"image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
2769
|
+
},
|
|
2770
|
+
"steps": [
|
|
2771
|
+
{
|
|
2772
|
+
"command": [
|
|
2773
|
+
"pnpm",
|
|
2774
|
+
"test"
|
|
2775
|
+
],
|
|
2776
|
+
"environment": {
|
|
2777
|
+
"SHIPZONE_CI_MATRIX_JSON": "{}",
|
|
2778
|
+
"SHIPZONE_CI_INPUTS_JSON": "{}"
|
|
2779
|
+
}
|
|
2780
|
+
}
|
|
2781
|
+
],
|
|
2782
|
+
"source": {
|
|
2783
|
+
"format": "tar.gz",
|
|
2784
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2785
|
+
"sizeBytes": 1024,
|
|
2786
|
+
"extractedSizeBytes": 4096,
|
|
2787
|
+
"entryCount": 4
|
|
2788
|
+
},
|
|
2789
|
+
"secrets": {},
|
|
2790
|
+
"timeoutMs": 3600000,
|
|
2791
|
+
"artifacts": [],
|
|
2792
|
+
"caches": [],
|
|
2793
|
+
"compiledPlanDigest": "1422d43d648ecde917372620092d9e92efc58638d7de6abf668e795cd85c1c7c"
|
|
2794
|
+
},
|
|
2795
|
+
"secretBindings": {}
|
|
2796
|
+
}
|
|
2797
|
+
]
|
|
2798
|
+
}
|
|
2799
|
+
},
|
|
2800
|
+
{
|
|
2801
|
+
"id": "compile-quoted-scalar-content",
|
|
2802
|
+
"description": "Quoted scalars hold DEL, C1 controls, NEL, U+FEFF, U+FFFE, and U+FFFF as content, and a \\u surrogate pair escape denotes one character.",
|
|
2803
|
+
"workflow": {
|
|
2804
|
+
"source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n runner:\n profile: oci\n labels:\n - linux\n execution:\n profile: oci\n image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - '\u007f\u0080\u0085\ufeff\ufffe\uffff'\n - \"\u009f\ufeff\\uD83D\\uDE00\\U0001F600\\x7F\"\n"
|
|
2805
|
+
},
|
|
2806
|
+
"context": {
|
|
2807
|
+
"repository": {
|
|
2808
|
+
"tenantId": "tenant-1",
|
|
2809
|
+
"repositoryId": "example/app",
|
|
2810
|
+
"url": "https://code.foss.global/example/app"
|
|
2811
|
+
},
|
|
2812
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2813
|
+
"source": {
|
|
2814
|
+
"format": "tar.gz",
|
|
2815
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2816
|
+
"sizeBytes": 1024,
|
|
2817
|
+
"extractedSizeBytes": 4096,
|
|
2818
|
+
"entryCount": 4
|
|
2819
|
+
},
|
|
2820
|
+
"trigger": {
|
|
2821
|
+
"kind": "push",
|
|
2822
|
+
"ref": "refs/heads/main"
|
|
2823
|
+
},
|
|
2824
|
+
"trustClass": "trusted",
|
|
2825
|
+
"protectedTagRun": false,
|
|
2826
|
+
"secrets": []
|
|
2827
|
+
},
|
|
2828
|
+
"policy": {
|
|
2829
|
+
"limits": {
|
|
2830
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2831
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2832
|
+
"maximumSourceEntries": 1000,
|
|
2833
|
+
"maximumLogChunkBytes": 65536,
|
|
2834
|
+
"maximumTotalLogBytes": 10485760,
|
|
2835
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2836
|
+
"maximumWorkspaceEntries": 100000
|
|
2837
|
+
},
|
|
2838
|
+
"ociIsolation": "container"
|
|
2839
|
+
},
|
|
2840
|
+
"expected": {
|
|
2841
|
+
"outcome": "compiled",
|
|
2842
|
+
"workflowDigest": "7292aa64a747a9841d9c8bc71f22c2bcaccb4ec8cad2f6bd0c638cb2802705f3",
|
|
2843
|
+
"nodes": [
|
|
2844
|
+
{
|
|
2845
|
+
"id": "test",
|
|
2846
|
+
"kind": "job",
|
|
2847
|
+
"needs": [],
|
|
2848
|
+
"job": {
|
|
2849
|
+
"spec": "2.0.0",
|
|
2850
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2851
|
+
"workflowDigest": "7292aa64a747a9841d9c8bc71f22c2bcaccb4ec8cad2f6bd0c638cb2802705f3",
|
|
2852
|
+
"requirements": {
|
|
2853
|
+
"executionProfile": "oci",
|
|
2854
|
+
"isolation": "container",
|
|
2855
|
+
"labels": [
|
|
2856
|
+
"linux"
|
|
2857
|
+
],
|
|
2858
|
+
"features": [
|
|
2859
|
+
"source.tar-gz"
|
|
2860
|
+
],
|
|
2861
|
+
"limits": {
|
|
2862
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
2863
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
2864
|
+
"maximumSourceEntries": 1000,
|
|
2865
|
+
"maximumArtifactArchiveBytes": 0,
|
|
2866
|
+
"maximumArtifactExtractedBytes": 0,
|
|
2867
|
+
"maximumArtifactEntries": 0,
|
|
2868
|
+
"maximumArtifacts": 0,
|
|
2869
|
+
"maximumCacheArchiveBytes": 0,
|
|
2870
|
+
"maximumCacheExtractedBytes": 0,
|
|
2871
|
+
"maximumCacheEntries": 0,
|
|
2872
|
+
"maximumCaches": 0,
|
|
2873
|
+
"maximumLogChunkBytes": 65536,
|
|
2874
|
+
"maximumTotalLogBytes": 10485760,
|
|
2875
|
+
"maximumWorkspaceBytes": 268435456,
|
|
2876
|
+
"maximumWorkspaceEntries": 100000
|
|
2877
|
+
}
|
|
2878
|
+
},
|
|
2879
|
+
"permissions": {
|
|
2880
|
+
"source": "read",
|
|
2881
|
+
"artifacts": "none",
|
|
2882
|
+
"caches": "none",
|
|
2883
|
+
"images": "none"
|
|
2884
|
+
},
|
|
2885
|
+
"network": {
|
|
2886
|
+
"mode": "none"
|
|
2887
|
+
},
|
|
2888
|
+
"execution": {
|
|
2889
|
+
"profile": "oci",
|
|
2890
|
+
"image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
2891
|
+
},
|
|
2892
|
+
"steps": [
|
|
2893
|
+
{
|
|
2894
|
+
"command": [
|
|
2895
|
+
"pnpm",
|
|
2896
|
+
"\u007f\u0080\u0085\ufeff\ufffe\uffff",
|
|
2897
|
+
"\u009f\ufeff😀😀\u007f"
|
|
2898
|
+
],
|
|
2899
|
+
"environment": {
|
|
2900
|
+
"SHIPZONE_CI_MATRIX_JSON": "{}",
|
|
2901
|
+
"SHIPZONE_CI_INPUTS_JSON": "{}"
|
|
2902
|
+
}
|
|
2903
|
+
}
|
|
2904
|
+
],
|
|
2905
|
+
"source": {
|
|
2906
|
+
"format": "tar.gz",
|
|
2907
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
2908
|
+
"sizeBytes": 1024,
|
|
2909
|
+
"extractedSizeBytes": 4096,
|
|
2910
|
+
"entryCount": 4
|
|
2911
|
+
},
|
|
2912
|
+
"secrets": {},
|
|
2913
|
+
"timeoutMs": 3600000,
|
|
2914
|
+
"artifacts": [],
|
|
2915
|
+
"caches": [],
|
|
2916
|
+
"compiledPlanDigest": "f9ce334d6a205eb2f4671c08859661340985ceb30b0fc3c8caaea71d9d82c896"
|
|
2917
|
+
},
|
|
2918
|
+
"secretBindings": {}
|
|
2919
|
+
}
|
|
2920
|
+
]
|
|
2921
|
+
}
|
|
2922
|
+
},
|
|
2103
2923
|
{
|
|
2104
2924
|
"id": "compile-matrix-expansion",
|
|
2105
2925
|
"description": "Expansion follows dimension declaration order (z before \"2\", the first dimension varying slowest); 0x1F, -0.0, and 1e3 resolve to 31, 0, and 1000 and \"01\" stays a string; the innermost environment level wins; limits take the largest declared maximum of each field; report needs every expansion and precedes test in plan order.",
|
|
@@ -306,6 +306,17 @@
|
|
|
306
306
|
"code": "job_limit_incoherent"
|
|
307
307
|
}
|
|
308
308
|
},
|
|
309
|
+
{
|
|
310
|
+
"id": "fixture-incoherent-command-argument-above-limit",
|
|
311
|
+
"description": "An argument of 8,193 characters and 16,385 UTF-8 bytes: within the schema, above the argument limit.",
|
|
312
|
+
"job": {
|
|
313
|
+
"fixture": "conformance/runner-jobs/incoherent/command-argument-above-limit.json"
|
|
314
|
+
},
|
|
315
|
+
"expected": {
|
|
316
|
+
"outcome": "incoherent",
|
|
317
|
+
"code": "job_command_limit_exceeded"
|
|
318
|
+
}
|
|
319
|
+
},
|
|
309
320
|
{
|
|
310
321
|
"id": "fixture-incoherent-environment-above-limit",
|
|
311
322
|
"description": "128 step environment names and NPM_CONFIG_USERCONFIG of npmRead: 129 names.",
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"spec": "2.0.0",
|
|
3
|
+
"sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
4
|
+
"workflowDigest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
5
|
+
"compiledPlanDigest": "71be63b5e4ddbe4aef1e4519f9c37756807a5e49b9071514050793d4945021bd",
|
|
6
|
+
"requirements": {
|
|
7
|
+
"executionProfile": "oci",
|
|
8
|
+
"isolation": "container",
|
|
9
|
+
"labels": ["linux"],
|
|
10
|
+
"features": ["source.tar-gz"],
|
|
11
|
+
"limits": {
|
|
12
|
+
"maximumSourceArchiveBytes": 1048576,
|
|
13
|
+
"maximumSourceExtractedBytes": 4194304,
|
|
14
|
+
"maximumSourceEntries": 1000,
|
|
15
|
+
"maximumArtifactArchiveBytes": 0,
|
|
16
|
+
"maximumArtifactExtractedBytes": 0,
|
|
17
|
+
"maximumArtifactEntries": 0,
|
|
18
|
+
"maximumArtifacts": 0,
|
|
19
|
+
"maximumCacheArchiveBytes": 0,
|
|
20
|
+
"maximumCacheExtractedBytes": 0,
|
|
21
|
+
"maximumCacheEntries": 0,
|
|
22
|
+
"maximumCaches": 0,
|
|
23
|
+
"maximumLogChunkBytes": 65536,
|
|
24
|
+
"maximumTotalLogBytes": 10485760,
|
|
25
|
+
"maximumWorkspaceBytes": 268435456,
|
|
26
|
+
"maximumWorkspaceEntries": 100000
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"permissions": {
|
|
30
|
+
"source": "read",
|
|
31
|
+
"artifacts": "none",
|
|
32
|
+
"caches": "none",
|
|
33
|
+
"images": "none"
|
|
34
|
+
},
|
|
35
|
+
"network": {
|
|
36
|
+
"mode": "none"
|
|
37
|
+
},
|
|
38
|
+
"execution": {
|
|
39
|
+
"profile": "oci",
|
|
40
|
+
"image": "registry.example/ci@sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
41
|
+
"workingDirectory": "/workspace"
|
|
42
|
+
},
|
|
43
|
+
"steps": [
|
|
44
|
+
{
|
|
45
|
+
"name": "Test",
|
|
46
|
+
"command": ["pnpm", "ééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééa"],
|
|
47
|
+
"environment": {
|
|
48
|
+
"CI": "true",
|
|
49
|
+
"SHIPZONE_CI_INPUTS_JSON": "{}",
|
|
50
|
+
"SHIPZONE_CI_MATRIX_JSON": "{}"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"source": {
|
|
55
|
+
"format": "tar.gz",
|
|
56
|
+
"sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
57
|
+
"sizeBytes": 1024,
|
|
58
|
+
"extractedSizeBytes": 4096,
|
|
59
|
+
"entryCount": 4
|
|
60
|
+
},
|
|
61
|
+
"secrets": {},
|
|
62
|
+
"timeoutMs": 60000,
|
|
63
|
+
"resources": {
|
|
64
|
+
"memoryBytes": 268435456,
|
|
65
|
+
"cpus": 1,
|
|
66
|
+
"pids": 256
|
|
67
|
+
},
|
|
68
|
+
"artifacts": [],
|
|
69
|
+
"caches": []
|
|
70
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@ship.zone/ci-spec',
|
|
6
|
-
version: '2.1.
|
|
6
|
+
version: '2.1.1',
|
|
7
7
|
description: 'The ship.zone CI standard: language-neutral CI workflow and runner protocol specifications.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxvQkFBb0I7SUFDMUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZGQUE2RjtDQUMzRyxDQUFBIn0=
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -12,7 +12,7 @@ The package version is the specification version, and it is the only version in
|
|
|
12
12
|
spec: 2.0.0
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Compiled jobs and runner protocol messages carry the same `spec` field. An implementation built against version `I` accepts a declared version `D` when both have the same major version and `D` is not newer than `I`; the rule is defined in `spec/runner-protocol.md` and fixed by `conformance/version-cases.json`. Every incompatible change is a new major version, and additions arrive as new minor versions: a workflow that uses a construct introduced in a later minor version declares that version or a later one. Version 2.0.0 renames the package and its normative identifiers (see Migrating from @foss.global/ci-spec), removes the 1.x cross-version rules, and completes the compilation rules: one stable failure code per compilation failure with a fixed precedence, a stricter YAML subset, the derivation of every compiled job member, and the identities of expanded nodes. Version 2.1.0 adds job failure codes: every coherence rule of a compiled job has exactly one code, and a job that is not coherent carries the code of the first rule it violates (see Job Coherence in `spec/runner-protocol.md`); it also exports the reserved names as constants. Documents written against 2.0.0 stay valid. The history of the 1.x rules is in the changelog.
|
|
15
|
+
Compiled jobs and runner protocol messages carry the same `spec` field. An implementation built against version `I` accepts a declared version `D` when both have the same major version and `D` is not newer than `I`; the rule is defined in `spec/runner-protocol.md` and fixed by `conformance/version-cases.json`. Every incompatible change is a new major version, and additions arrive as new minor versions: a workflow that uses a construct introduced in a later minor version declares that version or a later one. Version 2.0.0 renames the package and its normative identifiers (see Migrating from @foss.global/ci-spec), removes the 1.x cross-version rules, and completes the compilation rules: one stable failure code per compilation failure with a fixed precedence, a stricter YAML subset, the derivation of every compiled job member, and the identities of expanded nodes. Version 2.1.0 adds job failure codes: every coherence rule of a compiled job has exactly one code, and a job that is not coherent carries the code of the first rule it violates (see Job Coherence in `spec/runner-protocol.md`); it also exports the reserved names as constants. Version 2.1.1 clarifies compilation: it states the YAML 1.2 character, byte order mark, escape, and document counting rules, bounds collection nesting to 64, and counts the 16 KiB command argument limit in UTF-8 bytes. Documents written against 2.0.0 stay valid. The history of the 1.x rules is in the changelog.
|
|
16
16
|
|
|
17
17
|
## Issue Reporting and Security
|
|
18
18
|
|
package/spec/ci-actions.md
CHANGED
|
@@ -12,7 +12,7 @@ The coordinator reads the workflow as bytes from the exact source commit being e
|
|
|
12
12
|
|
|
13
13
|
Parsing uses YAML 1.2 with the core schema and requires:
|
|
14
14
|
|
|
15
|
-
- exactly one document
|
|
15
|
+
- exactly one document. As in YAML 1.2, a `---` directives end marker begins a document, and so does content that no marker precedes; a document end marker `...`, a comment, a blank line, and a byte order mark begin none. An empty file, a file of only comments or only `...` markers, and a file with a second document fail with `workflow_yaml_document_count`. A document followed by several `...` markers is one document, and a file of only `--- # comment` is one empty document, whose null value fails schema validation;
|
|
16
16
|
- no YAML or TAG directive (`workflow_yaml_directive`);
|
|
17
17
|
- unique keys in every mapping (`workflow_yaml_duplicate_key`);
|
|
18
18
|
- string mapping keys: every key is a scalar whose core-schema resolution is a string, so a plain key such as `1`, `true`, `null`, or `~`, and every collection used as a key, fails with `workflow_yaml_key_type`; such a key is written quoted, for example `"1"`;
|
|
@@ -20,6 +20,13 @@ Parsing uses YAML 1.2 with the core schema and requires:
|
|
|
20
20
|
- no merge key: a `<<` key, plain or quoted, fails with `workflow_yaml_merge_key`;
|
|
21
21
|
- no explicit tag, including the standard `!!` tags and the non-specific tag `!` (`workflow_yaml_tag`).
|
|
22
22
|
|
|
23
|
+
The following YAML 1.2 rules fail with `workflow_yaml_syntax`:
|
|
24
|
+
|
|
25
|
+
- Characters. A C0 control character other than tab, line feed, and carriage return is allowed nowhere, not even in a quoted scalar. DEL (U+007F), a C1 control character other than NEL (U+0080 to U+009F except U+0085), U+FFFE, U+FFFF, and U+FEFF are allowed inside a single- or double-quoted scalar, where they are content, and nowhere else, except where U+FEFF is a byte order mark. Unpaired surrogates cannot occur, because the file is well-formed UTF-8.
|
|
26
|
+
- Byte order marks. One or more U+FEFF at the start of a line are byte order marks, which are not content, when the line comes before the one on which the document begins, is that line, or comes after a document end marker `...`. They are also byte order marks when the line comes after the document's content and it and every later line up to the end of the file, or up to the next `---` or `...` marker, are blank or comment lines: YAML 1.2 lets a document prefix follow a document without a `...` marker, and a `---` after it begins a second document. The file's own leading byte order mark is the first of them. Any other U+FEFF outside a quoted scalar, for example in a plain or block scalar, in a comment, or at the start of a line within the document or followed by content, fails.
|
|
27
|
+
- Escapes. Every escape in a double-quoted scalar denotes a Unicode scalar value, so every string can be serialized with RFC 8785. A `\u` escape of a high surrogate (`\uD800` to `\uDBFF`) directly followed by a `\u` escape of a low surrogate (`\uDC00` to `\uDFFF`) denotes the one character the pair encodes, as in JSON: `"\uD83D\uDE00"` is U+1F600. Every other escape of a surrogate code point fails, such as a lone `\uD800` or `\uDC00` or the escape `\U0000D800`. Escapes of other characters, including control characters such as `\0` and `\x7F`, are content.
|
|
28
|
+
- Nesting depth. Collections nest at most 64 deep: the root collection has depth 1, and a collection that is an entry of a sequence, or a key or value of a mapping, of depth *d* has depth *d* + 1. A collection of depth 65 fails, so a parser can stop there instead of exhausting its stack. The deepest collection of a schema-valid workflow, an alias of `publish.images[].destinations[].aliases`, has depth 8.
|
|
29
|
+
|
|
23
30
|
Every other parser error or warning fails with `workflow_yaml_syntax`. The version check (see Specification Version) and JSON Schema validation against `schemas/ci_actions.schema.json`, which fails with `workflow_schema_invalid`, run only after these YAML-level rules pass.
|
|
24
31
|
|
|
25
32
|
Every plain scalar that the core schema resolves to an integer or a float is converted from its original token before schema validation; quoted scalars are strings and never numbers:
|
|
@@ -166,7 +173,7 @@ Jobs form an acyclic graph through `needs`. A dependency on a job the workflow d
|
|
|
166
173
|
|
|
167
174
|
Steps use argument arrays. Shell strings, arbitrary expression languages, GitHub action compatibility, and unpinned third-party actions are not supported. The coordinator preserves declaration order and emits an ordered compiled `steps` array. Each compiled step contains its command and the complete merged non-secret environment; runners do not perform workflow-level environment merging.
|
|
168
175
|
|
|
169
|
-
Environment maps are merged in workflow, job, then step order: a name defined at more than one of these levels takes the value of the innermost one. The workflow environment applies only to the steps of `oci` and `vm` jobs. Secret references are job-wide and are injected into every step only after trust evaluation. A secret target equal to a name of the merged environment of any step of the job, two secret references with one target, and any `SHIPZONE_CI_*` name in an environment map or as a secret target fail with `environment_conflict`. A step whose merged environment names, secret targets, and reserved names (see the runner protocol's OCI Container Profile) number more than 128 fails with `environment_limit_exceeded`. A step whose command arguments total more than 131,072 UTF-8 bytes fails with `command_limit_exceeded
|
|
176
|
+
Environment maps are merged in workflow, job, then step order: a name defined at more than one of these levels takes the value of the innermost one. The workflow environment applies only to the steps of `oci` and `vm` jobs. Secret references are job-wide and are injected into every step only after trust evaluation. A secret target equal to a name of the merged environment of any step of the job, two secret references with one target, and any `SHIPZONE_CI_*` name in an environment map or as a secret target fail with `environment_conflict`. A step whose merged environment names, secret targets, and reserved names (see the runner protocol's OCI Container Profile) number more than 128 fails with `environment_limit_exceeded`. A step with a command argument of more than 16,384 UTF-8 bytes, or whose command arguments total more than 131,072 UTF-8 bytes, fails with `command_limit_exceeded`; the schema bounds an argument to 16,384 characters, which can exceed 16,384 bytes.
|
|
170
177
|
|
|
171
178
|
Artifact and cache names must be unique within a job; a repeated name fails with `transfer_name_duplicate`. Cache paths must not overlap each other: two paths overlap when, split at `/` with empty and `.` segments removed, the segments of one are a prefix of the segments of the other. Overlapping paths fail with `cache_path_overlap`. Artifacts and caches are `tar.gz` archives with explicit compressed-byte, extracted-byte, and entry ceilings. Produced digest and size metadata is measured at transfer time and is not part of the compiled declaration.
|
|
172
179
|
|
|
@@ -351,7 +358,7 @@ Every job node compiles to one compiled job, a function of the workflow, the run
|
|
|
351
358
|
- Secret references: 128 per job.
|
|
352
359
|
- Artifacts: 64 per job.
|
|
353
360
|
- Caches: 32 per job.
|
|
354
|
-
- Command: 128 arguments, 16 KiB each, 128 KiB total.
|
|
361
|
+
- Command: 128 arguments, 16 KiB each, 128 KiB total after UTF-8 encoding.
|
|
355
362
|
- Artifact archive: 16 GiB compressed, 128 GiB extracted, 1,000,000 entries per item.
|
|
356
363
|
- Cache archive: 16 GiB compressed, 128 GiB extracted, 1,000,000 entries per item.
|
|
357
364
|
- Workspace: 1 TiB and 2,000,000 entries.
|
|
@@ -368,7 +375,7 @@ A compilation failure fails the run before any job is enqueued and carries exact
|
|
|
368
375
|
| --- | --- | --- |
|
|
369
376
|
| source | `workflow_too_large` | the file has more than 262,144 bytes (Parsing) |
|
|
370
377
|
| source | `workflow_encoding_invalid` | the file is not well-formed UTF-8 (Parsing) |
|
|
371
|
-
| yaml | `workflow_yaml_syntax` | any other YAML parser error or warning (Parsing) |
|
|
378
|
+
| yaml | `workflow_yaml_syntax` | a character, byte order mark, escape, or nesting depth that YAML 1.2 or Parsing rejects, or any other YAML parser error or warning (Parsing) |
|
|
372
379
|
| yaml | `workflow_yaml_document_count` | no document, or more than one (Parsing) |
|
|
373
380
|
| yaml | `workflow_yaml_directive` | a YAML or TAG directive (Parsing) |
|
|
374
381
|
| yaml | `workflow_yaml_duplicate_key` | a mapping repeats a key (Parsing) |
|
|
@@ -389,7 +396,7 @@ A compilation failure fails the run before any job is enqueued and carries exact
|
|
|
389
396
|
| workflow | `permission_insufficient` | a declaration or build job beyond its resolved permissions (Permissions) |
|
|
390
397
|
| workflow | `environment_conflict` | a secret target or reserved-name conflict (Jobs and Steps) |
|
|
391
398
|
| workflow | `environment_limit_exceeded` | more than 128 names in a step (Jobs and Steps) |
|
|
392
|
-
| workflow | `command_limit_exceeded` | a command above 131,072 bytes (Jobs and Steps) |
|
|
399
|
+
| workflow | `command_limit_exceeded` | a command argument above 16,384 bytes or a command above 131,072 bytes (Jobs and Steps) |
|
|
393
400
|
| workflow | `transfer_name_duplicate` | a repeated artifact or cache name (Jobs and Steps) |
|
|
394
401
|
| workflow | `cache_path_overlap` | overlapping cache paths (Jobs and Steps) |
|
|
395
402
|
| workflow | `resources_invalid` | `sharedMemoryBytes` above `memoryBytes` (Resources) |
|
package/spec/runner-protocol.md
CHANGED
|
@@ -127,6 +127,7 @@ A compiled job is *coherent* when it violates no rule of the following table. Th
|
|
|
127
127
|
| `job_environment_incoherent` | a secret target that starts with `SHIPZONE_CI_`, or a step environment name that starts with it and is not `SHIPZONE_CI_MATRIX_JSON` or `SHIPZONE_CI_INPUTS_JSON` (OCI Container Profile) |
|
|
128
128
|
| `job_environment_incoherent` | an `oci` or `vm` step whose environment lacks `SHIPZONE_CI_MATRIX_JSON` or `SHIPZONE_CI_INPUTS_JSON`, or whose value of one of them is not the RFC 8785 serialization of a JSON object (OCI Container Profile) |
|
|
129
129
|
| `job_environment_incoherent` | an `oci` or `vm` step whose environment names, the job's secret targets, and, in a job with `npmRead`, `NPM_CONFIG_USERCONFIG` are not unique or number more than 128 (OCI Container Profile, Protocol Limits) |
|
|
130
|
+
| `job_command_limit_exceeded` | a step command argument of more than 16,384 UTF-8 bytes; `schemas/runner-job.schema.json` bounds an argument only to 16,384 characters (Protocol Limits) |
|
|
130
131
|
| `job_command_limit_exceeded` | a step command whose arguments total more than 131,072 UTF-8 bytes (Protocol Limits) |
|
|
131
132
|
| `job_secret_inadmissible` | a value of `secrets` shorter than 8 UTF-8 bytes (Secret Redaction) |
|
|
132
133
|
| `job_digest_mismatch` | a `compiledPlanDigest` other than the digest Canonical Digests defines for the job |
|
package/spec/runner.openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "ship.zone CI Runner Protocol",
|
|
5
|
-
"version": "2.1.
|
|
5
|
+
"version": "2.1.1",
|
|
6
6
|
"description": "Language-neutral, outbound runner protocol of @ship.zone/ci-spec. info.version is the specification version this description is written against. This draft is incompatible with the legacy internal runner protocol it replaces.",
|
|
7
7
|
"license": {
|
|
8
8
|
"name": "MIT",
|