Skip to content

Commit 2014a85

Browse files
committed
Add schema-based rules for tools data of package index
These are the JSON schema-based rules to check the tool level data.
1 parent c1fd3df commit 2014a85

File tree

33 files changed

+3406
-1
lines changed

33 files changed

+3406
-1
lines changed

internal/rule/ruleconfiguration/ruleconfiguration.go

Lines changed: 481 additions & 1 deletion
Large diffs are not rendered by default.

internal/rule/rulefunction/packageindex.go

Lines changed: 600 additions & 0 deletions
Large diffs are not rendered by default.

internal/rule/rulefunction/packageindex_test.go

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,196 @@ func TestPackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver(t *testi
922922
checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver, testTables, t)
923923
}
924924

925+
func TestPackageIndexPackagesToolsMissing(t *testing.T) {
926+
testTables := []packageIndexRuleFunctionTestTable{
927+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
928+
{"packages[].tools missing", "packages-tools-missing", ruleresult.Fail, "^foopackager$"},
929+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
930+
}
931+
932+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsMissing, testTables, t)
933+
}
934+
935+
func TestPackageIndexPackagesToolsIncorrectType(t *testing.T) {
936+
testTables := []packageIndexRuleFunctionTestTable{
937+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
938+
{"Incorrect packages[].tools type", "packages-tools-incorrect-type", ruleresult.Fail, "^foopackager$"},
939+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
940+
}
941+
942+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsIncorrectType, testTables, t)
943+
}
944+
945+
func TestPackageIndexPackagesToolsAdditionalProperties(t *testing.T) {
946+
testTables := []packageIndexRuleFunctionTestTable{
947+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
948+
{"Additional packages[].tools[] properties", "packages-tools-additional-properties", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2$"},
949+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
950+
}
951+
952+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsAdditionalProperties, testTables, t)
953+
}
954+
955+
func TestPackageIndexPackagesToolsNameMissing(t *testing.T) {
956+
testTables := []packageIndexRuleFunctionTestTable{
957+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
958+
{"packages[].tools[].name missing", "packages-tools-name-missing", ruleresult.Fail, "^/packages/0/tools/0$"},
959+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
960+
}
961+
962+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsNameMissing, testTables, t)
963+
}
964+
965+
func TestPackageIndexPackagesToolsNameIncorrectType(t *testing.T) {
966+
testTables := []packageIndexRuleFunctionTestTable{
967+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
968+
{"Incorrect packages[].tools.name type", "packages-tools-name-incorrect-type", ruleresult.Fail, "^/packages/0/tools/0$"},
969+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
970+
}
971+
972+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsNameIncorrectType, testTables, t)
973+
}
974+
975+
func TestPackageIndexPackagesToolsNameLTMinLength(t *testing.T) {
976+
testTables := []packageIndexRuleFunctionTestTable{
977+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
978+
{"packages[].tools[].name < min length", "packages-tools-name-length-lt", ruleresult.Fail, "^/packages/0/tools/0$"},
979+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
980+
}
981+
982+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsNameLTMinLength, testTables, t)
983+
}
984+
985+
func TestPackageIndexPackagesToolsVersionMissing(t *testing.T) {
986+
testTables := []packageIndexRuleFunctionTestTable{
987+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
988+
{"packages[].tools[].version missing", "packages-tools-version-missing", ruleresult.Fail, "^/packages/0/tools/0$"},
989+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
990+
}
991+
992+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionMissing, testTables, t)
993+
}
994+
995+
func TestPackageIndexPackagesToolsVersionIncorrectType(t *testing.T) {
996+
testTables := []packageIndexRuleFunctionTestTable{
997+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
998+
{"Incorrect packages[].tools[].version type", "packages-tools-version-incorrect-type", ruleresult.Fail, "^/packages/0/tools/0$"},
999+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1000+
}
1001+
1002+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionIncorrectType, testTables, t)
1003+
}
1004+
1005+
func TestPackageIndexPackagesToolsVersionNonRelaxedSemver(t *testing.T) {
1006+
testTables := []packageIndexRuleFunctionTestTable{
1007+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1008+
{"packages[].tools[].version not relaxed semver", "packages-tools-version-non-relaxed-semver", ruleresult.Fail, "^foopackager:openocd@foo$"},
1009+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1010+
}
1011+
1012+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionNonRelaxedSemver, testTables, t)
1013+
}
1014+
1015+
func TestPackageIndexPackagesToolsVersionNonSemver(t *testing.T) {
1016+
testTables := []packageIndexRuleFunctionTestTable{
1017+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1018+
{"packages[].tools[].version not semver", "packages-tools-version-not-semver", ruleresult.Fail, "^foopackager:openocd@1.0$"},
1019+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1020+
}
1021+
1022+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionNonSemver, testTables, t)
1023+
}
1024+
1025+
func TestPackageIndexPackagesToolsSystemsMissing(t *testing.T) {
1026+
testTables := []packageIndexRuleFunctionTestTable{
1027+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1028+
{"packages[].tools[].systems[] missing", "packages-tools-systems-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2$"},
1029+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1030+
}
1031+
1032+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsMissing, testTables, t)
1033+
}
1034+
1035+
func TestPackageIndexPackagesToolsSystemsIncorrectType(t *testing.T) {
1036+
testTables := []packageIndexRuleFunctionTestTable{
1037+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1038+
{"Incorrect packages[].tools[].systems type", "packages-tools-systems-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2$"},
1039+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1040+
}
1041+
1042+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsIncorrectType, testTables, t)
1043+
}
1044+
1045+
func TestPackageIndexPackagesToolsSystemsAdditionalProperties(t *testing.T) {
1046+
testTables := []packageIndexRuleFunctionTestTable{
1047+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1048+
{"Additional packages[].tools[].systems[] properties", "packages-tools-systems-additional-properties", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1049+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1050+
}
1051+
1052+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsAdditionalProperties, testTables, t)
1053+
}
1054+
1055+
func TestPackageIndexPackagesToolsSystemsHostMissing(t *testing.T) {
1056+
testTables := []packageIndexRuleFunctionTestTable{
1057+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1058+
{"packages[].tools[].systems[].host missing", "packages-tools-systems-host-missing", ruleresult.Fail, "^/packages/0/tools/0/systems/0$"},
1059+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1060+
}
1061+
1062+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsHostMissing, testTables, t)
1063+
}
1064+
1065+
func TestPackageIndexPackagesToolsSystemsHostIncorrectType(t *testing.T) {
1066+
testTables := []packageIndexRuleFunctionTestTable{
1067+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1068+
{"Incorrect packages[].tools[].systems[].host type", "packages-tools-systems-host-incorrect-type", ruleresult.Fail, "^/packages/0/tools/0/systems/0$"},
1069+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1070+
}
1071+
1072+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsHostIncorrectType, testTables, t)
1073+
}
1074+
1075+
func TestPackageIndexPackagesToolsSystemsHostInvalid(t *testing.T) {
1076+
testTables := []packageIndexRuleFunctionTestTable{
1077+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1078+
{"Invalid packages[].tools[].systems[].host format", "packages-tools-systems-host-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - foo$"},
1079+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1080+
}
1081+
1082+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsHostInvalid, testTables, t)
1083+
}
1084+
1085+
func TestPackageIndexPackagesToolsSystemsUrlMissing(t *testing.T) {
1086+
testTables := []packageIndexRuleFunctionTestTable{
1087+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1088+
{"packages[].tools[].systems[].url missing", "packages-tools-systems-url-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1089+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1090+
}
1091+
1092+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsUrlMissing, testTables, t)
1093+
}
1094+
1095+
func TestPackageIndexPackagesToolsSystemsUrlIncorrectType(t *testing.T) {
1096+
testTables := []packageIndexRuleFunctionTestTable{
1097+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1098+
{"Incorrect packages[].tools[].systems[].url type", "packages-tools-systems-url-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1099+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1100+
}
1101+
1102+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsUrlIncorrectType, testTables, t)
1103+
}
1104+
1105+
func TestPackageIndexPackagesToolsSystemsUrlInvalidFormat(t *testing.T) {
1106+
testTables := []packageIndexRuleFunctionTestTable{
1107+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1108+
{"Incorrect packages[].tools[].systems[].url format", "packages-tools-systems-url-invalid-format", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1109+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1110+
}
1111+
1112+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsUrlInvalidFormat, testTables, t)
1113+
}
1114+
9251115
func TestPackageIndexPackagesToolsSystemsURLDeadLink(t *testing.T) {
9261116
testTables := []packageIndexRuleFunctionTestTable{
9271117
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
@@ -931,3 +1121,113 @@ func TestPackageIndexPackagesToolsSystemsURLDeadLink(t *testing.T) {
9311121

9321122
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsURLDeadLink, testTables, t)
9331123
}
1124+
1125+
func TestPackageIndexPackagesToolsSystemsArchiveFileNameMissing(t *testing.T) {
1126+
testTables := []packageIndexRuleFunctionTestTable{
1127+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1128+
{"packages[].tools[].systems[].archiveFileName missing", "packages-tools-systems-archivefilename-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1129+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1130+
}
1131+
1132+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameMissing, testTables, t)
1133+
}
1134+
1135+
func TestPackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType(t *testing.T) {
1136+
testTables := []packageIndexRuleFunctionTestTable{
1137+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1138+
{"Incorrect packages[].tools[].systems[].archiveFileName type", "packages-tools-systems-archivefilename-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1139+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1140+
}
1141+
1142+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType, testTables, t)
1143+
}
1144+
1145+
func TestPackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength(t *testing.T) {
1146+
testTables := []packageIndexRuleFunctionTestTable{
1147+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1148+
{"packages[].tools[].systems[].archiveFileName < min length", "packages-tools-systems-archivefilename-length-lt", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1149+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1150+
}
1151+
1152+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength, testTables, t)
1153+
}
1154+
1155+
func TestPackageIndexPackagesToolsSystemsArchiveFileNameInvalid(t *testing.T) {
1156+
testTables := []packageIndexRuleFunctionTestTable{
1157+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1158+
{"Invalid packages[].tools[].systems[].archiveFileName format", "packages-tools-systems-archivefilename-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1159+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1160+
}
1161+
1162+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameInvalid, testTables, t)
1163+
}
1164+
1165+
func TestPackageIndexPackagesToolsSystemsChecksumMissing(t *testing.T) {
1166+
testTables := []packageIndexRuleFunctionTestTable{
1167+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1168+
{"packages[].tools[].systems[].checksum missing", "packages-tools-systems-checksum-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1169+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1170+
}
1171+
1172+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumMissing, testTables, t)
1173+
}
1174+
1175+
func TestPackageIndexPackagesToolsSystemsChecksumIncorrectType(t *testing.T) {
1176+
testTables := []packageIndexRuleFunctionTestTable{
1177+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1178+
{"Incorrect packages[].tools[].systems[].checksum type", "packages-tools-systems-checksum-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1179+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1180+
}
1181+
1182+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumIncorrectType, testTables, t)
1183+
}
1184+
1185+
func TestPackageIndexPackagesToolsSystemsChecksumInvalid(t *testing.T) {
1186+
testTables := []packageIndexRuleFunctionTestTable{
1187+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1188+
{"Invalid packages[].tools[].systems[].checksum format", "packages-tools-systems-checksum-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1189+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1190+
}
1191+
1192+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumInvalid, testTables, t)
1193+
}
1194+
1195+
func TestPackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm(t *testing.T) {
1196+
testTables := []packageIndexRuleFunctionTestTable{
1197+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1198+
{"packages[].tools[].systems[].checksum uses discouraged algorithm", "packages-tools-systems-checksum-discouraged", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1199+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1200+
}
1201+
1202+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm, testTables, t)
1203+
}
1204+
1205+
func TestPackageIndexPackagesToolsSystemsSizeMissing(t *testing.T) {
1206+
testTables := []packageIndexRuleFunctionTestTable{
1207+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1208+
{"packages[].tools[].systems[].size missing", "packages-tools-systems-size-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1209+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1210+
}
1211+
1212+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsSizeMissing, testTables, t)
1213+
}
1214+
1215+
func TestPackageIndexPackagesToolsSystemsSizeIncorrectType(t *testing.T) {
1216+
testTables := []packageIndexRuleFunctionTestTable{
1217+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1218+
{"Incorrect packages[].tools[].systems[].size type", "packages-tools-systems-size-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1219+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1220+
}
1221+
1222+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsSizeIncorrectType, testTables, t)
1223+
}
1224+
1225+
func TestPackageIndexPackagesToolsSystemsSizeInvalid(t *testing.T) {
1226+
testTables := []packageIndexRuleFunctionTestTable{
1227+
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
1228+
{"Invalid packages[].tools[].systems[].size format", "packages-tools-systems-size-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
1229+
{"Valid", "valid-package-index", ruleresult.Pass, ""},
1230+
}
1231+
1232+
checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsSizeInvalid, testTables, t)
1233+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
{
2+
"packages": [
3+
{
4+
"name": "foopackager",
5+
"maintainer": "Jane Developer",
6+
"websiteURL": "http://example.com",
7+
"email": "jane@example.com",
8+
"help": {
9+
"online": "http://example.com"
10+
},
11+
"platforms": [
12+
{
13+
"name": "My Board",
14+
"architecture": "avr",
15+
"version": "1.0.0",
16+
"category": "Contributed",
17+
"help": {
18+
"online": "http://example.com"
19+
},
20+
"url": "http://example.com",
21+
"archiveFileName": "myboard-1.0.0.zip",
22+
"checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8",
23+
"size": "15005",
24+
"boards": [],
25+
"toolsDependencies": []
26+
}
27+
],
28+
"tools": [
29+
{
30+
"foo": "bar",
31+
"name": "openocd",
32+
"version": "0.11.0-arduino2",
33+
"systems": [
34+
{
35+
"size": "1902818",
36+
"checksum": "SHA-256:a1aa7f1435a61eafb72ee90722f2496d6a34a7a0f085d0315c2613e4a548b824",
37+
"host": "aarch64-linux-gnu",
38+
"archiveFileName": "openocd-0.11.0-arduino2-static-aarch64-linux-gnu.tar.bz2",
39+
"url": "http://example.com"
40+
},
41+
{
42+
"size": "1986716",
43+
"checksum": "SHA-256:57041130160be086e69387cceb4616eefc9819a0ef75de1f7c11aea57fb92699",
44+
"host": "arm-linux-gnueabihf",
45+
"archiveFileName": "openocd-0.11.0-arduino2-static-arm-linux-gnueabihf.tar.bz2",
46+
"url": "http://example.com"
47+
}
48+
]
49+
},
50+
{
51+
"name": "CMSIS",
52+
"version": "4.0.0-atmel",
53+
"systems": [
54+
{
55+
"host": "arm-linux-gnueabihf",
56+
"url": "http://example.com",
57+
"archiveFileName": "CMSIS-4.0.0.tar.bz2",
58+
"checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7",
59+
"size": "17642623"
60+
},
61+
{
62+
"host": "i686-mingw32",
63+
"url": "http://example.com",
64+
"archiveFileName": "CMSIS-4.0.0.tar.bz2",
65+
"checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7",
66+
"size": "17642623"
67+
}
68+
]
69+
}
70+
]
71+
}
72+
]
73+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy