summaryrefslogtreecommitdiff
path: root/fetcher/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-05-08 13:18:04 +0200
committerMinteck <contact@minteck.org>2022-05-08 13:18:04 +0200
commit16da8f48c7328c334a5c0d863078fd00257ae6b4 (patch)
tree4ab80e4106c4c7a61e5a7caf6102d612b8dd985d /fetcher/index.js
downloaddownloadcenter-16da8f48c7328c334a5c0d863078fd00257ae6b4.tar.gz
downloadcenter-16da8f48c7328c334a5c0d863078fd00257ae6b4.tar.bz2
downloadcenter-16da8f48c7328c334a5c0d863078fd00257ae6b4.zip
Initial commit
Diffstat (limited to 'fetcher/index.js')
-rw-r--r--fetcher/index.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/fetcher/index.js b/fetcher/index.js
new file mode 100644
index 0000000..c99c0f6
--- /dev/null
+++ b/fetcher/index.js
@@ -0,0 +1,81 @@
+const fs = require('fs');
+const axios = require('axios');
+
+if (fs.existsSync("projects")) fs.rmSync("projects", { recursive: true });
+fs.mkdirSync("projects");
+
+(async () => {
+ console.log("Loading access token...");
+ const token = fs.readFileSync("token.txt").toString().trim();
+
+ console.log("Fetching projects...");
+ const projects = (await axios.get("https://ci.minteck.org/app/rest/projects", { headers: {"Authorization": "Bearer " + token} })).data.project;
+ fs.writeFileSync("projects.json", JSON.stringify(projects, null, 4));
+
+ for (const prj of projects) {
+ let prjData = {
+ id: prj.id,
+ name: (prj.parentProjectId !== "_Root" ? prj.parentProjectId + " " : "") + prj.name,
+ description: prj.description ?? null,
+ web: prj.webUrl,
+ channels: []
+ };
+
+ if (prj.id === "_Root") continue;
+ console.log("Fetching: " + prj.id + ", deploy channels");
+
+ const channels = (await axios.get("https://ci.minteck.org/app/rest/projects/id:" + prj.id, { headers: {"Authorization": "Bearer " + token} })).data.buildTypes.buildType;
+
+ for (const channel of channels) {
+ if (channel.name === "Quality Assurance") continue;
+
+ let chan = {
+ id: channel.id,
+ name: channel.name,
+ slug: channel.name.toLowerCase().replace(/[^a-z\d]/gmi, ""),
+ web: channel.webUrl,
+ builds: []
+ }
+
+ console.log("Fetching: " + prj.id + ", deploy channels: " + channel.id);
+ const builds = (await axios.get("https://ci.minteck.org/app/rest/buildTypes/id:" + channel.id + "/builds/", { headers: {"Authorization": "Bearer " + token} })).data.build;
+
+ for (const build of builds) {
+ if (build.status !== "SUCCESS" || build.state !== "finished") continue;
+
+ let b = {
+ id: build.id,
+ localId: build.number - 1 + 1,
+ date: new Date(build.finishOnAgentDate.substring(0, 4) + "-" + build.finishOnAgentDate.substring(4, 6) + "-" + build.finishOnAgentDate.substring(6, 8) + "T" + build.finishOnAgentDate.substring(9, 11) + ":" + build.finishOnAgentDate.substring(11, 13) + ":" + build.finishOnAgentDate.substring(13, 15) + "+" + build.finishOnAgentDate.substring(16, 18) + ":" + build.finishOnAgentDate.substring(18, 20)).toISOString(),
+ branch: build.branchName,
+ web: build.webUrl,
+ agent: null,
+ artifacts: []
+ }
+
+ console.log("Fetching: " + prj.id + ", deploy channels: " + channel.id + ", build: " + build.id + "/" + build.number);
+ const artifacts = (await axios.get("https://ci.minteck.org/app/rest/builds/id:" + build.id + "/artifacts/children/", { headers: {"Authorization": "Bearer " + token} })).data.file;
+
+ for (const artifact of artifacts) {
+ let af = {
+ name: artifact.name,
+ size: artifact.size,
+ download: "https://ci.minteck.org" + (artifact.content ? artifact.content.href : artifact.children.href + "/" + artifact.name)
+ }
+
+ b.artifacts.push(af);
+ }
+
+ chan.builds.push(b);
+ }
+
+ if (chan.builds.length > 0) {
+ prjData.channels.push(chan);
+ }
+ }
+
+ if (prjData.channels.length > 0) {
+ fs.writeFileSync("projects/" + prj.id + ".json", JSON.stringify(prjData, null, 4));
+ }
+ }
+})() \ No newline at end of file