diff options
Diffstat (limited to 'index.ts')
| -rw-r--r-- | index.ts | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..5e54c84 --- /dev/null +++ b/index.ts @@ -0,0 +1,91 @@ +import dotenv from 'dotenv'; +import express from 'express'; +import badgen from 'badgen'; +import path from 'path'; +import fs from 'fs'; + +import formats from './formats'; +import metadata from './metadata'; + +// Start-up configuration +dotenv.config(); +const PORT = process.env.PORT ? Number(process.env.PORT) : 3000; +const TOKEN = process.env.TOKEN || ""; +const HOST_DIR = process.env.HOST_DIR || (() => { + throw Error("HOST_DIR must be defined"); +})(); + +const app: express.Application = express(); + +// serve script for posting coverage report +app.use('/bash', express.static(path.join(__dirname, '..', 'public', 'bash'))); + +// Upload HTML file +app.post('/v1/:org/:repo/:branch/:commit.html', (req, res) => { + + const {org, repo, branch, commit} = req.params; + console.info("POST request to /v1/%s/%s/%s/%s.html", org, repo, branch, commit); + + const {token, format} = req.query; + if (token != TOKEN) { + return res.status(401).send(); + } + + const reporter = format || "tarpaulin"; + if (!formats.list_formats().includes(reporter)) { + return res.status(406).send(); + } + + return res.status(501).send(); + + //TODO acquire file, verify file size/content type (HTML) + const contents = ""; + //req.on('data', (raw) => {}); + //req.on('end', () => {}); + + // const doc = new DOMParser().parseFromString(contents, "text/html"); + // const coverage = formats.get_format(reporter).parse_coverage(doc); + //TODO create badge for coverage % + //TODO store coverage % badge at %HOST_DIR%/%org%/%repo%/%commit%/badge.svg + //TODO store uploaded file at %HOST_DIR%/%org%/%repo%/%commit%/index.html + + //TODO set branch alias for coverage % / uploaded file +}); + +app.get('/v1/:org/:repo/:branch.svg', (req, res) => { + const {org, repo, branch} = req.params; + console.info("GET request to /v1/%s/%s/%s.svg", org, repo, branch); + + //TODO link the badge via metadata + return res.status(501).send(); +}); + +app.get('/v1/:org/:repo/:branch.html', (req, res) => { + const {org, repo, branch} = req.params; + console.info("GET request to /v1/%s/%s/%s.html", org, repo, branch); + + //TODO link the file via metadata + return res.status(501).send(); +}); + +// provide hard link for commit +app.get('/v1/:org/:repo/:branch/:commit.svg', (req, res) => { + const {org, repo, branch, commit} = req.params; + console.info("GET request to /v1/%s/%s/%s/%s.svg", org, repo, branch, commit); + + //TODO link the badge + return res.status(501).send(); +}); + +// provide hard link for commit +app.get('/v1/:org/:repo/:branch/:commit.html', (req, res) => { + const {org, repo, branch, commit} = req.params; + console.info("GET request to /v1/%s/%s/%s/%s.html", org, repo, branch, commit); + + //TODO link the file + return res.status(501).send(); +}); + +app.listen(PORT, () => { + console.log('Express started on port ' + PORT); +}); |
