@ship.zone/ci-spec 2.0.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.
Files changed (36) hide show
  1. package/changelog.md +33 -0
  2. package/conformance/compile-cases.json +822 -2
  3. package/conformance/runner-job-cases.json +714 -0
  4. package/conformance/runner-job-cases.schema.json +134 -0
  5. package/conformance/runner-jobs/incoherent/artifact-maximum-above-limit.json +91 -0
  6. package/conformance/runner-jobs/incoherent/build-secret-unknown-target.json +104 -0
  7. package/conformance/runner-jobs/incoherent/cache-count-above-limit.json +91 -0
  8. package/conformance/runner-jobs/incoherent/command-argument-above-limit.json +70 -0
  9. package/conformance/runner-jobs/incoherent/environment-above-limit.json +206 -0
  10. package/conformance/runner-jobs/incoherent/plan-digest-mismatch.json +70 -0
  11. package/conformance/runner-jobs/incoherent/precedence-limit-before-digest.json +70 -0
  12. package/conformance/runner-jobs/incoherent/reserved-prefix-environment.json +71 -0
  13. package/conformance/runner-jobs/incoherent/reserved-prefix-secret-target.json +72 -0
  14. package/conformance/runner-jobs/incoherent/reserved-variable-missing.json +69 -0
  15. package/conformance/runner-jobs/incoherent/reserved-variable-not-canonical.json +70 -0
  16. package/conformance/runner-jobs/incoherent/secret-target-environment-duplicate.json +72 -0
  17. package/conformance/runner-jobs/incoherent/secret-target-without-build-secret.json +101 -0
  18. package/conformance/runner-jobs/incoherent/secret-value-too-short.json +72 -0
  19. package/conformance/runner-jobs/incoherent/shared-memory-above-memory.json +71 -0
  20. package/conformance/runner-jobs/incoherent/source-above-limit.json +70 -0
  21. package/conformance/runner-jobs/invalid/artifacts-feature-missing.json +91 -0
  22. package/conformance/runner-jobs/invalid/artifacts-none-permission.json +91 -0
  23. package/conformance/runner-jobs/invalid/build-without-push-permission.json +100 -0
  24. package/conformance/runner-jobs/invalid/read-write-cache-read-permission.json +91 -0
  25. package/conformance/runner-jobs/invalid/source-feature-missing.json +70 -0
  26. package/conformance/runner-jobs/invalid/vm-without-platform.json +81 -0
  27. package/dist_ts/00_commitinfo_data.js +1 -1
  28. package/dist_ts/constants.d.ts +42 -0
  29. package/dist_ts/constants.js +57 -1
  30. package/package.json +4 -2
  31. package/readme.md +13 -4
  32. package/spec/ci-actions.md +12 -5
  33. package/spec/runner-protocol.md +32 -1
  34. package/spec/runner.openapi.json +1 -1
  35. package/ts/00_commitinfo_data.ts +1 -1
  36. package/ts/constants.ts +65 -0
@@ -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": {
@@ -1169,7 +1367,7 @@
1169
1367
  "id": "layer-yaml-before-version",
1170
1368
  "description": "An alias and a newer spec: the YAML layer decides.",
1171
1369
  "workflow": {
1172
- "source": "spec: 2.1.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: &image registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
1370
+ "source": "spec: 2.999.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: &image registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n steps:\n - run:\n - pnpm\n - test\n"
1173
1371
  },
1174
1372
  "expected": {
1175
1373
  "outcome": "failed",
@@ -1180,7 +1378,7 @@
1180
1378
  "id": "version-newer-before-schema",
1181
1379
  "description": "A newer minor spec with a property this version does not define fails with spec_incompatible, not a schema error.",
1182
1380
  "workflow": {
1183
- "source": "spec: 2.1.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\nfutureField: true\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"
1381
+ "source": "spec: 2.999.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\nfutureField: true\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"
1184
1382
  },
1185
1383
  "expected": {
1186
1384
  "outcome": "failed",
@@ -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.",