neutral/bin/pipelines.js

139 lines
3.6 KiB
JavaScript
Raw Normal View History

2023-12-06 21:56:58 +00:00
const { LogType } = require("loguix")
const fs = require("fs")
const path = require("path")
const { __glob } = require("./global-variables")
const clog = new LogType("Pïpeline")
const config = require("./config")
const tokenkey = config.getFile().JENKINS_TOKEN
module.exports.getAllPipelines = function() {
return new Promise((resolve, reject) => {
fetch(`https://jenkins.raphix.fr/api/json`, {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Basic ${tokenkey}`
},
credentials: "include"
})
.then(res => res.json())
.then(async list => {
const pipelinesJobs = new Array()
for(const job of list.jobs) {
await fetch(`${job.url}/api/json`, {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Basic ${tokenkey}`
},
credentials: "include"
})
.then(res => res.json())
.then(async res => {
if(res._class == "org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
await getJobMain(res).then(resJ => {
res.jobs[0] = resJ
pipelinesJobs.push(res)
})
} else {
pipelinesJobs.push(res)
}
})
}
list.jobs = pipelinesJobs
resolve(list)
})
.catch(err => {
resolve("UNAVAILABLE")
})
})
}
module.exports.startPipeline = function(pipeline) {
// If it's a freestyle job, build with params
if(pipeline.type == "org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
return new Promise((resolve, reject) => {
fetch(`${pipeline.url}/job/${pipeline.jobname}/build?delay=0sec`, {
method: "POST",
headers: {
"Authorization": `Basic ${tokenkey}`
},
credentials: "include"
})
.then(res => {
resolve("OK")
})
})
} else {
return new Promise((resolve, reject) => {
const parameters = pipeline.fields
const formatedParams = new URLSearchParams()
for(const param of parameters) {
formatedParams.append(param.name, param.value)
}
fetch(`${pipeline.url}/buildWithParameters?delay=0sec`, {
method: "POST",
headers: {
"Authorization": `Basic ${tokenkey}`,
"Content-Type": "application/x-www-form-urlencoded"
},
credentials: "include",
body: formatedParams
})
.then(res => {
resolve("OK")
})
})
}
}
function getJobMain(res) {
return new Promise(async (resolve, reject) => {
await fetch(`${res.jobs[0].url}/api/json`, {
method: "GET",
headers: {
'Accept': 'application/json',
'Authorization': `Basic ${tokenkey}`
},
credentials: 'include'
}).then(res => res.json())
.then(res => {
resolve(res)
})
})
}