Docker image support #18

Merged
Sirherobrine23 merged 6 commits from dockerImage into main 2023-03-29 16:19:56 +00:00
6 changed files with 511 additions and 235 deletions
Showing only changes of commit be1e8e7ebf - Show all commits

223
package-lock.json generated
View File

@ -9,19 +9,19 @@
"version": "1.0.0",
"license": "GPL-2.0",
"dependencies": {
"@sirherobrine23/cloud": "^3.5.2",
"@sirherobrine23/debian": "^3.5.2",
"@sirherobrine23/docker-registry": "^3.5.2",
"@sirherobrine23/extends": "^3.5.2",
"@sirherobrine23/http": "^3.5.2",
"@sirherobrine23/cloud": "^3.5.4",
"@sirherobrine23/debian": "^3.5.4",
"@sirherobrine23/docker-registry": "^3.5.4",
"@sirherobrine23/extends": "^3.5.4",
"@sirherobrine23/http": "^3.5.4",
"acme-client": "^5.0.0",
"express": "^4.18.2",
"inquirer": "^9.1.4",
"inquirer": "^9.1.5",
"lzma-native": "^8.0.6",
"mongodb": "^5.1.0",
"nano": "^10.1.2",
"openpgp": "^5.7.0",
"ora": "^6.1.2",
"ora": "^6.3.0",
"semver": "^7.3.8",
"tar": "^6.1.13",
"yaml": "^2.2.1",
@ -34,12 +34,12 @@
"@types/express": "^4.17.17",
"@types/inquirer": "^9.0.3",
"@types/lzma-native": "^4.0.1",
"@types/node": "^18.14.2",
"@types/node": "^18.15.10",
"@types/semver": "^7.3.13",
"@types/tar": "^6.1.4",
"@types/yargs": "^17.0.22",
"@types/yargs": "^17.0.24",
"ts-node": "^10.9.1",
"typescript": "^4.9.5"
"typescript": "^5.0.2"
},
"engines": {
"node": ">=14.0.0"
@ -414,59 +414,71 @@
}
},
"node_modules/@sirherobrine23/ar": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@sirherobrine23/ar/-/ar-3.5.2.tgz",
"integrity": "sha512-rvCyKgVUKp6XyWRBAP8hTfFtX2JQJOuWgccX0ICDyApSCwDvLq2pj4JqHppfYhi+g3rwLPgzNs++Sr1g4sb0eg=="
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/ar/-/ar-3.5.4.tgz",
"integrity": "sha512-9/01fOwIvUh35MnsPxSE6gCBq5VHZzmpEyqJKG7gjUvWKb4sqw6onAlbgKFN5tGw5xt5lXBHMWV+ZF7RiFr04A=="
},
"node_modules/@sirherobrine23/cloud": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@sirherobrine23/cloud/-/cloud-3.5.2.tgz",
"integrity": "sha512-ym5AwSjekpuBc0kMmAbPnAjl4vNoTYFcWqIfb6BEpiYjJHdnSFAu2QWSPMIzUL9NOCsU8oiTLQVwkbj2Psxjyg==",
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/cloud/-/cloud-3.5.4.tgz",
"integrity": "sha512-zODsjbKMOS9vGJqfLCK101GALPtejDtotjwZuy43QOO9tys3s4ASmW18vNaxXhoKB+OHiBYffpa/88OupOGT2Q==",
"dependencies": {
"@sirherobrine23/extends": "3.5.2",
"@sirherobrine23/http": "3.5.2",
"@sirherobrine23/extends": "3.5.4",
"@sirherobrine23/http": "3.5.4",
"chokidar": "^3.5.3",
"googleapis": "^110.0.0",
"oci-common": "^2.50.4",
"oci-objectstorage": "^2.53.1"
"oci-objectstorage": "^2.55.0"
}
},
"node_modules/@sirherobrine23/debian": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@sirherobrine23/debian/-/debian-3.5.2.tgz",
"integrity": "sha512-l2QJLnnEteGjkJLQbsxPlFyUCkJD6KxQnrudB1WQCEzC4q0E3zU/Ip7OSuZ0l5X0R6O8nhxgkEJJXGM0ZAeoPw==",
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/debian/-/debian-3.5.4.tgz",
"integrity": "sha512-Uk+XiyhoAKox2PpTZ6Db7sHC3LMRoetnk/GVONuup6LsIXt8U6nbgpwb+jjxTaoujleUj8opZ+zimk3LqTyETg==",
"dependencies": {
"@sirherobrine23/ar": "3.5.2",
"@sirherobrine23/extends": "3.5.2",
"@sirherobrine23/http": "3.5.2",
"@sirherobrine23/ar": "3.5.4",
"@sirherobrine23/extends": "3.5.4",
"@sirherobrine23/http": "3.5.4",
"lzma-native": "^8.0.6",
"unbzip2-stream": "^1.4.3"
}
},
"node_modules/@sirherobrine23/docker-registry": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@sirherobrine23/docker-registry/-/docker-registry-3.5.2.tgz",
"integrity": "sha512-HKXfGRH7HkWJvJA2HRpbE4/E4Dl2FTEA7ePvw1v0LW/rgpWLlqqaxu1zcdtJUqjBLyn7q4n5x9YEe9BjSgD6ZA==",
"node_modules/@sirherobrine23/decompress": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/decompress/-/decompress-3.5.4.tgz",
"integrity": "sha512-eavUtMdjMN5oYt0fkuTQ5UShags6lPNR/UHXUPkO0/pLI+kCweffVrYNpGtF086r4Er34c+peLvQqobBaFwxZQ==",
"dependencies": {
"@sirherobrine23/http": "3.5.2",
"tar": "^6.1.13"
"duplexify": "^4.1.2"
},
"optionalDependencies": {
"lzma-native": "^8.0.6"
}
},
"node_modules/@sirherobrine23/docker-registry": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/docker-registry/-/docker-registry-3.5.4.tgz",
"integrity": "sha512-78Ihoho1on4MWom7juiqvX7cQnDPWyfq/edKpW24++JI/fNS9+R1YDjT6RqyAjAvSMDpLUrjKPjlsglZvKvzmA==",
"dependencies": {
"@sirherobrine23/decompress": "3.5.4",
"@sirherobrine23/http": "3.5.4",
"tar-stream": "^3.0.0"
}
},
"node_modules/@sirherobrine23/extends": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@sirherobrine23/extends/-/extends-3.5.2.tgz",
"integrity": "sha512-sW/Utw2q/jzrWyS8XRcLOMBSsmfY7ft+sJlVqjN4uONdO3eLU1+VoAAulZg6If1gREJlkJUD6/XNm70e8xLpHw=="
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/extends/-/extends-3.5.4.tgz",
"integrity": "sha512-qiRph46W7hK/eeoWwgUTJzOjW7Wp8vM1OVj/mjL+ZOVV66Q0RL06vWghIYVyoy5+gbWQJ0OuE+keO+xjkhfkRw=="
},
"node_modules/@sirherobrine23/http": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@sirherobrine23/http/-/http-3.5.2.tgz",
"integrity": "sha512-apL3hVX7sqthp2kFDI9MtEBTHusOvVy+e+WOdkKBIRnbBSaNs+VV8jugFG/WFT6LzIUyVfZdZvDu9mYyUTM14A==",
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/@sirherobrine23/http/-/http-3.5.4.tgz",
"integrity": "sha512-EjEZ8dKUKVd+GtDXUM08RE6LUoFA1JLUKbbNNqs1e0A11tsNghmtwCbEdJRYiHCc9HtAKNRmt8gWtT/ngWr5cg==",
"dependencies": {
"@sirherobrine23/extends": "3.5.2",
"@sirherobrine23/extends": "3.5.4",
"acme-client": "^5.0.0",
"adm-zip": "^0.5.10",
"got": "^12.5.3",
"jsdom": "^21.1.0",
"got": "^12.6.0",
"jsdom": "^21.1.1",
"octokit": "^2.0.14",
"tar": "^6.1.13",
"yaml": "^2.2.1"
@ -703,9 +715,9 @@
}
},
"node_modules/@types/yargs": {
"version": "17.0.23",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz",
"integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==",
"version": "17.0.24",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
"integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@ -722,6 +734,17 @@
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
},
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"dependencies": {
"event-target-shim": "^5.0.0"
},
"engines": {
"node": ">=6.5"
}
},
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@ -920,6 +943,11 @@
"form-data": "^4.0.0"
}
},
"node_modules/b4a": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.3.tgz",
"integrity": "sha512-aX6/FqpWQve8VN9kyTExy7GlmwNShvxcCWWD5QVR3ZbRlyBGtCrG5Autu95xxSPH4CRs+5PSV4d7PRnWpmqFlA=="
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@ -1525,6 +1553,17 @@
"node": ">=12"
}
},
"node_modules/duplexify": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
"integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
"dependencies": {
"end-of-stream": "^1.4.1",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1",
"stream-shift": "^1.0.0"
}
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@ -1565,6 +1604,14 @@
"node": ">= 0.8"
}
},
"node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/entities": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
@ -1662,6 +1709,22 @@
"node": ">= 0.6"
}
},
"node_modules/event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
"engines": {
"node": ">=6"
}
},
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"engines": {
"node": ">=0.8.x"
}
},
"node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@ -1742,6 +1805,11 @@
"node >=0.6.0"
]
},
"node_modules/fast-fifo": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz",
"integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g=="
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
@ -3163,6 +3231,14 @@
"node": ">= 0.8.0"
}
},
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@ -3212,6 +3288,11 @@
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
},
"node_modules/queue-tick": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
"integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
},
"node_modules/quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
@ -3562,6 +3643,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/stream-shift": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
},
"node_modules/streamx": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.13.2.tgz",
"integrity": "sha512-+TWqixPhGDXEG9L/XczSbhfkmwAtGs3BJX5QNU6cvno+pOLKeszByWcnaTu6dg8efsTYqR8ZZuXWHhZfgrxMvA==",
"dependencies": {
"fast-fifo": "^1.1.0",
"queue-tick": "^1.0.1"
}
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@ -3621,6 +3716,40 @@
"node": ">=10"
}
},
"node_modules/tar-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.0.0.tgz",
"integrity": "sha512-O6OfUKBbQOqAhh6owTWmA730J/yZCYcpmZ1DBj2YX51ZQrt7d7NgzrR+CnO9wP6nt/viWZW2XeXLavX3/ZEbEg==",
"dependencies": {
"b4a": "^1.6.1",
"bl": "^6.0.0",
"streamx": "^2.12.5"
}
},
"node_modules/tar-stream/node_modules/bl": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-6.0.1.tgz",
"integrity": "sha512-zk1P1eAEBHhhB+4NfGxqmuV6NgwECnIoRgsOq2ObdEsmoFVIYzJ/Jjcgaj7JOY/8ekH27bIHSV4Si2T+evqu+Q==",
"dependencies": {
"buffer": "^6.0.3",
"inherits": "^2.0.4",
"readable-stream": "^4.2.0"
}
},
"node_modules/tar-stream/node_modules/readable-stream": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.3.0.tgz",
"integrity": "sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==",
"dependencies": {
"abort-controller": "^3.0.0",
"buffer": "^6.0.3",
"events": "^3.3.0",
"process": "^0.11.10"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@ -3769,16 +3898,16 @@
}
},
"node_modules/typescript": {
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz",
"integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
"node": ">=12.20"
}
},
"node_modules/unbzip2-stream": {

View File

@ -36,27 +36,27 @@
"@types/express": "^4.17.17",
"@types/inquirer": "^9.0.3",
"@types/lzma-native": "^4.0.1",
"@types/node": "^18.14.2",
"@types/node": "^18.15.10",
"@types/semver": "^7.3.13",
"@types/tar": "^6.1.4",
"@types/yargs": "^17.0.22",
"@types/yargs": "^17.0.24",
"ts-node": "^10.9.1",
"typescript": "^4.9.5"
"typescript": "^5.0.2"
},
"dependencies": {
"@sirherobrine23/cloud": "^3.5.2",
"@sirherobrine23/debian": "^3.5.2",
"@sirherobrine23/docker-registry": "^3.5.2",
"@sirherobrine23/extends": "^3.5.2",
"@sirherobrine23/http": "^3.5.2",
"@sirherobrine23/cloud": "^3.5.4",
"@sirherobrine23/debian": "^3.5.4",
"@sirherobrine23/docker-registry": "^3.5.4",
"@sirherobrine23/extends": "^3.5.4",
"@sirherobrine23/http": "^3.5.4",
"acme-client": "^5.0.0",
"express": "^4.18.2",
"inquirer": "^9.1.4",
"inquirer": "^9.1.5",
"lzma-native": "^8.0.6",
"mongodb": "^5.1.0",
"nano": "^10.1.2",
"openpgp": "^5.7.0",
"ora": "^6.1.2",
"ora": "^6.3.0",
"semver": "^7.3.8",
"tar": "^6.1.13",
"yaml": "^2.2.1",

View File

@ -31,7 +31,7 @@ export async function fileRestore(packageDb: packageData, repoConfig: aptStreamC
} else if (source.type === "docker") {
const { image, auth } = source, { ref, path: debPath } = packageDb.fileRestore;
const registry = new dockerRegistry(image, auth);
return new Promise<stream.Readable>((done, reject) => registry.extractLayer(ref).then(tar => tar.on("error", reject).on("File", entry => entry.path === debPath ? done(entry as any) : null)));
return new Promise<stream.Readable>((done, reject) => registry.extractLayer(ref).then(tar => tar.on("error", reject).on("File", entry => entry.path === debPath ? done(entry.stream) : null)));
}
throw new Error("Check package type");
}
@ -54,29 +54,33 @@ export class syncRepository extends EventEmitter {
if (!source) continue;
for (const target of source) {
const { id } = target;
try {
if (target.type === "http") {
const { control } = await Debian.parsePackage(await coreHttp.streamRequest(target.url, {headers: target.auth?.header, query: target.auth?.query}));
this.emit("addPackage", await packageManeger.addPackage(repo, target.componentName || "main", id, {}, control));
} else if (target.type === "oracle_bucket") {
const { authConfig, path = [] } = target;
const bucket = await oracleBucket.oracleBucket(authConfig);
if (target.type === "http") {
await coreHttp.streamRequest(target.url, {headers: target.auth?.header, query: target.auth?.query})
.then(str => Debian.parsePackage(str)
.then(({control}) => packageManeger.addPackage(repo, target.componentName || "main", id, {}, control)))
.then(src => this.emit("addPackage", src)).catch(err => this.emit("error", err));
} else if (target.type === "oracle_bucket") {
const { authConfig, path = [] } = target;
await oracleBucket.oracleBucket(authConfig).then(async bucket => {
if (path.length === 0) path.push(...((await bucket.listFiles()).filter(k => k.name.endsWith(".deb")).map(({name}) => name)));
await Promise.all(path.map(async file => {
for (const file of path) {
const { control } = await Debian.parsePackage(await bucket.getFileStream(file));
this.emit("addPackage", await packageManeger.addPackage(repo, target.componentName || "main", id, {}, control));
}));
} else if (target.type === "google_driver") {
const { clientId, clientSecret, clientToken, gIds = [] } = target;
const gdrive = await googleDriver.GoogleDriver({clientID: clientId, clientSecret, token: clientToken});
}
}).catch(err => this.emit("error", err));
} else if (target.type === "google_driver") {
const { clientId, clientSecret, clientToken, gIds = [] } = target;
if (!clientToken) {
this.emit("error", new Error(`Cannot get files from ${id}, Google driver token is blank`));
continue;
}
await googleDriver.GoogleDriver({clientID: clientId, clientSecret, token: clientToken}).then(async gdrive => {
if (gIds.length === 0) gIds.push(...((await gdrive.listFiles()).filter(rel => rel.name.endsWith(".deb")).map(({id}) => id)));
await Promise.all(gIds.map(async file => {
const { control } = await Debian.parsePackage(await gdrive.getFileStream(file));
this.emit("addPackage", await packageManeger.addPackage(repo, target.componentName || "main", id, {}, control));
}));
} else if (target.type === "github") {
const { owner, repository, token } = target;
const gh = await Github.GithubManeger(owner, repository, token);
for (const file of gIds) await Debian.parsePackage(await gdrive.getFileStream(file)).then(({control}) => packageManeger.addPackage(repo, target.componentName || "main", id, {}, control)).then(src => this.emit("addPackage", src));
}).catch(err => this.emit("error", err));
} else if (target.type === "github") {
const { owner, repository, token } = target;
await Github.GithubManeger(owner, repository, token).then(async gh => {
if (target.subType === "branch") {
const { branch = (await gh.branchList()).at(0)?.name ?? "main" } = target;
for (const { path: filePath } of (await gh.trees(branch)).tree.filter(file => file.type === "tree" ? false : file["path"])) {
@ -94,27 +98,33 @@ export class syncRepository extends EventEmitter {
}
}
}
} else if (target.type === "docker") {
const { image, auth, tags = [] } = target;
const registry = new dockerRegistry(image, auth);
}).catch(err => this.emit("error", err));
} else if (target.type === "docker") {
const { image, auth, tags = [] } = target;
const registry = new dockerRegistry(image, auth);
const userAuth = new dockerAuth(registry.image, "pull", auth);
try {
if (tags.length === 0) {
const { sha256, tag } = registry.image;
if (sha256) tags.push(sha256);
else if (tag) tags.push(tag);
else tags.push(...((await registry.getTags()).reverse().slice(0, 6)));
}
const userAuth = new dockerAuth(registry.image, "pull", auth);
await userAuth.setup();
} catch (err) {
this.emit("error", err);
continue;
}
await userAuth.setup().then(async () => {
for (const tag of tags) {
const manifestManeger = new dockerUtils.Manifest(await registry.getManifets(tag, userAuth), registry);
const addPckage = async () => {
for (const layer of manifestManeger.getLayers()) {
const blob = await registry.extractLayer(layer.digest, layer.mediaType, userAuth);
const blob = await registry.extractLayer(layer.digest, userAuth);
blob.on("File", async entry => {
if (!(entry.path.endsWith(".deb"))) return null;
console.log(entry.path);
try {
const { control } = await Debian.parsePackage(entry as any);
const { control } = await Debian.parsePackage(entry.stream as any);
this.emit("addPackage", await packageManeger.addPackage(repo, target.componentName || "main", id, {
ref: layer.digest,
path: entry.path,
@ -131,9 +141,7 @@ export class syncRepository extends EventEmitter {
}
} else await addPckage();
}
}
} catch (err) {
this.emit("error", err);
}).then(err => this.emit("error", err));
}
}
}