@ship.zone/ci-spec 2.1.0 → 2.1.2

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.
@@ -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": {
@@ -1473,9 +1682,10 @@
1473
1682
  }
1474
1683
  },
1475
1684
  {
1476
- "id": "trigger-branch-not-matched",
1685
+ "id": "workflow-transfer-names-per-kind",
1686
+ "description": "An artifact and a cache of one job are both named results: artifacts and caches are separate name spaces. The workflow passes the workflow layer; the job's default timeout of 3,600,000 then exceeds the deployment maximum.",
1477
1687
  "workflow": {
1478
- "fixture": "conformance/ci-actions/valid/minimal.yml"
1688
+ "source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: write\n caches: read-write\n images: none\n npm: none\n releaseAssets: none\njobs:\n test:\n artifacts:\n - name: results\n path: results\n when: always\n required: false\n maximumBytes: 1048576\n maximumExtractedBytes: 4194304\n maximumEntries: 100\n caches:\n - name: results\n key: results\n access: read-write\n paths:\n - .cache\n maximumBytes: 1048576\n maximumExtractedBytes: 4194304\n maximumEntries: 100\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"
1479
1689
  },
1480
1690
  "context": {
1481
1691
  "repository": {
@@ -1493,7 +1703,7 @@
1493
1703
  },
1494
1704
  "trigger": {
1495
1705
  "kind": "push",
1496
- "ref": "refs/heads/feature"
1706
+ "ref": "refs/heads/main"
1497
1707
  },
1498
1708
  "trustClass": "trusted",
1499
1709
  "protectedTagRun": false,
@@ -1509,16 +1719,19 @@
1509
1719
  "maximumWorkspaceBytes": 268435456,
1510
1720
  "maximumWorkspaceEntries": 100000
1511
1721
  },
1512
- "ociIsolation": "container"
1722
+ "ociIsolation": "container",
1723
+ "maximumTimeoutMs": 1800000
1513
1724
  },
1514
1725
  "expected": {
1515
- "outcome": "not-triggered"
1726
+ "outcome": "failed",
1727
+ "code": "policy_timeout_exceeded"
1516
1728
  }
1517
1729
  },
1518
1730
  {
1519
- "id": "trigger-kind-not-declared",
1731
+ "id": "workflow-expansion-limit-assembly-node",
1732
+ "description": "31 by 8 matrix combinations and 8 build platforms are 256 expanded jobs; the assembly node of the build job is a 257th node and does not count. The workflow passes the workflow layer; the job's default timeout of 3,600,000 then exceeds the deployment maximum.",
1520
1733
  "workflow": {
1521
- "fixture": "conformance/ci-actions/valid/minimal.yml"
1734
+ "source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: candidate\n npm: none\n releaseAssets: none\njobs:\n image:\n runner:\n profile: oci-image\n labels:\n - builder\n build:\n context: .\n dockerfile: Dockerfile\n platforms:\n - linux/amd64\n - linux/arm64\n - linux/arm/v7\n - linux/arm/v6\n - linux/386\n - linux/ppc64le\n - linux/s390x\n - linux/riscv64\n test:\n matrix:\n a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]\n b: [0, 1, 2, 3, 4, 5, 6, 7]\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"
1522
1735
  },
1523
1736
  "context": {
1524
1737
  "repository": {
@@ -1535,8 +1748,8 @@
1535
1748
  "entryCount": 4
1536
1749
  },
1537
1750
  "trigger": {
1538
- "kind": "tag",
1539
- "ref": "refs/tags/v1.0.0"
1751
+ "kind": "push",
1752
+ "ref": "refs/heads/main"
1540
1753
  },
1541
1754
  "trustClass": "trusted",
1542
1755
  "protectedTagRun": false,
@@ -1552,16 +1765,52 @@
1552
1765
  "maximumWorkspaceBytes": 268435456,
1553
1766
  "maximumWorkspaceEntries": 100000
1554
1767
  },
1555
- "ociIsolation": "container"
1768
+ "ociIsolation": "container",
1769
+ "maximumTimeoutMs": 1800000
1556
1770
  },
1557
1771
  "expected": {
1558
- "outcome": "not-triggered"
1772
+ "outcome": "failed",
1773
+ "code": "policy_timeout_exceeded"
1559
1774
  }
1560
1775
  },
1561
1776
  {
1562
- "id": "trigger-manual-not-declared",
1777
+ "id": "workflow-expansion-limit-build-platforms",
1778
+ "description": "31 by 8 matrix combinations, 8 build platforms, and 1 job are 257 expanded jobs: per-platform build jobs count.",
1563
1779
  "workflow": {
1564
- "fixture": "conformance/ci-actions/valid/minimal.yml"
1780
+ "source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: candidate\n npm: none\n releaseAssets: none\njobs:\n image:\n runner:\n profile: oci-image\n labels:\n - builder\n build:\n context: .\n dockerfile: Dockerfile\n platforms:\n - linux/amd64\n - linux/arm64\n - linux/arm/v7\n - linux/arm/v6\n - linux/386\n - linux/ppc64le\n - linux/s390x\n - linux/riscv64\n lint:\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 test:\n matrix:\n a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]\n b: [0, 1, 2, 3, 4, 5, 6, 7]\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"
1781
+ },
1782
+ "expected": {
1783
+ "outcome": "failed",
1784
+ "code": "expansion_limit_exceeded"
1785
+ }
1786
+ },
1787
+ {
1788
+ "id": "workflow-environment-limit-names-counted-once",
1789
+ "description": "100 workflow names and 25 step names, NPM_CONFIG_USERCONFIG declared in the step, and the 2 reserved step names are 128 names in a job with npmRead: the declared reserved name counts once, so the limit holds and the step fails npm_read_invalid.",
1790
+ "workflow": {
1791
+ "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\nenvironment:\n W000: w\n W001: w\n W002: w\n W003: w\n W004: w\n W005: w\n W006: w\n W007: w\n W008: w\n W009: w\n W010: w\n W011: w\n W012: w\n W013: w\n W014: w\n W015: w\n W016: w\n W017: w\n W018: w\n W019: w\n W020: w\n W021: w\n W022: w\n W023: w\n W024: w\n W025: w\n W026: w\n W027: w\n W028: w\n W029: w\n W030: w\n W031: w\n W032: w\n W033: w\n W034: w\n W035: w\n W036: w\n W037: w\n W038: w\n W039: w\n W040: w\n W041: w\n W042: w\n W043: w\n W044: w\n W045: w\n W046: w\n W047: w\n W048: w\n W049: w\n W050: w\n W051: w\n W052: w\n W053: w\n W054: w\n W055: w\n W056: w\n W057: w\n W058: w\n W059: w\n W060: w\n W061: w\n W062: w\n W063: w\n W064: w\n W065: w\n W066: w\n W067: w\n W068: w\n W069: w\n W070: w\n W071: w\n W072: w\n W073: w\n W074: w\n W075: w\n W076: w\n W077: w\n W078: w\n W079: w\n W080: w\n W081: w\n W082: w\n W083: w\n W084: w\n W085: w\n W086: w\n W087: w\n W088: w\n W089: w\n W090: w\n W091: w\n W092: w\n W093: w\n W094: w\n W095: w\n W096: w\n W097: w\n W098: w\n W099: w\njobs:\n test:\n network:\n mode: egress\n allow:\n - host: 'npm.example.com'\n npmRead:\n - registry: https://npm.example.com\n scopes:\n - '@example'\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 environment:\n S00: s\n S01: s\n S02: s\n S03: s\n S04: s\n S05: s\n S06: s\n S07: s\n S08: s\n S09: s\n S10: s\n S11: s\n S12: s\n S13: s\n S14: s\n S15: s\n S16: s\n S17: s\n S18: s\n S19: s\n S20: s\n S21: s\n S22: s\n S23: s\n S24: s\n NPM_CONFIG_USERCONFIG: /tmp/npmrc\n"
1792
+ },
1793
+ "expected": {
1794
+ "outcome": "failed",
1795
+ "code": "npm_read_invalid"
1796
+ }
1797
+ },
1798
+ {
1799
+ "id": "workflow-environment-limit-npm-read",
1800
+ "description": "100 workflow names, 24 step names, 2 secret targets, the 2 reserved step names, and NPM_CONFIG_USERCONFIG of a job with npmRead are 129 names.",
1801
+ "workflow": {
1802
+ "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\nenvironment:\n W000: w\n W001: w\n W002: w\n W003: w\n W004: w\n W005: w\n W006: w\n W007: w\n W008: w\n W009: w\n W010: w\n W011: w\n W012: w\n W013: w\n W014: w\n W015: w\n W016: w\n W017: w\n W018: w\n W019: w\n W020: w\n W021: w\n W022: w\n W023: w\n W024: w\n W025: w\n W026: w\n W027: w\n W028: w\n W029: w\n W030: w\n W031: w\n W032: w\n W033: w\n W034: w\n W035: w\n W036: w\n W037: w\n W038: w\n W039: w\n W040: w\n W041: w\n W042: w\n W043: w\n W044: w\n W045: w\n W046: w\n W047: w\n W048: w\n W049: w\n W050: w\n W051: w\n W052: w\n W053: w\n W054: w\n W055: w\n W056: w\n W057: w\n W058: w\n W059: w\n W060: w\n W061: w\n W062: w\n W063: w\n W064: w\n W065: w\n W066: w\n W067: w\n W068: w\n W069: w\n W070: w\n W071: w\n W072: w\n W073: w\n W074: w\n W075: w\n W076: w\n W077: w\n W078: w\n W079: w\n W080: w\n W081: w\n W082: w\n W083: w\n W084: w\n W085: w\n W086: w\n W087: w\n W088: w\n W089: w\n W090: w\n W091: w\n W092: w\n W093: w\n W094: w\n W095: w\n W096: w\n W097: w\n W098: w\n W099: w\njobs:\n test:\n network:\n mode: egress\n allow:\n - host: 'npm.example.com'\n npmRead:\n - registry: https://npm.example.com\n scopes:\n - '@example'\n secrets:\n - name: token-one\n environment: TOKEN_ONE\n - name: token-two\n environment: TOKEN_TWO\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 environment:\n S00: s\n S01: s\n S02: s\n S03: s\n S04: s\n S05: s\n S06: s\n S07: s\n S08: s\n S09: s\n S10: s\n S11: s\n S12: s\n S13: s\n S14: s\n S15: s\n S16: s\n S17: s\n S18: s\n S19: s\n S20: s\n S21: s\n S22: s\n S23: s\n"
1803
+ },
1804
+ "expected": {
1805
+ "outcome": "failed",
1806
+ "code": "environment_limit_exceeded"
1807
+ }
1808
+ },
1809
+ {
1810
+ "id": "workflow-npm-read-registry-exact",
1811
+ "description": "https://npm.example.com and https://npm.example.com/ are two registries: registries are compared as exact strings. The workflow passes the workflow layer; the job's default timeout of 3,600,000 then exceeds the deployment maximum.",
1812
+ "workflow": {
1813
+ "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 network:\n mode: egress\n allow:\n - host: 'npm.example.com'\n npmRead:\n - registry: https://npm.example.com\n scopes:\n - '@one'\n - registry: https://npm.example.com/\n scopes:\n - '@two'\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"
1565
1814
  },
1566
1815
  "context": {
1567
1816
  "repository": {
@@ -1578,9 +1827,8 @@
1578
1827
  "entryCount": 4
1579
1828
  },
1580
1829
  "trigger": {
1581
- "kind": "manual",
1582
- "ref": "refs/heads/main",
1583
- "inputs": {}
1830
+ "kind": "push",
1831
+ "ref": "refs/heads/main"
1584
1832
  },
1585
1833
  "trustClass": "trusted",
1586
1834
  "protectedTagRun": false,
@@ -1596,16 +1844,19 @@
1596
1844
  "maximumWorkspaceBytes": 268435456,
1597
1845
  "maximumWorkspaceEntries": 100000
1598
1846
  },
1599
- "ociIsolation": "container"
1847
+ "ociIsolation": "container",
1848
+ "maximumTimeoutMs": 1800000
1600
1849
  },
1601
1850
  "expected": {
1602
- "outcome": "not-triggered"
1851
+ "outcome": "failed",
1852
+ "code": "policy_timeout_exceeded"
1603
1853
  }
1604
1854
  },
1605
1855
  {
1606
- "id": "trigger-star-stops-at-slash",
1856
+ "id": "workflow-egress-wildcard-any-depth",
1857
+ "description": "The egress entry *.example.com permits the registry host npm.internal.example.com, two labels below example.com. The workflow passes the workflow layer; the job's default timeout of 3,600,000 then exceeds the deployment maximum.",
1607
1858
  "workflow": {
1608
- "source": "spec: 2.0.0\non:\n push:\n branches:\n - 'release/*'\n pullRequest:\n targetBranches:\n - main\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"
1859
+ "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 network:\n mode: egress\n allow:\n - host: '*.example.com'\n npmRead:\n - registry: https://npm.internal.example.com\n scopes:\n - '@example'\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"
1609
1860
  },
1610
1861
  "context": {
1611
1862
  "repository": {
@@ -1623,7 +1874,7 @@
1623
1874
  },
1624
1875
  "trigger": {
1625
1876
  "kind": "push",
1626
- "ref": "refs/heads/release/next/1"
1877
+ "ref": "refs/heads/main"
1627
1878
  },
1628
1879
  "trustClass": "trusted",
1629
1880
  "protectedTagRun": false,
@@ -1639,16 +1890,41 @@
1639
1890
  "maximumWorkspaceBytes": 268435456,
1640
1891
  "maximumWorkspaceEntries": 100000
1641
1892
  },
1642
- "ociIsolation": "container"
1893
+ "ociIsolation": "container",
1894
+ "maximumTimeoutMs": 1800000
1643
1895
  },
1644
1896
  "expected": {
1645
- "outcome": "not-triggered"
1897
+ "outcome": "failed",
1898
+ "code": "policy_timeout_exceeded"
1646
1899
  }
1647
1900
  },
1648
1901
  {
1649
- "id": "trigger-target-branch-not-matched",
1902
+ "id": "workflow-egress-wildcard-excludes-domain",
1903
+ "description": "The egress entry *.example.com does not permit the registry host example.com itself.",
1650
1904
  "workflow": {
1651
- "source": "spec: 2.0.0\non:\n push:\n branches:\n - 'release/*'\n pullRequest:\n targetBranches:\n - main\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"
1905
+ "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 network:\n mode: egress\n allow:\n - host: '*.example.com'\n npmRead:\n - registry: https://example.com\n scopes:\n - '@example'\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"
1906
+ },
1907
+ "expected": {
1908
+ "outcome": "failed",
1909
+ "code": "npm_read_invalid"
1910
+ }
1911
+ },
1912
+ {
1913
+ "id": "workflow-npm-read-workflow-environment",
1914
+ "description": "The workflow environment defines NPM_CONFIG_USERCONFIG, which is in the merged environment of every step of an oci job with npmRead.",
1915
+ "workflow": {
1916
+ "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\nenvironment:\n NPM_CONFIG_USERCONFIG: /tmp/npmrc\njobs:\n test:\n network:\n mode: egress\n allow:\n - host: 'npm.example.com'\n npmRead:\n - registry: https://npm.example.com\n scopes:\n - '@example'\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"
1917
+ },
1918
+ "expected": {
1919
+ "outcome": "failed",
1920
+ "code": "npm_read_invalid"
1921
+ }
1922
+ },
1923
+ {
1924
+ "id": "workflow-npm-read-workflow-environment-build-job",
1925
+ "description": "The workflow environment defines NPM_CONFIG_USERCONFIG and only a build job declares npmRead: the workflow environment does not apply to build jobs. The workflow passes the workflow layer; the job's default timeout of 3,600,000 then exceeds the deployment maximum.",
1926
+ "workflow": {
1927
+ "source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: candidate\n npm: none\n releaseAssets: none\nenvironment:\n NPM_CONFIG_USERCONFIG: /tmp/npmrc\njobs:\n image:\n network:\n mode: egress\n allow:\n - host: 'npm.example.com'\n npmRead:\n - registry: https://npm.example.com\n scopes:\n - '@example'\n runner:\n profile: oci-image\n labels:\n - builder\n build:\n context: .\n dockerfile: Dockerfile\n platforms:\n - linux/amd64\n"
1652
1928
  },
1653
1929
  "context": {
1654
1930
  "repository": {
@@ -1665,11 +1941,10 @@
1665
1941
  "entryCount": 4
1666
1942
  },
1667
1943
  "trigger": {
1668
- "kind": "pullRequest",
1669
- "pullRequest": "42",
1670
- "targetBranch": "develop"
1944
+ "kind": "push",
1945
+ "ref": "refs/heads/main"
1671
1946
  },
1672
- "trustClass": "untrusted",
1947
+ "trustClass": "trusted",
1673
1948
  "protectedTagRun": false,
1674
1949
  "secrets": []
1675
1950
  },
@@ -1683,15 +1958,291 @@
1683
1958
  "maximumWorkspaceBytes": 268435456,
1684
1959
  "maximumWorkspaceEntries": 100000
1685
1960
  },
1686
- "ociIsolation": "container"
1961
+ "ociIsolation": "container",
1962
+ "maximumTimeoutMs": 1800000
1687
1963
  },
1688
1964
  "expected": {
1689
- "outcome": "not-triggered"
1965
+ "outcome": "failed",
1966
+ "code": "policy_timeout_exceeded"
1690
1967
  }
1691
1968
  },
1692
1969
  {
1693
- "id": "trigger-invalid-workflow-fails-unmatched-event",
1694
- "description": "Filters of a workflow that fails the schema layer are never evaluated, so the event creates a failed run.",
1970
+ "id": "workflow-npm-read-build-secret-target",
1971
+ "description": "A build job with npmRead has the secret target NPM_CONFIG_USERCONFIG, which a build secret names.",
1972
+ "workflow": {
1973
+ "source": "spec: 2.0.0\non:\n push: {}\npermissions:\n source: read\n artifacts: none\n caches: none\n images: candidate\n npm: none\n releaseAssets: none\njobs:\n image:\n network:\n mode: egress\n allow:\n - host: 'npm.example.com'\n npmRead:\n - registry: https://npm.example.com\n scopes:\n - '@example'\n secrets:\n - name: npm-config\n environment: NPM_CONFIG_USERCONFIG\n runner:\n profile: oci-image\n labels:\n - builder\n build:\n context: .\n dockerfile: Dockerfile\n platforms:\n - linux/amd64\n secrets:\n - id: npmconfig\n environment: NPM_CONFIG_USERCONFIG\n"
1974
+ },
1975
+ "expected": {
1976
+ "outcome": "failed",
1977
+ "code": "npm_read_invalid"
1978
+ }
1979
+ },
1980
+ {
1981
+ "id": "workflow-shared-memory-without-memory",
1982
+ "description": "A job declares sharedMemoryBytes of 8 GiB and no memoryBytes: resources_invalid compares declared values only. The workflow passes the workflow layer; the job's default timeout of 3,600,000 then exceeds the deployment maximum.",
1983
+ "workflow": {
1984
+ "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 resources:\n sharedMemoryBytes: 8589934592\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"
1985
+ },
1986
+ "context": {
1987
+ "repository": {
1988
+ "tenantId": "tenant-1",
1989
+ "repositoryId": "example/app",
1990
+ "url": "https://code.foss.global/example/app"
1991
+ },
1992
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1993
+ "source": {
1994
+ "format": "tar.gz",
1995
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
1996
+ "sizeBytes": 1024,
1997
+ "extractedSizeBytes": 4096,
1998
+ "entryCount": 4
1999
+ },
2000
+ "trigger": {
2001
+ "kind": "push",
2002
+ "ref": "refs/heads/main"
2003
+ },
2004
+ "trustClass": "trusted",
2005
+ "protectedTagRun": false,
2006
+ "secrets": []
2007
+ },
2008
+ "policy": {
2009
+ "limits": {
2010
+ "maximumSourceArchiveBytes": 1048576,
2011
+ "maximumSourceExtractedBytes": 4194304,
2012
+ "maximumSourceEntries": 1000,
2013
+ "maximumLogChunkBytes": 65536,
2014
+ "maximumTotalLogBytes": 10485760,
2015
+ "maximumWorkspaceBytes": 268435456,
2016
+ "maximumWorkspaceEntries": 100000
2017
+ },
2018
+ "ociIsolation": "container",
2019
+ "maximumTimeoutMs": 1800000
2020
+ },
2021
+ "expected": {
2022
+ "outcome": "failed",
2023
+ "code": "policy_timeout_exceeded"
2024
+ }
2025
+ },
2026
+ {
2027
+ "id": "trigger-branch-not-matched",
2028
+ "workflow": {
2029
+ "fixture": "conformance/ci-actions/valid/minimal.yml"
2030
+ },
2031
+ "context": {
2032
+ "repository": {
2033
+ "tenantId": "tenant-1",
2034
+ "repositoryId": "example/app",
2035
+ "url": "https://code.foss.global/example/app"
2036
+ },
2037
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2038
+ "source": {
2039
+ "format": "tar.gz",
2040
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2041
+ "sizeBytes": 1024,
2042
+ "extractedSizeBytes": 4096,
2043
+ "entryCount": 4
2044
+ },
2045
+ "trigger": {
2046
+ "kind": "push",
2047
+ "ref": "refs/heads/feature"
2048
+ },
2049
+ "trustClass": "trusted",
2050
+ "protectedTagRun": false,
2051
+ "secrets": []
2052
+ },
2053
+ "policy": {
2054
+ "limits": {
2055
+ "maximumSourceArchiveBytes": 1048576,
2056
+ "maximumSourceExtractedBytes": 4194304,
2057
+ "maximumSourceEntries": 1000,
2058
+ "maximumLogChunkBytes": 65536,
2059
+ "maximumTotalLogBytes": 10485760,
2060
+ "maximumWorkspaceBytes": 268435456,
2061
+ "maximumWorkspaceEntries": 100000
2062
+ },
2063
+ "ociIsolation": "container"
2064
+ },
2065
+ "expected": {
2066
+ "outcome": "not-triggered"
2067
+ }
2068
+ },
2069
+ {
2070
+ "id": "trigger-kind-not-declared",
2071
+ "workflow": {
2072
+ "fixture": "conformance/ci-actions/valid/minimal.yml"
2073
+ },
2074
+ "context": {
2075
+ "repository": {
2076
+ "tenantId": "tenant-1",
2077
+ "repositoryId": "example/app",
2078
+ "url": "https://code.foss.global/example/app"
2079
+ },
2080
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2081
+ "source": {
2082
+ "format": "tar.gz",
2083
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2084
+ "sizeBytes": 1024,
2085
+ "extractedSizeBytes": 4096,
2086
+ "entryCount": 4
2087
+ },
2088
+ "trigger": {
2089
+ "kind": "tag",
2090
+ "ref": "refs/tags/v1.0.0"
2091
+ },
2092
+ "trustClass": "trusted",
2093
+ "protectedTagRun": false,
2094
+ "secrets": []
2095
+ },
2096
+ "policy": {
2097
+ "limits": {
2098
+ "maximumSourceArchiveBytes": 1048576,
2099
+ "maximumSourceExtractedBytes": 4194304,
2100
+ "maximumSourceEntries": 1000,
2101
+ "maximumLogChunkBytes": 65536,
2102
+ "maximumTotalLogBytes": 10485760,
2103
+ "maximumWorkspaceBytes": 268435456,
2104
+ "maximumWorkspaceEntries": 100000
2105
+ },
2106
+ "ociIsolation": "container"
2107
+ },
2108
+ "expected": {
2109
+ "outcome": "not-triggered"
2110
+ }
2111
+ },
2112
+ {
2113
+ "id": "trigger-manual-not-declared",
2114
+ "workflow": {
2115
+ "fixture": "conformance/ci-actions/valid/minimal.yml"
2116
+ },
2117
+ "context": {
2118
+ "repository": {
2119
+ "tenantId": "tenant-1",
2120
+ "repositoryId": "example/app",
2121
+ "url": "https://code.foss.global/example/app"
2122
+ },
2123
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2124
+ "source": {
2125
+ "format": "tar.gz",
2126
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2127
+ "sizeBytes": 1024,
2128
+ "extractedSizeBytes": 4096,
2129
+ "entryCount": 4
2130
+ },
2131
+ "trigger": {
2132
+ "kind": "manual",
2133
+ "ref": "refs/heads/main",
2134
+ "inputs": {}
2135
+ },
2136
+ "trustClass": "trusted",
2137
+ "protectedTagRun": false,
2138
+ "secrets": []
2139
+ },
2140
+ "policy": {
2141
+ "limits": {
2142
+ "maximumSourceArchiveBytes": 1048576,
2143
+ "maximumSourceExtractedBytes": 4194304,
2144
+ "maximumSourceEntries": 1000,
2145
+ "maximumLogChunkBytes": 65536,
2146
+ "maximumTotalLogBytes": 10485760,
2147
+ "maximumWorkspaceBytes": 268435456,
2148
+ "maximumWorkspaceEntries": 100000
2149
+ },
2150
+ "ociIsolation": "container"
2151
+ },
2152
+ "expected": {
2153
+ "outcome": "not-triggered"
2154
+ }
2155
+ },
2156
+ {
2157
+ "id": "trigger-star-stops-at-slash",
2158
+ "workflow": {
2159
+ "source": "spec: 2.0.0\non:\n push:\n branches:\n - 'release/*'\n pullRequest:\n targetBranches:\n - main\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"
2160
+ },
2161
+ "context": {
2162
+ "repository": {
2163
+ "tenantId": "tenant-1",
2164
+ "repositoryId": "example/app",
2165
+ "url": "https://code.foss.global/example/app"
2166
+ },
2167
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2168
+ "source": {
2169
+ "format": "tar.gz",
2170
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2171
+ "sizeBytes": 1024,
2172
+ "extractedSizeBytes": 4096,
2173
+ "entryCount": 4
2174
+ },
2175
+ "trigger": {
2176
+ "kind": "push",
2177
+ "ref": "refs/heads/release/next/1"
2178
+ },
2179
+ "trustClass": "trusted",
2180
+ "protectedTagRun": false,
2181
+ "secrets": []
2182
+ },
2183
+ "policy": {
2184
+ "limits": {
2185
+ "maximumSourceArchiveBytes": 1048576,
2186
+ "maximumSourceExtractedBytes": 4194304,
2187
+ "maximumSourceEntries": 1000,
2188
+ "maximumLogChunkBytes": 65536,
2189
+ "maximumTotalLogBytes": 10485760,
2190
+ "maximumWorkspaceBytes": 268435456,
2191
+ "maximumWorkspaceEntries": 100000
2192
+ },
2193
+ "ociIsolation": "container"
2194
+ },
2195
+ "expected": {
2196
+ "outcome": "not-triggered"
2197
+ }
2198
+ },
2199
+ {
2200
+ "id": "trigger-target-branch-not-matched",
2201
+ "workflow": {
2202
+ "source": "spec: 2.0.0\non:\n push:\n branches:\n - 'release/*'\n pullRequest:\n targetBranches:\n - main\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"
2203
+ },
2204
+ "context": {
2205
+ "repository": {
2206
+ "tenantId": "tenant-1",
2207
+ "repositoryId": "example/app",
2208
+ "url": "https://code.foss.global/example/app"
2209
+ },
2210
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2211
+ "source": {
2212
+ "format": "tar.gz",
2213
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2214
+ "sizeBytes": 1024,
2215
+ "extractedSizeBytes": 4096,
2216
+ "entryCount": 4
2217
+ },
2218
+ "trigger": {
2219
+ "kind": "pullRequest",
2220
+ "pullRequest": "42",
2221
+ "targetBranch": "develop"
2222
+ },
2223
+ "trustClass": "untrusted",
2224
+ "protectedTagRun": false,
2225
+ "secrets": []
2226
+ },
2227
+ "policy": {
2228
+ "limits": {
2229
+ "maximumSourceArchiveBytes": 1048576,
2230
+ "maximumSourceExtractedBytes": 4194304,
2231
+ "maximumSourceEntries": 1000,
2232
+ "maximumLogChunkBytes": 65536,
2233
+ "maximumTotalLogBytes": 10485760,
2234
+ "maximumWorkspaceBytes": 268435456,
2235
+ "maximumWorkspaceEntries": 100000
2236
+ },
2237
+ "ociIsolation": "container"
2238
+ },
2239
+ "expected": {
2240
+ "outcome": "not-triggered"
2241
+ }
2242
+ },
2243
+ {
2244
+ "id": "trigger-invalid-workflow-fails-unmatched-event",
2245
+ "description": "Filters of a workflow that fails the schema layer are never evaluated, so the event creates a failed run.",
1695
2246
  "workflow": {
1696
2247
  "source": "spec: 2.0.0\non:\n push:\n branches:\n - 'release/*'\n pullRequest:\n targetBranches:\n - main\npermissions:\n source: read\n artifacts: none\n caches: none\n images: none\n npm: none\n releaseAssets: none\nunknownField: 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"
1697
2248
  },
@@ -1711,7 +2262,662 @@
1711
2262
  },
1712
2263
  "trigger": {
1713
2264
  "kind": "push",
1714
- "ref": "refs/heads/feature"
2265
+ "ref": "refs/heads/feature"
2266
+ },
2267
+ "trustClass": "trusted",
2268
+ "protectedTagRun": false,
2269
+ "secrets": []
2270
+ },
2271
+ "policy": {
2272
+ "limits": {
2273
+ "maximumSourceArchiveBytes": 1048576,
2274
+ "maximumSourceExtractedBytes": 4194304,
2275
+ "maximumSourceEntries": 1000,
2276
+ "maximumLogChunkBytes": 65536,
2277
+ "maximumTotalLogBytes": 10485760,
2278
+ "maximumWorkspaceBytes": 268435456,
2279
+ "maximumWorkspaceEntries": 100000
2280
+ },
2281
+ "ociIsolation": "container"
2282
+ },
2283
+ "expected": {
2284
+ "outcome": "failed",
2285
+ "code": "workflow_schema_invalid"
2286
+ }
2287
+ },
2288
+ {
2289
+ "id": "compile-minimal-push",
2290
+ "description": "Defaults: network none, the default timeout, the reserved variables, derived limits without transfers, and container isolation.",
2291
+ "workflow": {
2292
+ "fixture": "conformance/ci-actions/valid/minimal.yml"
2293
+ },
2294
+ "context": {
2295
+ "repository": {
2296
+ "tenantId": "tenant-1",
2297
+ "repositoryId": "example/app",
2298
+ "url": "https://code.foss.global/example/app"
2299
+ },
2300
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2301
+ "source": {
2302
+ "format": "tar.gz",
2303
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2304
+ "sizeBytes": 1024,
2305
+ "extractedSizeBytes": 4096,
2306
+ "entryCount": 4
2307
+ },
2308
+ "trigger": {
2309
+ "kind": "push",
2310
+ "ref": "refs/heads/main"
2311
+ },
2312
+ "trustClass": "trusted",
2313
+ "protectedTagRun": false,
2314
+ "secrets": []
2315
+ },
2316
+ "policy": {
2317
+ "limits": {
2318
+ "maximumSourceArchiveBytes": 1048576,
2319
+ "maximumSourceExtractedBytes": 4194304,
2320
+ "maximumSourceEntries": 1000,
2321
+ "maximumLogChunkBytes": 65536,
2322
+ "maximumTotalLogBytes": 10485760,
2323
+ "maximumWorkspaceBytes": 268435456,
2324
+ "maximumWorkspaceEntries": 100000
2325
+ },
2326
+ "ociIsolation": "container"
2327
+ },
2328
+ "expected": {
2329
+ "outcome": "compiled",
2330
+ "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
2331
+ "nodes": [
2332
+ {
2333
+ "id": "test",
2334
+ "kind": "job",
2335
+ "needs": [],
2336
+ "job": {
2337
+ "spec": "2.0.0",
2338
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2339
+ "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
2340
+ "requirements": {
2341
+ "executionProfile": "oci",
2342
+ "isolation": "container",
2343
+ "labels": [
2344
+ "linux"
2345
+ ],
2346
+ "features": [
2347
+ "source.tar-gz"
2348
+ ],
2349
+ "limits": {
2350
+ "maximumSourceArchiveBytes": 1048576,
2351
+ "maximumSourceExtractedBytes": 4194304,
2352
+ "maximumSourceEntries": 1000,
2353
+ "maximumArtifactArchiveBytes": 0,
2354
+ "maximumArtifactExtractedBytes": 0,
2355
+ "maximumArtifactEntries": 0,
2356
+ "maximumArtifacts": 0,
2357
+ "maximumCacheArchiveBytes": 0,
2358
+ "maximumCacheExtractedBytes": 0,
2359
+ "maximumCacheEntries": 0,
2360
+ "maximumCaches": 0,
2361
+ "maximumLogChunkBytes": 65536,
2362
+ "maximumTotalLogBytes": 10485760,
2363
+ "maximumWorkspaceBytes": 268435456,
2364
+ "maximumWorkspaceEntries": 100000
2365
+ }
2366
+ },
2367
+ "permissions": {
2368
+ "source": "read",
2369
+ "artifacts": "none",
2370
+ "caches": "none",
2371
+ "images": "none"
2372
+ },
2373
+ "network": {
2374
+ "mode": "none"
2375
+ },
2376
+ "execution": {
2377
+ "profile": "oci",
2378
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2379
+ },
2380
+ "steps": [
2381
+ {
2382
+ "command": [
2383
+ "pnpm",
2384
+ "test"
2385
+ ],
2386
+ "environment": {
2387
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
2388
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
2389
+ }
2390
+ }
2391
+ ],
2392
+ "source": {
2393
+ "format": "tar.gz",
2394
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2395
+ "sizeBytes": 1024,
2396
+ "extractedSizeBytes": 4096,
2397
+ "entryCount": 4
2398
+ },
2399
+ "secrets": {},
2400
+ "timeoutMs": 3600000,
2401
+ "artifacts": [],
2402
+ "caches": [],
2403
+ "compiledPlanDigest": "98fe7404ad887e287d65e2ac92689fbc3f494c2f28541490bc85f9fccbc0189e"
2404
+ },
2405
+ "secretBindings": {}
2406
+ }
2407
+ ]
2408
+ }
2409
+ },
2410
+ {
2411
+ "id": "compile-oci-isolation-policy",
2412
+ "description": "Deployment policy requires microvm isolation for oci jobs.",
2413
+ "workflow": {
2414
+ "fixture": "conformance/ci-actions/valid/minimal.yml"
2415
+ },
2416
+ "context": {
2417
+ "repository": {
2418
+ "tenantId": "tenant-1",
2419
+ "repositoryId": "example/app",
2420
+ "url": "https://code.foss.global/example/app"
2421
+ },
2422
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2423
+ "source": {
2424
+ "format": "tar.gz",
2425
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2426
+ "sizeBytes": 1024,
2427
+ "extractedSizeBytes": 4096,
2428
+ "entryCount": 4
2429
+ },
2430
+ "trigger": {
2431
+ "kind": "push",
2432
+ "ref": "refs/heads/main"
2433
+ },
2434
+ "trustClass": "trusted",
2435
+ "protectedTagRun": false,
2436
+ "secrets": []
2437
+ },
2438
+ "policy": {
2439
+ "limits": {
2440
+ "maximumSourceArchiveBytes": 1048576,
2441
+ "maximumSourceExtractedBytes": 4194304,
2442
+ "maximumSourceEntries": 1000,
2443
+ "maximumLogChunkBytes": 65536,
2444
+ "maximumTotalLogBytes": 10485760,
2445
+ "maximumWorkspaceBytes": 268435456,
2446
+ "maximumWorkspaceEntries": 100000
2447
+ },
2448
+ "ociIsolation": "microvm"
2449
+ },
2450
+ "expected": {
2451
+ "outcome": "compiled",
2452
+ "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
2453
+ "nodes": [
2454
+ {
2455
+ "id": "test",
2456
+ "kind": "job",
2457
+ "needs": [],
2458
+ "job": {
2459
+ "spec": "2.0.0",
2460
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2461
+ "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
2462
+ "requirements": {
2463
+ "executionProfile": "oci",
2464
+ "isolation": "microvm",
2465
+ "labels": [
2466
+ "linux"
2467
+ ],
2468
+ "features": [
2469
+ "source.tar-gz"
2470
+ ],
2471
+ "limits": {
2472
+ "maximumSourceArchiveBytes": 1048576,
2473
+ "maximumSourceExtractedBytes": 4194304,
2474
+ "maximumSourceEntries": 1000,
2475
+ "maximumArtifactArchiveBytes": 0,
2476
+ "maximumArtifactExtractedBytes": 0,
2477
+ "maximumArtifactEntries": 0,
2478
+ "maximumArtifacts": 0,
2479
+ "maximumCacheArchiveBytes": 0,
2480
+ "maximumCacheExtractedBytes": 0,
2481
+ "maximumCacheEntries": 0,
2482
+ "maximumCaches": 0,
2483
+ "maximumLogChunkBytes": 65536,
2484
+ "maximumTotalLogBytes": 10485760,
2485
+ "maximumWorkspaceBytes": 268435456,
2486
+ "maximumWorkspaceEntries": 100000
2487
+ }
2488
+ },
2489
+ "permissions": {
2490
+ "source": "read",
2491
+ "artifacts": "none",
2492
+ "caches": "none",
2493
+ "images": "none"
2494
+ },
2495
+ "network": {
2496
+ "mode": "none"
2497
+ },
2498
+ "execution": {
2499
+ "profile": "oci",
2500
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2501
+ },
2502
+ "steps": [
2503
+ {
2504
+ "command": [
2505
+ "pnpm",
2506
+ "test"
2507
+ ],
2508
+ "environment": {
2509
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
2510
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
2511
+ }
2512
+ }
2513
+ ],
2514
+ "source": {
2515
+ "format": "tar.gz",
2516
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2517
+ "sizeBytes": 1024,
2518
+ "extractedSizeBytes": 4096,
2519
+ "entryCount": 4
2520
+ },
2521
+ "secrets": {},
2522
+ "timeoutMs": 3600000,
2523
+ "artifacts": [],
2524
+ "caches": [],
2525
+ "compiledPlanDigest": "339c039f5c9819669e9426fec53738cc1008b2fb83c83ff8697a8726a6404223"
2526
+ },
2527
+ "secretBindings": {}
2528
+ }
2529
+ ]
2530
+ }
2531
+ },
2532
+ {
2533
+ "id": "compile-byte-order-mark",
2534
+ "description": "A leading byte order mark is accepted; the workflow digest covers it.",
2535
+ "workflow": {
2536
+ "sourceBase64": "77u/c3BlYzogMi4wLjAKb246CiAgcHVzaDoge30KcGVybWlzc2lvbnM6CiAgc291cmNlOiByZWFkCiAgYXJ0aWZhY3RzOiBub25lCiAgY2FjaGVzOiBub25lCiAgaW1hZ2VzOiBub25lCiAgbnBtOiBub25lCiAgcmVsZWFzZUFzc2V0czogbm9uZQpqb2JzOgogIHRlc3Q6CiAgICBydW5uZXI6CiAgICAgIHByb2ZpbGU6IG9jaQogICAgICBsYWJlbHM6CiAgICAgICAgLSBsaW51eAogICAgZXhlY3V0aW9uOgogICAgICBwcm9maWxlOiBvY2kKICAgICAgaW1hZ2U6IHJlZ2lzdHJ5LmV4YW1wbGUvdGVzdEBzaGEyNTY6YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQogICAgc3RlcHM6CiAgICAgIC0gcnVuOgogICAgICAgICAgLSBwbnBtCiAgICAgICAgICAtIHRlc3QK"
2537
+ },
2538
+ "context": {
2539
+ "repository": {
2540
+ "tenantId": "tenant-1",
2541
+ "repositoryId": "example/app",
2542
+ "url": "https://code.foss.global/example/app"
2543
+ },
2544
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2545
+ "source": {
2546
+ "format": "tar.gz",
2547
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2548
+ "sizeBytes": 1024,
2549
+ "extractedSizeBytes": 4096,
2550
+ "entryCount": 4
2551
+ },
2552
+ "trigger": {
2553
+ "kind": "push",
2554
+ "ref": "refs/heads/main"
2555
+ },
2556
+ "trustClass": "trusted",
2557
+ "protectedTagRun": false,
2558
+ "secrets": []
2559
+ },
2560
+ "policy": {
2561
+ "limits": {
2562
+ "maximumSourceArchiveBytes": 1048576,
2563
+ "maximumSourceExtractedBytes": 4194304,
2564
+ "maximumSourceEntries": 1000,
2565
+ "maximumLogChunkBytes": 65536,
2566
+ "maximumTotalLogBytes": 10485760,
2567
+ "maximumWorkspaceBytes": 268435456,
2568
+ "maximumWorkspaceEntries": 100000
2569
+ },
2570
+ "ociIsolation": "container"
2571
+ },
2572
+ "expected": {
2573
+ "outcome": "compiled",
2574
+ "workflowDigest": "f61d4938282a57e8a6eb4a62320ca68a071816e6230093d4fad5881e56f2ca51",
2575
+ "nodes": [
2576
+ {
2577
+ "id": "test",
2578
+ "kind": "job",
2579
+ "needs": [],
2580
+ "job": {
2581
+ "spec": "2.0.0",
2582
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2583
+ "workflowDigest": "f61d4938282a57e8a6eb4a62320ca68a071816e6230093d4fad5881e56f2ca51",
2584
+ "requirements": {
2585
+ "executionProfile": "oci",
2586
+ "isolation": "container",
2587
+ "labels": [
2588
+ "linux"
2589
+ ],
2590
+ "features": [
2591
+ "source.tar-gz"
2592
+ ],
2593
+ "limits": {
2594
+ "maximumSourceArchiveBytes": 1048576,
2595
+ "maximumSourceExtractedBytes": 4194304,
2596
+ "maximumSourceEntries": 1000,
2597
+ "maximumArtifactArchiveBytes": 0,
2598
+ "maximumArtifactExtractedBytes": 0,
2599
+ "maximumArtifactEntries": 0,
2600
+ "maximumArtifacts": 0,
2601
+ "maximumCacheArchiveBytes": 0,
2602
+ "maximumCacheExtractedBytes": 0,
2603
+ "maximumCacheEntries": 0,
2604
+ "maximumCaches": 0,
2605
+ "maximumLogChunkBytes": 65536,
2606
+ "maximumTotalLogBytes": 10485760,
2607
+ "maximumWorkspaceBytes": 268435456,
2608
+ "maximumWorkspaceEntries": 100000
2609
+ }
2610
+ },
2611
+ "permissions": {
2612
+ "source": "read",
2613
+ "artifacts": "none",
2614
+ "caches": "none",
2615
+ "images": "none"
2616
+ },
2617
+ "network": {
2618
+ "mode": "none"
2619
+ },
2620
+ "execution": {
2621
+ "profile": "oci",
2622
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2623
+ },
2624
+ "steps": [
2625
+ {
2626
+ "command": [
2627
+ "pnpm",
2628
+ "test"
2629
+ ],
2630
+ "environment": {
2631
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
2632
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
2633
+ }
2634
+ }
2635
+ ],
2636
+ "source": {
2637
+ "format": "tar.gz",
2638
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2639
+ "sizeBytes": 1024,
2640
+ "extractedSizeBytes": 4096,
2641
+ "entryCount": 4
2642
+ },
2643
+ "secrets": {},
2644
+ "timeoutMs": 3600000,
2645
+ "artifacts": [],
2646
+ "caches": [],
2647
+ "compiledPlanDigest": "0b420b0f74d8da40c9606082dc877598fa682f14753b4673dbe1e6960cd11899"
2648
+ },
2649
+ "secretBindings": {}
2650
+ }
2651
+ ]
2652
+ }
2653
+ },
2654
+ {
2655
+ "id": "compile-document-end-markers",
2656
+ "description": "A document followed by two document end markers is one document.",
2657
+ "workflow": {
2658
+ "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"
2659
+ },
2660
+ "context": {
2661
+ "repository": {
2662
+ "tenantId": "tenant-1",
2663
+ "repositoryId": "example/app",
2664
+ "url": "https://code.foss.global/example/app"
2665
+ },
2666
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2667
+ "source": {
2668
+ "format": "tar.gz",
2669
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2670
+ "sizeBytes": 1024,
2671
+ "extractedSizeBytes": 4096,
2672
+ "entryCount": 4
2673
+ },
2674
+ "trigger": {
2675
+ "kind": "push",
2676
+ "ref": "refs/heads/main"
2677
+ },
2678
+ "trustClass": "trusted",
2679
+ "protectedTagRun": false,
2680
+ "secrets": []
2681
+ },
2682
+ "policy": {
2683
+ "limits": {
2684
+ "maximumSourceArchiveBytes": 1048576,
2685
+ "maximumSourceExtractedBytes": 4194304,
2686
+ "maximumSourceEntries": 1000,
2687
+ "maximumLogChunkBytes": 65536,
2688
+ "maximumTotalLogBytes": 10485760,
2689
+ "maximumWorkspaceBytes": 268435456,
2690
+ "maximumWorkspaceEntries": 100000
2691
+ },
2692
+ "ociIsolation": "container"
2693
+ },
2694
+ "expected": {
2695
+ "outcome": "compiled",
2696
+ "workflowDigest": "e2462fbc6d73768acce6bdbd5d691dd473351f1b0ccc6d6b4871ac156e2b6eea",
2697
+ "nodes": [
2698
+ {
2699
+ "id": "test",
2700
+ "kind": "job",
2701
+ "needs": [],
2702
+ "job": {
2703
+ "spec": "2.0.0",
2704
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2705
+ "workflowDigest": "e2462fbc6d73768acce6bdbd5d691dd473351f1b0ccc6d6b4871ac156e2b6eea",
2706
+ "requirements": {
2707
+ "executionProfile": "oci",
2708
+ "isolation": "container",
2709
+ "labels": [
2710
+ "linux"
2711
+ ],
2712
+ "features": [
2713
+ "source.tar-gz"
2714
+ ],
2715
+ "limits": {
2716
+ "maximumSourceArchiveBytes": 1048576,
2717
+ "maximumSourceExtractedBytes": 4194304,
2718
+ "maximumSourceEntries": 1000,
2719
+ "maximumArtifactArchiveBytes": 0,
2720
+ "maximumArtifactExtractedBytes": 0,
2721
+ "maximumArtifactEntries": 0,
2722
+ "maximumArtifacts": 0,
2723
+ "maximumCacheArchiveBytes": 0,
2724
+ "maximumCacheExtractedBytes": 0,
2725
+ "maximumCacheEntries": 0,
2726
+ "maximumCaches": 0,
2727
+ "maximumLogChunkBytes": 65536,
2728
+ "maximumTotalLogBytes": 10485760,
2729
+ "maximumWorkspaceBytes": 268435456,
2730
+ "maximumWorkspaceEntries": 100000
2731
+ }
2732
+ },
2733
+ "permissions": {
2734
+ "source": "read",
2735
+ "artifacts": "none",
2736
+ "caches": "none",
2737
+ "images": "none"
2738
+ },
2739
+ "network": {
2740
+ "mode": "none"
2741
+ },
2742
+ "execution": {
2743
+ "profile": "oci",
2744
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2745
+ },
2746
+ "steps": [
2747
+ {
2748
+ "command": [
2749
+ "pnpm",
2750
+ "test"
2751
+ ],
2752
+ "environment": {
2753
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
2754
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
2755
+ }
2756
+ }
2757
+ ],
2758
+ "source": {
2759
+ "format": "tar.gz",
2760
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2761
+ "sizeBytes": 1024,
2762
+ "extractedSizeBytes": 4096,
2763
+ "entryCount": 4
2764
+ },
2765
+ "secrets": {},
2766
+ "timeoutMs": 3600000,
2767
+ "artifacts": [],
2768
+ "caches": [],
2769
+ "compiledPlanDigest": "9e9600a688b681648f2fd70bf488c8aee3625570f8e5feb592a98d985aa74fa4"
2770
+ },
2771
+ "secretBindings": {}
2772
+ }
2773
+ ]
2774
+ }
2775
+ },
2776
+ {
2777
+ "id": "compile-byte-order-mark-lines",
2778
+ "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.",
2779
+ "workflow": {
2780
+ "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"
2781
+ },
2782
+ "context": {
2783
+ "repository": {
2784
+ "tenantId": "tenant-1",
2785
+ "repositoryId": "example/app",
2786
+ "url": "https://code.foss.global/example/app"
2787
+ },
2788
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2789
+ "source": {
2790
+ "format": "tar.gz",
2791
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2792
+ "sizeBytes": 1024,
2793
+ "extractedSizeBytes": 4096,
2794
+ "entryCount": 4
2795
+ },
2796
+ "trigger": {
2797
+ "kind": "push",
2798
+ "ref": "refs/heads/main"
2799
+ },
2800
+ "trustClass": "trusted",
2801
+ "protectedTagRun": false,
2802
+ "secrets": []
2803
+ },
2804
+ "policy": {
2805
+ "limits": {
2806
+ "maximumSourceArchiveBytes": 1048576,
2807
+ "maximumSourceExtractedBytes": 4194304,
2808
+ "maximumSourceEntries": 1000,
2809
+ "maximumLogChunkBytes": 65536,
2810
+ "maximumTotalLogBytes": 10485760,
2811
+ "maximumWorkspaceBytes": 268435456,
2812
+ "maximumWorkspaceEntries": 100000
2813
+ },
2814
+ "ociIsolation": "container"
2815
+ },
2816
+ "expected": {
2817
+ "outcome": "compiled",
2818
+ "workflowDigest": "4926ea865106edf755c92fabff734b07678ea31199140d93ab69e4675e66e354",
2819
+ "nodes": [
2820
+ {
2821
+ "id": "test",
2822
+ "kind": "job",
2823
+ "needs": [],
2824
+ "job": {
2825
+ "spec": "2.0.0",
2826
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2827
+ "workflowDigest": "4926ea865106edf755c92fabff734b07678ea31199140d93ab69e4675e66e354",
2828
+ "requirements": {
2829
+ "executionProfile": "oci",
2830
+ "isolation": "container",
2831
+ "labels": [
2832
+ "linux"
2833
+ ],
2834
+ "features": [
2835
+ "source.tar-gz"
2836
+ ],
2837
+ "limits": {
2838
+ "maximumSourceArchiveBytes": 1048576,
2839
+ "maximumSourceExtractedBytes": 4194304,
2840
+ "maximumSourceEntries": 1000,
2841
+ "maximumArtifactArchiveBytes": 0,
2842
+ "maximumArtifactExtractedBytes": 0,
2843
+ "maximumArtifactEntries": 0,
2844
+ "maximumArtifacts": 0,
2845
+ "maximumCacheArchiveBytes": 0,
2846
+ "maximumCacheExtractedBytes": 0,
2847
+ "maximumCacheEntries": 0,
2848
+ "maximumCaches": 0,
2849
+ "maximumLogChunkBytes": 65536,
2850
+ "maximumTotalLogBytes": 10485760,
2851
+ "maximumWorkspaceBytes": 268435456,
2852
+ "maximumWorkspaceEntries": 100000
2853
+ }
2854
+ },
2855
+ "permissions": {
2856
+ "source": "read",
2857
+ "artifacts": "none",
2858
+ "caches": "none",
2859
+ "images": "none"
2860
+ },
2861
+ "network": {
2862
+ "mode": "none"
2863
+ },
2864
+ "execution": {
2865
+ "profile": "oci",
2866
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2867
+ },
2868
+ "steps": [
2869
+ {
2870
+ "command": [
2871
+ "pnpm",
2872
+ "test"
2873
+ ],
2874
+ "environment": {
2875
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
2876
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
2877
+ }
2878
+ }
2879
+ ],
2880
+ "source": {
2881
+ "format": "tar.gz",
2882
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2883
+ "sizeBytes": 1024,
2884
+ "extractedSizeBytes": 4096,
2885
+ "entryCount": 4
2886
+ },
2887
+ "secrets": {},
2888
+ "timeoutMs": 3600000,
2889
+ "artifacts": [],
2890
+ "caches": [],
2891
+ "compiledPlanDigest": "983b722b51e648482748ebd266d886e8599dad95970026641d5f37f3a2f65986"
2892
+ },
2893
+ "secretBindings": {}
2894
+ }
2895
+ ]
2896
+ }
2897
+ },
2898
+ {
2899
+ "id": "compile-byte-order-mark-trailing-comment",
2900
+ "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.",
2901
+ "workflow": {
2902
+ "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"
2903
+ },
2904
+ "context": {
2905
+ "repository": {
2906
+ "tenantId": "tenant-1",
2907
+ "repositoryId": "example/app",
2908
+ "url": "https://code.foss.global/example/app"
2909
+ },
2910
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2911
+ "source": {
2912
+ "format": "tar.gz",
2913
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
2914
+ "sizeBytes": 1024,
2915
+ "extractedSizeBytes": 4096,
2916
+ "entryCount": 4
2917
+ },
2918
+ "trigger": {
2919
+ "kind": "push",
2920
+ "ref": "refs/heads/main"
1715
2921
  },
1716
2922
  "trustClass": "trusted",
1717
2923
  "protectedTagRun": false,
@@ -1730,15 +2936,92 @@
1730
2936
  "ociIsolation": "container"
1731
2937
  },
1732
2938
  "expected": {
1733
- "outcome": "failed",
1734
- "code": "workflow_schema_invalid"
2939
+ "outcome": "compiled",
2940
+ "workflowDigest": "ffd5489463937ced56358a73c93b7423d76aecfd6634c19d0d3b829f74a03890",
2941
+ "nodes": [
2942
+ {
2943
+ "id": "test",
2944
+ "kind": "job",
2945
+ "needs": [],
2946
+ "job": {
2947
+ "spec": "2.0.0",
2948
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2949
+ "workflowDigest": "ffd5489463937ced56358a73c93b7423d76aecfd6634c19d0d3b829f74a03890",
2950
+ "requirements": {
2951
+ "executionProfile": "oci",
2952
+ "isolation": "container",
2953
+ "labels": [
2954
+ "linux"
2955
+ ],
2956
+ "features": [
2957
+ "source.tar-gz"
2958
+ ],
2959
+ "limits": {
2960
+ "maximumSourceArchiveBytes": 1048576,
2961
+ "maximumSourceExtractedBytes": 4194304,
2962
+ "maximumSourceEntries": 1000,
2963
+ "maximumArtifactArchiveBytes": 0,
2964
+ "maximumArtifactExtractedBytes": 0,
2965
+ "maximumArtifactEntries": 0,
2966
+ "maximumArtifacts": 0,
2967
+ "maximumCacheArchiveBytes": 0,
2968
+ "maximumCacheExtractedBytes": 0,
2969
+ "maximumCacheEntries": 0,
2970
+ "maximumCaches": 0,
2971
+ "maximumLogChunkBytes": 65536,
2972
+ "maximumTotalLogBytes": 10485760,
2973
+ "maximumWorkspaceBytes": 268435456,
2974
+ "maximumWorkspaceEntries": 100000
2975
+ }
2976
+ },
2977
+ "permissions": {
2978
+ "source": "read",
2979
+ "artifacts": "none",
2980
+ "caches": "none",
2981
+ "images": "none"
2982
+ },
2983
+ "network": {
2984
+ "mode": "none"
2985
+ },
2986
+ "execution": {
2987
+ "profile": "oci",
2988
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2989
+ },
2990
+ "steps": [
2991
+ {
2992
+ "command": [
2993
+ "pnpm",
2994
+ "test"
2995
+ ],
2996
+ "environment": {
2997
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
2998
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
2999
+ }
3000
+ }
3001
+ ],
3002
+ "source": {
3003
+ "format": "tar.gz",
3004
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
3005
+ "sizeBytes": 1024,
3006
+ "extractedSizeBytes": 4096,
3007
+ "entryCount": 4
3008
+ },
3009
+ "secrets": {},
3010
+ "timeoutMs": 3600000,
3011
+ "artifacts": [],
3012
+ "caches": [],
3013
+ "compiledPlanDigest": "069c5d49b54c41a6dd656a2ffa7b61993d541e519e621d5f678675e6d7fb2c5c"
3014
+ },
3015
+ "secretBindings": {}
3016
+ }
3017
+ ]
1735
3018
  }
1736
3019
  },
1737
3020
  {
1738
- "id": "compile-minimal-push",
1739
- "description": "Defaults: network none, the default timeout, the reserved variables, derived limits without transfers, and container isolation.",
3021
+ "id": "compile-byte-order-mark-trailing-blank-and-comment",
3022
+ "description": "A blank line, then a comment line that begins with U+FEFF, after the document.",
1740
3023
  "workflow": {
1741
- "fixture": "conformance/ci-actions/valid/minimal.yml"
3024
+ "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"
1742
3025
  },
1743
3026
  "context": {
1744
3027
  "repository": {
@@ -1776,7 +3059,7 @@
1776
3059
  },
1777
3060
  "expected": {
1778
3061
  "outcome": "compiled",
1779
- "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
3062
+ "workflowDigest": "519951a2272c4bc7bab2c40dff765c2f519a22f63785de56c88a3670e9ed5638",
1780
3063
  "nodes": [
1781
3064
  {
1782
3065
  "id": "test",
@@ -1785,7 +3068,7 @@
1785
3068
  "job": {
1786
3069
  "spec": "2.0.0",
1787
3070
  "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1788
- "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
3071
+ "workflowDigest": "519951a2272c4bc7bab2c40dff765c2f519a22f63785de56c88a3670e9ed5638",
1789
3072
  "requirements": {
1790
3073
  "executionProfile": "oci",
1791
3074
  "isolation": "container",
@@ -1849,7 +3132,7 @@
1849
3132
  "timeoutMs": 3600000,
1850
3133
  "artifacts": [],
1851
3134
  "caches": [],
1852
- "compiledPlanDigest": "98fe7404ad887e287d65e2ac92689fbc3f494c2f28541490bc85f9fccbc0189e"
3135
+ "compiledPlanDigest": "1422d43d648ecde917372620092d9e92efc58638d7de6abf668e795cd85c1c7c"
1853
3136
  },
1854
3137
  "secretBindings": {}
1855
3138
  }
@@ -1857,10 +3140,10 @@
1857
3140
  }
1858
3141
  },
1859
3142
  {
1860
- "id": "compile-oci-isolation-policy",
1861
- "description": "Deployment policy requires microvm isolation for oci jobs.",
3143
+ "id": "compile-quoted-scalar-content",
3144
+ "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.",
1862
3145
  "workflow": {
1863
- "fixture": "conformance/ci-actions/valid/minimal.yml"
3146
+ "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"
1864
3147
  },
1865
3148
  "context": {
1866
3149
  "repository": {
@@ -1894,11 +3177,11 @@
1894
3177
  "maximumWorkspaceBytes": 268435456,
1895
3178
  "maximumWorkspaceEntries": 100000
1896
3179
  },
1897
- "ociIsolation": "microvm"
3180
+ "ociIsolation": "container"
1898
3181
  },
1899
3182
  "expected": {
1900
3183
  "outcome": "compiled",
1901
- "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
3184
+ "workflowDigest": "7292aa64a747a9841d9c8bc71f22c2bcaccb4ec8cad2f6bd0c638cb2802705f3",
1902
3185
  "nodes": [
1903
3186
  {
1904
3187
  "id": "test",
@@ -1907,10 +3190,133 @@
1907
3190
  "job": {
1908
3191
  "spec": "2.0.0",
1909
3192
  "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1910
- "workflowDigest": "f4fb8f79b1b2185598c6366d8f164b07cd903dfc66ff40689709035f68ddec1f",
3193
+ "workflowDigest": "7292aa64a747a9841d9c8bc71f22c2bcaccb4ec8cad2f6bd0c638cb2802705f3",
1911
3194
  "requirements": {
1912
3195
  "executionProfile": "oci",
1913
- "isolation": "microvm",
3196
+ "isolation": "container",
3197
+ "labels": [
3198
+ "linux"
3199
+ ],
3200
+ "features": [
3201
+ "source.tar-gz"
3202
+ ],
3203
+ "limits": {
3204
+ "maximumSourceArchiveBytes": 1048576,
3205
+ "maximumSourceExtractedBytes": 4194304,
3206
+ "maximumSourceEntries": 1000,
3207
+ "maximumArtifactArchiveBytes": 0,
3208
+ "maximumArtifactExtractedBytes": 0,
3209
+ "maximumArtifactEntries": 0,
3210
+ "maximumArtifacts": 0,
3211
+ "maximumCacheArchiveBytes": 0,
3212
+ "maximumCacheExtractedBytes": 0,
3213
+ "maximumCacheEntries": 0,
3214
+ "maximumCaches": 0,
3215
+ "maximumLogChunkBytes": 65536,
3216
+ "maximumTotalLogBytes": 10485760,
3217
+ "maximumWorkspaceBytes": 268435456,
3218
+ "maximumWorkspaceEntries": 100000
3219
+ }
3220
+ },
3221
+ "permissions": {
3222
+ "source": "read",
3223
+ "artifacts": "none",
3224
+ "caches": "none",
3225
+ "images": "none"
3226
+ },
3227
+ "network": {
3228
+ "mode": "none"
3229
+ },
3230
+ "execution": {
3231
+ "profile": "oci",
3232
+ "image": "registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3233
+ },
3234
+ "steps": [
3235
+ {
3236
+ "command": [
3237
+ "pnpm",
3238
+ "\u007f\u0080\u0085\ufeff\ufffe\uffff",
3239
+ "\u009f\ufeff😀😀\u007f"
3240
+ ],
3241
+ "environment": {
3242
+ "SHIPZONE_CI_MATRIX_JSON": "{}",
3243
+ "SHIPZONE_CI_INPUTS_JSON": "{}"
3244
+ }
3245
+ }
3246
+ ],
3247
+ "source": {
3248
+ "format": "tar.gz",
3249
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
3250
+ "sizeBytes": 1024,
3251
+ "extractedSizeBytes": 4096,
3252
+ "entryCount": 4
3253
+ },
3254
+ "secrets": {},
3255
+ "timeoutMs": 3600000,
3256
+ "artifacts": [],
3257
+ "caches": [],
3258
+ "compiledPlanDigest": "f9ce334d6a205eb2f4671c08859661340985ceb30b0fc3c8caaea71d9d82c896"
3259
+ },
3260
+ "secretBindings": {}
3261
+ }
3262
+ ]
3263
+ }
3264
+ },
3265
+ {
3266
+ "id": "compile-carriage-return-line-breaks",
3267
+ "description": "Every line ends in a carriage return alone, a YAML 1.2 line break; the block scalar reads its line breaks as line feeds.",
3268
+ "workflow": {
3269
+ "source": "spec: 2.0.0\ron:\r push: {}\rpermissions:\r source: read\r artifacts: none\r caches: none\r images: none\r npm: none\r releaseAssets: none\rjobs:\r test:\r runner:\r profile: oci\r labels:\r - linux\r execution:\r profile: oci\r image: registry.example/test@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r steps:\r - run:\r - pnpm\r - test\r environment:\r NOTE: |\r x\r y\r"
3270
+ },
3271
+ "context": {
3272
+ "repository": {
3273
+ "tenantId": "tenant-1",
3274
+ "repositoryId": "example/app",
3275
+ "url": "https://code.foss.global/example/app"
3276
+ },
3277
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
3278
+ "source": {
3279
+ "format": "tar.gz",
3280
+ "sha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
3281
+ "sizeBytes": 1024,
3282
+ "extractedSizeBytes": 4096,
3283
+ "entryCount": 4
3284
+ },
3285
+ "trigger": {
3286
+ "kind": "push",
3287
+ "ref": "refs/heads/main"
3288
+ },
3289
+ "trustClass": "trusted",
3290
+ "protectedTagRun": false,
3291
+ "secrets": []
3292
+ },
3293
+ "policy": {
3294
+ "limits": {
3295
+ "maximumSourceArchiveBytes": 1048576,
3296
+ "maximumSourceExtractedBytes": 4194304,
3297
+ "maximumSourceEntries": 1000,
3298
+ "maximumLogChunkBytes": 65536,
3299
+ "maximumTotalLogBytes": 10485760,
3300
+ "maximumWorkspaceBytes": 268435456,
3301
+ "maximumWorkspaceEntries": 100000
3302
+ },
3303
+ "ociIsolation": "container"
3304
+ },
3305
+ "expected": {
3306
+ "outcome": "compiled",
3307
+ "workflowDigest": "242def6036a62e9aaa48035fe6b5718f40f3b74500d2d3262dcb5ac388212f40",
3308
+ "nodes": [
3309
+ {
3310
+ "id": "test",
3311
+ "kind": "job",
3312
+ "needs": [],
3313
+ "job": {
3314
+ "spec": "2.0.0",
3315
+ "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
3316
+ "workflowDigest": "242def6036a62e9aaa48035fe6b5718f40f3b74500d2d3262dcb5ac388212f40",
3317
+ "requirements": {
3318
+ "executionProfile": "oci",
3319
+ "isolation": "container",
1914
3320
  "labels": [
1915
3321
  "linux"
1916
3322
  ],
@@ -1955,6 +3361,7 @@
1955
3361
  "test"
1956
3362
  ],
1957
3363
  "environment": {
3364
+ "NOTE": "x\ny\n",
1958
3365
  "SHIPZONE_CI_MATRIX_JSON": "{}",
1959
3366
  "SHIPZONE_CI_INPUTS_JSON": "{}"
1960
3367
  }
@@ -1971,7 +3378,7 @@
1971
3378
  "timeoutMs": 3600000,
1972
3379
  "artifacts": [],
1973
3380
  "caches": [],
1974
- "compiledPlanDigest": "339c039f5c9819669e9426fec53738cc1008b2fb83c83ff8697a8726a6404223"
3381
+ "compiledPlanDigest": "b68c11661ebb60182581880e4513dc08619e58d7ada5ba5c09ccd20276429b8b"
1975
3382
  },
1976
3383
  "secretBindings": {}
1977
3384
  }
@@ -1979,10 +3386,10 @@
1979
3386
  }
1980
3387
  },
1981
3388
  {
1982
- "id": "compile-byte-order-mark",
1983
- "description": "A leading byte order mark is accepted; the workflow digest covers it.",
3389
+ "id": "compile-byte-order-mark-after-keep-block",
3390
+ "description": "A keep-chomped block scalar ends the document, followed by an empty line, a line of U+FEFF, and an empty line: the empty line before the byte order mark line is content of the scalar, the lines from the byte order mark line on are not.",
1984
3391
  "workflow": {
1985
- "sourceBase64": "77u/c3BlYzogMi4wLjAKb246CiAgcHVzaDoge30KcGVybWlzc2lvbnM6CiAgc291cmNlOiByZWFkCiAgYXJ0aWZhY3RzOiBub25lCiAgY2FjaGVzOiBub25lCiAgaW1hZ2VzOiBub25lCiAgbnBtOiBub25lCiAgcmVsZWFzZUFzc2V0czogbm9uZQpqb2JzOgogIHRlc3Q6CiAgICBydW5uZXI6CiAgICAgIHByb2ZpbGU6IG9jaQogICAgICBsYWJlbHM6CiAgICAgICAgLSBsaW51eAogICAgZXhlY3V0aW9uOgogICAgICBwcm9maWxlOiBvY2kKICAgICAgaW1hZ2U6IHJlZ2lzdHJ5LmV4YW1wbGUvdGVzdEBzaGEyNTY6YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQogICAgc3RlcHM6CiAgICAgIC0gcnVuOgogICAgICAgICAgLSBwbnBtCiAgICAgICAgICAtIHRlc3QK"
3392
+ "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 environment:\n NOTE: |+\n x\n\n\ufeff\n\n"
1986
3393
  },
1987
3394
  "context": {
1988
3395
  "repository": {
@@ -2020,7 +3427,7 @@
2020
3427
  },
2021
3428
  "expected": {
2022
3429
  "outcome": "compiled",
2023
- "workflowDigest": "f61d4938282a57e8a6eb4a62320ca68a071816e6230093d4fad5881e56f2ca51",
3430
+ "workflowDigest": "fde33b8dc0ca13394f5f62ac0349b963e5678eae7cce9afa4652faada80531f6",
2024
3431
  "nodes": [
2025
3432
  {
2026
3433
  "id": "test",
@@ -2029,7 +3436,7 @@
2029
3436
  "job": {
2030
3437
  "spec": "2.0.0",
2031
3438
  "sourceObjectId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2032
- "workflowDigest": "f61d4938282a57e8a6eb4a62320ca68a071816e6230093d4fad5881e56f2ca51",
3439
+ "workflowDigest": "fde33b8dc0ca13394f5f62ac0349b963e5678eae7cce9afa4652faada80531f6",
2033
3440
  "requirements": {
2034
3441
  "executionProfile": "oci",
2035
3442
  "isolation": "container",
@@ -2077,6 +3484,7 @@
2077
3484
  "test"
2078
3485
  ],
2079
3486
  "environment": {
3487
+ "NOTE": "x\n\n",
2080
3488
  "SHIPZONE_CI_MATRIX_JSON": "{}",
2081
3489
  "SHIPZONE_CI_INPUTS_JSON": "{}"
2082
3490
  }
@@ -2093,7 +3501,7 @@
2093
3501
  "timeoutMs": 3600000,
2094
3502
  "artifacts": [],
2095
3503
  "caches": [],
2096
- "compiledPlanDigest": "0b420b0f74d8da40c9606082dc877598fa682f14753b4673dbe1e6960cd11899"
3504
+ "compiledPlanDigest": "5ea1d0fe4980d633960d99241348dc9818e7a1defb7edd0510c15204f0715830"
2097
3505
  },
2098
3506
  "secretBindings": {}
2099
3507
  }