aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/formats.ts33
-rw-r--r--src/index.ts91
-rw-r--r--src/metadata.ts3
3 files changed, 127 insertions, 0 deletions
diff --git a/src/formats.ts b/src/formats.ts
new file mode 100644
index 0000000..b5a24bf
--- /dev/null
+++ b/src/formats.ts
@@ -0,0 +1,33 @@
+interface Format {
+ parse_coverage: (file: Document) => number;
+}
+
+interface FormatList {
+ [key: string]: Format
+}
+
+interface FormatObj {
+ formats: FormatList,
+ list_formats: () => string[],
+ get_format: (format: string) => Format,
+}
+
+const FormatsObj: FormatObj = {
+ formats: {
+ tarpaulin: {
+ parse_coverage: (file: Document) => {
+ return 0.0;
+ }
+ },
+ },
+
+ list_formats: function () {
+ return Object.keys(this.formats);
+ },
+
+ get_format: function (format: string) {
+ return this.formats[format];
+ }
+}
+
+export default FormatsObj; \ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..5e54c84
--- /dev/null
+++ b/src/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);
+});
diff --git a/src/metadata.ts b/src/metadata.ts
new file mode 100644
index 0000000..353d9bf
--- /dev/null
+++ b/src/metadata.ts
@@ -0,0 +1,3 @@
+const metadata = {};
+
+export default metadata; \ No newline at end of file