Parse gitea webhooks, post comments based on tag, verify tag exists.

master
Thijs de Vries 5 years ago
parent e6287654c1
commit 97d4d6a99d

3
.gitignore vendored

@ -1,3 +1,5 @@
.ftpconfig
# ---> Node # ---> Node
# Logs # Logs
logs logs
@ -75,4 +77,3 @@ typings/
# FuseBox cache # FuseBox cache
.fusebox/ .fusebox/

@ -0,0 +1,33 @@
class Gitea {
constructor(url, user, pass) { // Nextcloud's base URL, not the api!
this.api = `${url}/index.php/apps/deck/api/v1.0`
this.user = user
this.pass = pass
}
checkTagExist() {
}
createTag() {
}
checkCardExist() {
}
createCard(board, card, title, tags) {
}
closeCard() {
}
deleteCard() {
}
}

@ -0,0 +1,69 @@
const axios = require('axios')
class Gitea {
constructor(api, key) {
this.api = `${api}/repos`
this.key = key
}
checkLabelExistance(label, repo) {
return new Promise((resolve, reject) => {
axios.get(
`${this.api}/${repo}/labels`,
{headers: {"Authorization" : `token ${this.key}`}
})
.then((response) => {
response.data.forEach((el) => {
if (el.name == label) resolve(true)
})
resolve(false)
})
.catch(e => console.log(e))
})
}
// check if label exists in repo, if not, craete it. Needs label name, label color, repo url and api key.
createLabel(label, color, repo) {
this.checkLabelExistance(label, repo).then((exists) => {
if(!exists) {
axios.post(
`${this.api}/${repo}/labels`,
{color: color,name: label},
{"headers": {"Authorization" : `token ${this.key}`}
})
.then(console.log(`Label ${label} created`))
}
})
.catch(e => console.log(e))
}
labelStatus(label, repo, issue) {
return new Promise((resolve, reject) => {
axios.get(
`${this.api}/${repo}/issues/${issue}`,
{headers: {"Authorization" : `token ${this.key}`}
})
.then((response) => {
response.data.labels.forEach((el) => {
if (el.name == label) resolve(true)
})
resolve(false)
})
.catch(e => console.log(e))
})
}
comment(message, repo, issue) {
axios.post(
`${this.api}/${repo}/issues/${issue}/comments`,
{body: message},
{"headers": {"Authorization" : `token ${this.key}`}
})
.then(console.log(`Message posted`))
.catch(e => console.log(e))
}
}
module.exports = Gitea

@ -0,0 +1,54 @@
const express = require('express')
const bodyParser = require('body-parser')
const axios = require('axios')
const app = express()
const Gitea = require('./gitea.js')
const gitea = new Gitea("https://yourgiteainstall.com/api/v1", 'apikey')
const ncUser = ""
const ncPass = ""
const ncApi = "https://yournextcloudinstall.com/index.php/apps/deck/api/v1.0"
const ncBoard = 2
app.use(bodyParser.json())
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS, HEAD')
next()
})
// gitea only POSTs and only to a single URL. We'll need to parse json for more info on what's happening
app.post("/", (req, res) => {
let repo = req.body.repository.full_name
let issue = req.body.issue.number
let action = req.body.action
gitea.createLabel('Deck',"#0082C9", repo) // Double check existace of issue label, if not; create.
console.log(`${req.body.action} | [${req.body.repository.full_name}] #${req.body.issue.number}:${req.body.issue.title}`)
// console.log(`(${req.body.issue.url})`)
if(action == "label_updated" || action == "reopened" || action == "opened" || action == "label_cleared") {
gitea.labelStatus('Deck', repo, issue).then((set) => {
if(set) {
console.log("Label Deck detected")
gitea.comment(`Issue added to deck :-)`, repo, issue)
} else {
console.log("Label Deck not detected")
}
})
}
else if(action == 'closed'){
console.log('Issue closed')
}
else {
console.log(`Received unsupported action "${action}"`)
// console.log(JSON.stringify(req.headers, null,2))
// console.log(JSON.stringify(req.body, null,2))
}
res.send("okay") // generate some feedback for gitea
})
app.listen(80, () => console.log(`Aapie running on 80`))

2651
app/package-lock.json generated

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save