From f786a7def0846f0065261d36ad36dad8e6d0e3aa Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 19:43:25 +1300
Subject: [PATCH 01/19] pkg(python): use proper extension for tar.gz archives

---
 packages/python.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/python.mk b/packages/python.mk
index 4aaef1d..0c8d72f 100644
--- a/packages/python.mk
+++ b/packages/python.mk
@@ -18,5 +18,5 @@ ${BIN_DIR}: ${BUILD_DIR}Python-${VERSION}/
 	$(MAKE) -j64 -C $<
 	DESTDIR=../${PKG_SLUG} $(MAKE) -j64 -C $< altinstall || true
 
-${BUILD_DIR}Python-${VERSION}.tgz: 
+${BUILD_DIR}Python-${VERSION}.tar.gz: 
 	curl "https://www.python.org/ftp/python/${VERSION}/Python-${VERSION}.tgz" -o $@

From fb8ce57b60f8520626c0c7123d295c88701ededc Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 19:43:58 +1300
Subject: [PATCH 02/19] pkg(common): remove tgz helper

---
 packages/common.mk | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/packages/common.mk b/packages/common.mk
index c55d94f..3ceec09 100644
--- a/packages/common.mk
+++ b/packages/common.mk
@@ -60,9 +60,6 @@ ${INFO_FILE}:
 
 
 # Helpers
-
-%/: %.tgz
-	cd ${BUILD_DIR} && tar xzf $(patsubst ${BUILD_DIR}%,%,$<)
 %/: %.tar.gz
 	cd ${BUILD_DIR} && tar xzf $(patsubst ${BUILD_DIR}%,%,$<)
 

From bc0b9741cff66d18fbbc2673833060cecfe14c24 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 19:50:23 +1300
Subject: [PATCH 03/19] pkg(common): add tar.xz helper

---
 packages/common.mk | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/packages/common.mk b/packages/common.mk
index 3ceec09..82ff19c 100644
--- a/packages/common.mk
+++ b/packages/common.mk
@@ -62,6 +62,8 @@ ${INFO_FILE}:
 # Helpers
 %/: %.tar.gz
 	cd ${BUILD_DIR} && tar xzf $(patsubst ${BUILD_DIR}%,%,$<)
+%/: %.tar.xz
+	cd ${BUILD_DIR} && tar xf $(patsubst ${BUILD_DIR}%,%,$<)
 
 %.json: %.jq
 	jq '$(shell tr '\n' '|' < $<).' <<< "{}" > $@
\ No newline at end of file

From da51de09b3d1611cce43f39ec3b3a3cb36947162 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 19:51:13 +1300
Subject: [PATCH 04/19] pkg(Makefile): allow hyphen in language names

---
 packages/Makefile | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/packages/Makefile b/packages/Makefile
index f8d01f0..a3a5513 100644
--- a/packages/Makefile
+++ b/packages/Makefile
@@ -7,9 +7,8 @@ PKG_SLUGS=$(foreach pkg, ${PKG_FILES}, $(addprefix $(shell make -f ${pkg} name)-
 # Functions
 define pkg_info
 	$(eval PKG_SLUG=$(patsubst $1-%,%,$2))
-	$(eval PKG_PARTS=$(subst -, ,${PKG_SLUG}))
-	$(eval PKG_NAME=$(word 1,${PKG_PARTS}))
-	$(eval PKG_VERSION=$(word 2,${PKG_PARTS}))
+	$(eval PKG_VERSION=$(lastword $(subst -, ,${PKG_SLUG})))
+	$(eval PKG_NAME=$(patsubst %-${PKG_VERSION},%,${PKG_SLUG}))
 	$(eval PKG_FILE=$(shell grep '^VERSIONS\s*=.*${PKG_VERSION}' $(shell grep "NAME\s*=\s*${PKG_NAME}" ${PKG_FILES} -l) -l))
 endef
 

From d75d38f2266ac5ed8f2e2d92a49e4b1060e4afd8 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 20:26:58 +1300
Subject: [PATCH 05/19] pkg(Makefile): Always call with VERSION set

---
 packages/Makefile | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/Makefile b/packages/Makefile
index a3a5513..91124e2 100644
--- a/packages/Makefile
+++ b/packages/Makefile
@@ -2,7 +2,7 @@
 
 # Variables
 PKG_FILES=$(filter-out common.mk,$(wildcard *.mk))
-PKG_SLUGS=$(foreach pkg, ${PKG_FILES}, $(addprefix $(shell make -f ${pkg} name)-, $(shell make -f ${pkg} versions)))
+PKG_SLUGS=$(foreach pkg, ${PKG_FILES}, $(addprefix $(shell make -f ${pkg} name VERSION=UNKNOWN)-, $(shell make -f ${pkg} versions VERSION=UNKNOWN)))
 
 # Functions
 define pkg_info
@@ -14,7 +14,7 @@ endef
 
 # Targets
 
-build: $(foreach pkg, ${PKG_FILES}, $(addprefix build-$(shell make -f ${pkg} name)-, $(lastword $(shell make -f ${pkg} versions))))
+build: $(foreach pkg, ${PKG_FILES}, $(addprefix build-$(shell make -f ${pkg} name VERSION=UNKNOWN)-, $(lastword $(shell make -f ${pkg} versions VERSION=UNKNOWN))))
 
 $(addprefix build-, ${PKG_SLUGS}):
 	$(call pkg_info,build,$@)
@@ -22,7 +22,7 @@ $(addprefix build-, ${PKG_SLUGS}):
 
 
 
-clean: $(foreach pkg, ${PKG_FILES}, $(addprefix clean-$(shell make -f ${pkg} name)-, $(shell make -f ${pkg} versions)))
+clean: $(foreach pkg, ${PKG_FILES}, $(addprefix clean-$(shell make -f ${pkg} name VERSION=UNKNOWN)-, $(shell make -f ${pkg} versions VERSION=UNKNOWN)))
 	rm -rf build/
 $(addprefix clean-, ${PKG_SLUGS}):
 	$(call pkg_info,clean,$@)

From cf67bd94e92415c7815be132b107947aab4b0153 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 20:46:29 +1300
Subject: [PATCH 06/19] pkg(common): disallow running top level build in
 parallel

---
 packages/common.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/common.mk b/packages/common.mk
index 82ff19c..f998a2b 100644
--- a/packages/common.mk
+++ b/packages/common.mk
@@ -31,7 +31,10 @@ versions:
 name:
 	@echo ${NAME}
 
+
+.NOTPARALLEL: build
 build: ${BUILD_DIR} ${PKG_FILE}
+
 clean: 
 	rm -rf ${BUILD_DIR}
 	rm -f ${PKG_FILE}

From 99dee4c90425578d04c24e55f9cd7081f76a83e8 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 20:47:33 +1300
Subject: [PATCH 07/19] pkg(python): remove forced -j64 in favor of MAKEFLAGS

---
 packages/python.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/python.mk b/packages/python.mk
index 0c8d72f..0cd120e 100644
--- a/packages/python.mk
+++ b/packages/python.mk
@@ -15,8 +15,8 @@ ${ENV_FILE}:
 
 ${BIN_DIR}: ${BUILD_DIR}Python-${VERSION}/
 	cd $< && ./configure --prefix /
-	$(MAKE) -j64 -C $<
-	DESTDIR=../${PKG_SLUG} $(MAKE) -j64 -C $< altinstall || true
+	$(MAKE) -C $<
+	DESTDIR=../${PKG_SLUG} $(MAKE) -C $< altinstall || true
 
 ${BUILD_DIR}Python-${VERSION}.tar.gz: 
 	curl "https://www.python.org/ftp/python/${VERSION}/Python-${VERSION}.tgz" -o $@

From 0159891ed9ec00b2151e986bd8b67df141a67e28 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 21:53:42 +1300
Subject: [PATCH 08/19] pkg(common): Add prefix variable Prefix is used for
 autoconf based projects so that absolute paths can be used.

---
 packages/common.mk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/common.mk b/packages/common.mk
index f998a2b..4f69da6 100644
--- a/packages/common.mk
+++ b/packages/common.mk
@@ -7,6 +7,7 @@ RUN_FILE=${BUILD_DIR}run
 COMPILE_FILE=${BUILD_DIR}compile
 ENV_FILE=${BIN_DIR}environment
 INFO_FILE=${BUILD_DIR}pkg-info.jq
+PREFIX=/piston/packages/${NAME}/${VERSION}/${PKG_SLUG}
 
 PKG_FILE=${PKG_SLUG}.pkg.tar.gz
 

From 687085a99d0dff05faa042196ac8b357d06df15d Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 22:07:44 +1300
Subject: [PATCH 09/19] pkg(python): use proper prefix

---
 packages/python.mk | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/packages/python.mk b/packages/python.mk
index 0cd120e..02fe442 100644
--- a/packages/python.mk
+++ b/packages/python.mk
@@ -14,9 +14,12 @@ ${ENV_FILE}:
 	echo 'export PATH=$$PWD/bin:$$PATH' > $@
 
 ${BIN_DIR}: ${BUILD_DIR}Python-${VERSION}/
-	cd $< && ./configure --prefix /
+	$(eval TMP_DIR=${PWD}/${BUILD_DIR}tmpout/)
+	cd $< && ./configure --prefix ${PREFIX}
 	$(MAKE) -C $<
-	DESTDIR=../${PKG_SLUG} $(MAKE) -C $< altinstall || true
+	DESTDIR=${TMP_DIR} $(MAKE) -C $< altinstall
+	mv ${TMP_DIR}${PREFIX} ${BIN_DIR} && rm -rf ${TMP_DIR}
+
 
 ${BUILD_DIR}Python-${VERSION}.tar.gz: 
 	curl "https://www.python.org/ftp/python/${VERSION}/Python-${VERSION}.tgz" -o $@

From 09913d9e40d048d5adf4bce47058f868a7d8c606 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 22:22:03 +1300
Subject: [PATCH 10/19] pkg(csharp-mono): Added version 6.12.0.122

---
 packages/csharp-mono.mk | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 packages/csharp-mono.mk

diff --git a/packages/csharp-mono.mk b/packages/csharp-mono.mk
new file mode 100644
index 0000000..b9d7f54
--- /dev/null
+++ b/packages/csharp-mono.mk
@@ -0,0 +1,34 @@
+NAME=csharp-mono
+AUTHOR=Thomas Hobson <thomas@hexf.me>
+DEPENDENCIES=
+COMPILED=true
+VERSIONS=6.12.0
+
+include common.mk
+
+
+VERSION_6.12.0_FULL=6.12.0.122
+
+VERSION_FULL=${VERSION_${VERSION}_FULL}
+
+
+${RUN_FILE}:
+	echo 'CODE=$${1/cs/exe}' > $@
+	echo 'shift' >> $@
+	echo 'mono $$CODE $$*' >> $@
+
+${COMPILE_FILE}:
+	echo 'csc $$*' > $@
+
+${ENV_FILE}:
+	echo 'export PATH=$$PWD/bin:$$PATH' > $@
+
+${BIN_DIR}: ${BUILD_DIR}mono-${VERSION_FULL}/
+	$(eval TMP_DIR=${PWD}/${BUILD_DIR}tmpout/)
+	cd $< && ./configure --prefix ${PREFIX}
+	$(MAKE) -j64 -C $<
+	DESTDIR=${TMP_DIR} $(MAKE) -C $< install
+	mv ${TMP_DIR}${PREFIX} ${BIN_DIR} && rm -r ${TMP_DIR}
+
+${BUILD_DIR}mono-${VERSION_FULL}.tar.xz: 
+	curl "https://download.mono-project.com/sources/mono/mono-${VERSION_FULL}.tar.xz" -o $@

From 3ab6aefe056dfcbb08bed2d284202dce3248874b Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 22:43:02 +1300
Subject: [PATCH 11/19] pkg(common): build pkg-info.json

---
 packages/common.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/common.mk b/packages/common.mk
index 4f69da6..a481c3a 100644
--- a/packages/common.mk
+++ b/packages/common.mk
@@ -6,7 +6,7 @@ BIN_DIR=${BUILD_DIR}${PKG_SLUG}/
 RUN_FILE=${BUILD_DIR}run
 COMPILE_FILE=${BUILD_DIR}compile
 ENV_FILE=${BIN_DIR}environment
-INFO_FILE=${BUILD_DIR}pkg-info.jq
+INFO_FILE=${BUILD_DIR}pkg-info.json
 PREFIX=/piston/packages/${NAME}/${VERSION}/${PKG_SLUG}
 
 PKG_FILE=${PKG_SLUG}.pkg.tar.gz
@@ -53,7 +53,7 @@ endif
 ${PKG_FILE}: ${PKG_TARGETS}
 	tar -czC ${BUILD_DIR} -f $@ ${patsubst ${BUILD_DIR}%,%,$?}
 	
-${INFO_FILE}:
+$(patsubst %.json,%.jq,${INFO_FILE}):
 	echo '.language="${NAME}"' > $@
 	echo '.version="${VERSION}"' >> $@
 	echo '.author="${AUTHOR}"' >> $@

From b91ff42bb8556cf7964b91c33e28e4d794339717 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sat, 27 Feb 2021 23:10:54 +1300
Subject: [PATCH 12/19] api: fix validators

---
 api/src/executor/routes.js | 7 +++++--
 api/src/ppman/routes.js    | 2 +-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/api/src/executor/routes.js b/api/src/executor/routes.js
index a69aeeb..7d65b6b 100644
--- a/api/src/executor/routes.js
+++ b/api/src/executor/routes.js
@@ -10,7 +10,8 @@ module.exports = {
         body('language')
             .isString(), // eslint-disable-line snakecasejs/snakecasejs
         body('version')
-            .isSemVer(), // eslint-disable-line snakecasejs/snakecasejs
+            .isString(), // eslint-disable-line snakecasejs/snakecasejs
+                         // isSemVer requires it to be a version, not a selector
         body('files')
             .isArray(), // eslint-disable-line snakecasejs/snakecasejs
         body('files.*.name')
@@ -20,7 +21,9 @@ module.exports = {
             .contains('/'),
         body('files.*.content')
             .isString(), // eslint-disable-line snakecasejs/snakecasejs
-        body('*_timeout')
+        body('compile_timeout')
+            .isNumeric(), // eslint-disable-line snakecasejs/snakecasejs
+        body('run_timeout')
             .isNumeric(), // eslint-disable-line snakecasejs/snakecasejs
         body('stdin')
             .isString(), // eslint-disable-line snakecasejs/snakecasejs
diff --git a/api/src/ppman/routes.js b/api/src/ppman/routes.js
index 86a45e7..a14fcf0 100644
--- a/api/src/ppman/routes.js
+++ b/api/src/ppman/routes.js
@@ -52,7 +52,7 @@ module.exports = {
         body('url')
             .notEmpty() // eslint-disable-line snakecasejs/snakecasejs
             .bail()
-            .isURL({require_protocol: true}) // eslint-disable-line snakecasejs/snakecasejs
+            .isURL({require_host: false, require_protocol: true, protocols: ['http','https','file']}) // eslint-disable-line snakecasejs/snakecasejs
 
     ],
     async repo_add(req, res){

From 12dc93435d2308028609c8ad31cb3ca4190c688a Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:15:52 +1300
Subject: [PATCH 13/19] api,repo: Switch to debian base image

---
 api/Dockerfile  | 10 ++++++----
 repo/Dockerfile |  7 ++++---
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/api/Dockerfile b/api/Dockerfile
index 268d713..8e2b7eb 100644
--- a/api/Dockerfile
+++ b/api/Dockerfile
@@ -1,7 +1,9 @@
-FROM node:15.8.0-alpine3.13
-RUN apk add --no-cache gnupg tar bash coreutils shadow util-linux
-RUN userdel -r node
-RUN for i in $(seq 1000 1500); do \
+FROM node:15.8.0-buster-slim
+RUN dpkg-reconfigure -p critical dash
+RUN apt-get update && apt-get install -y gnupg tar coreutils util-linux \
+  && rm -rf /var/lib/apt/lists/*
+
+RUN for i in $(seq 1001 1500); do \
         groupadd -g $i runner$i && \
         useradd -M runner$i -g $i -u $i ; \
     done
diff --git a/repo/Dockerfile b/repo/Dockerfile
index d49182e..730b8f1 100644
--- a/repo/Dockerfile
+++ b/repo/Dockerfile
@@ -1,7 +1,8 @@
-FROM alpine:3.13
+FROM debian:buster-slim
 
-RUN apk add --no-cache python3 py3-pip gnupg jq zlib zlib-dev cmake cmake-doc extra-cmake-modules extra-cmake-modules-doc build-base gcc abuild binutils binutils-doc gcc-doc yq bash coreutils util-linux pciutils usbutils coreutils binutils findutils grep && \
+RUN apt-get update && apt-get install -y bc curl git linux-headers-amd64 perl xz-utils python3 python3-pip gnupg jq zlib1g-dev cmake cmake-doc extra-cmake-modules build-essential gcc binutils bash coreutils util-linux pciutils usbutils coreutils binutils findutils grep && \
         ln -sf /bin/bash /bin/sh && \
-        pip3 install 'yq==2.12.0'
+        pip3 install 'yq==2.12.0' && \
+        rm -rf /var/lib/apt/lists/*
 
 CMD [ "bash", "/repo/make.sh" ]
\ No newline at end of file

From 55f481e4651e097392d1e3697184c9b84edc2d31 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:16:11 +1300
Subject: [PATCH 14/19] repo: build all

---
 repo/make.sh    | 4 ++--
 repo/mkindex.sh | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/repo/make.sh b/repo/make.sh
index e89dc1e..bad392e 100755
--- a/repo/make.sh
+++ b/repo/make.sh
@@ -3,8 +3,8 @@
 cd /repo
 
 # Make packages
-pushd ../packages/python
-make build VERSIONS=3.9.1
+pushd ../packages/
+make -j16
 popd
 
 
diff --git a/repo/mkindex.sh b/repo/mkindex.sh
index 4f2ac42..a38caf6 100755
--- a/repo/mkindex.sh
+++ b/repo/mkindex.sh
@@ -3,7 +3,7 @@ echo "baseurl: file://$PWD" >> index.yaml
 echo "keys: []" >> index.yaml
 echo "packages: []" >> index.yaml
 
-yq -yi '.keys[0] = "0x107DA02C7AE97B084746564B9F1FD9D87950DB6F"' index.yaml
+#yq -yi '.keys[0] = "0x107DA02C7AE97B084746564B9F1FD9D87950DB6F"' index.yaml
 
 i=-1
 
@@ -15,12 +15,12 @@ do
     PKGFILENAME=$(echo $PKGFILE | sed 's/\.pkg\.tar\.gz//g')
     PKGNAME=$(echo $PKGFILENAME | grep -oP '^\K.+(?=-)')
     PKGVERSION=$(echo $PKGFILENAME | grep -oP '^.+-\K.+')
-    BUILDFILE=https://github.com/engineer-man/piston/tree/v3/packages/python/
+    BUILDFILE=https://github.com/engineer-man/piston/tree/v3/packages/
     SIZE=$(tar tzvf $PKGFILE | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc)
 
     tar xzf $PKGFILE pkg-info.json
 
-    yq -yi ".packages[$i] = {} | .packages[$i].signature = \"$(cat ${pkg}.asc)\" | .packages[$i].buildfile = \"$BUILDFILE\" | .packages[$i].size = $SIZE | .packages[$i].download = \"$PKGFILE\" | .packages[$i].dependencies = $(jq .dependencies -r pkg-info.json) | .packages[$i].author = $(jq .author pkg-info.json) | .packages[$i].language =\"$PKGNAME\" | .packages[$i].version = \"$PKGVERSION\" | .packages[$i].checksums = {} | .packages[$i].checksums.sha256 = \"$(sha256sum $PKGFILE | awk '{print $1}')\"" index.yaml
+    yq -yi ".packages[$i] = {} | .packages[$i].signature = \"\" | .packages[$i].buildfile = \"$BUILDFILE\" | .packages[$i].size = $SIZE | .packages[$i].download = \"$PKGFILE\" | .packages[$i].dependencies = $(jq .dependencies -r pkg-info.json) | .packages[$i].author = $(jq .author pkg-info.json) | .packages[$i].language =\"$PKGNAME\" | .packages[$i].version = \"$PKGVERSION\" | .packages[$i].checksums = {} | .packages[$i].checksums.sha256 = \"$(sha256sum $PKGFILE | awk '{print $1}')\"" index.yaml
     
     rm pkg-info.json
 done
\ No newline at end of file

From 7d3777aef8ceb02ef607b8cd63f8369120f90660 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:16:33 +1300
Subject: [PATCH 15/19] cli: fix ppman install output

---
 cli/commands/ppman_commands/install.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cli/commands/ppman_commands/install.js b/cli/commands/ppman_commands/install.js
index 83da33a..4c4b10a 100644
--- a/cli/commands/ppman_commands/install.js
+++ b/cli/commands/ppman_commands/install.js
@@ -7,8 +7,8 @@ exports.describe = 'Installs the named package'
 
 
 const msg_format = {
-    'color': p => `${p.success ? chalk.green.bold('✓') : chalk.red.bold('❌')} Installation ${p.success ? "succeeded" : "failed: " + p.message}`,
-    'monochrome': p => `Installation ${p.success ? "succeeded" : "failed: " + p.message}`,
+    'color': p => `${p.language ? chalk.green.bold('✓') : chalk.red.bold('❌')} Installation ${p.language ? "succeeded" : "failed: " + p.message}`,
+    'monochrome': p => `Installation ${p.language ? "succeeded" : "failed: " + p.message}`,
     'json': JSON.stringify
 
 }

From 870a4c1282069bec1813e9f2c576b41c84fac856 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:18:04 +1300
Subject: [PATCH 16/19] api: fix compile stage

runtime.compiled always returned false as it was undefined.
This made the code think it's a run-only language, and never called the compile script.
---
 api/src/executor/job.js | 10 ++++++----
 api/src/runtime.js      |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/api/src/executor/job.js b/api/src/executor/job.js
index c99ecb9..1b2aaaa 100644
--- a/api/src/executor/job.js
+++ b/api/src/executor/job.js
@@ -131,10 +131,12 @@ class Job {
         if(this.state != job_states.PRIMED) throw new Error('Job must be in primed state, current state: ' + this.state.toString());
         logger.info(`Executing job uuid=${this.uuid} uid=${this.uid} gid=${this.gid} runtime=${this.runtime.toString()}`);
         logger.debug('Compiling');
-        const compile = this.runtime.compiled && await this.safe_call(
-            path.join(this.runtime.pkgdir, 'compile'),
-            [this.main, ...this.files],
-            this.timeouts.compile);
+        var compile = undefined;
+        if(this.runtime.compiled)
+            compile = await this.safe_call(
+                path.join(this.runtime.pkgdir, 'compile'),
+                this.files.map(x=>x.name),
+                this.timeouts.compile);
 
         logger.debug('Running');
 
diff --git a/api/src/runtime.js b/api/src/runtime.js
index 6e71837..1658f81 100644
--- a/api/src/runtime.js
+++ b/api/src/runtime.js
@@ -48,7 +48,7 @@ class Runtime {
         return res;
     }
 
-    get compile(){
+    get compiled(){
         if(this.#compiled === undefined) this.#compiled = fss.exists_sync(path.join(this.pkgdir, 'compile'));
         return this.#compiled;
     }

From bd920b19b9b1b7ff5de6c02b8f8d2526be693cd4 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:25:10 +1300
Subject: [PATCH 17/19] api: add /runtimes endpoint

---
 api/src/index.js | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/api/src/index.js b/api/src/index.js
index 98d9a1d..94381c2 100644
--- a/api/src/index.js
+++ b/api/src/index.js
@@ -93,11 +93,17 @@ const app = express();
     app.get   ('/repos/:repo_slug/packages', ppman_routes.repo_packages_validators, validate, ppman_routes.repo_packages);
     app.get   ('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_info);
     app.post  ('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_install);
-    app.delete('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_uninstall); //TODO
+    app.delete('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_uninstall);
 
     const executor_routes = require('./executor/routes');
     app.post  ('/jobs', executor_routes.run_job_validators, validate, executor_routes.run_job);
 
+    app.get   ('/runtimes', (_, res) => res.json_success({runtimes: runtime.map(rt=>({
+            language: rt.language,
+            version: rt.version.raw,
+            author: rt.author
+        }))}))
+
     logger.debug('Calling app.listen');
     const [address,port] = config.bind_address.split(':');
 

From a27638b06b71bb02cd1295d6938c7ddce00efa0d Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:39:19 +1300
Subject: [PATCH 18/19] pkg(common): helpers extract into directories

---
 packages/common.mk | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/common.mk b/packages/common.mk
index a481c3a..ec069b0 100644
--- a/packages/common.mk
+++ b/packages/common.mk
@@ -65,9 +65,13 @@ $(patsubst %.json,%.jq,${INFO_FILE}):
 
 # Helpers
 %/: %.tar.gz
-	cd ${BUILD_DIR} && tar xzf $(patsubst ${BUILD_DIR}%,%,$<)
+	mkdir -p $@
+	tar xzf $< --strip-components=1 -C $@
 %/: %.tar.xz
-	cd ${BUILD_DIR} && tar xf $(patsubst ${BUILD_DIR}%,%,$<)
-
+	mkdir -p $@
+	tar xf $< --strip-components=1 -C $@
+%/: %.zip
+	mkdir -p $@
+	unzip $< -d $@
 %.json: %.jq
 	jq '$(shell tr '\n' '|' < $<).' <<< "{}" > $@
\ No newline at end of file

From e6a1fd06a97efe4995c64f633fbc785d8104cfc2 Mon Sep 17 00:00:00 2001
From: Thomas Hobson <git@hexf.me>
Date: Sun, 28 Feb 2021 01:42:23 +1300
Subject: [PATCH 19/19] pkg(deno): Added deno version 1.7.5

Closes issue #119
---
 packages/deno.mk | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
 create mode 100644 packages/deno.mk

diff --git a/packages/deno.mk b/packages/deno.mk
new file mode 100644
index 0000000..a2b83c3
--- /dev/null
+++ b/packages/deno.mk
@@ -0,0 +1,22 @@
+NAME=deno
+AUTHOR=Thomas Hobson <thomas@hexf.me>
+DEPENDENCIES=
+COMPILED=false
+VERSIONS=1.7.5
+
+include common.mk
+
+
+${RUN_FILE}:
+	echo 'deno run $$*' > $@
+
+${ENV_FILE}:
+	echo 'export PATH=$$PWD:$$PATH' > $@
+
+${BIN_DIR}: ${BUILD_DIR}deno-x86_64-unknown-linux-gnu/
+	mkdir -p $@
+	mv $</deno $@
+	chmod +x $@/deno
+	
+${BUILD_DIR}deno-x86_64-unknown-linux-gnu.zip: 
+	curl -L "https://github.com/denoland/deno/releases/download/v${VERSION}/deno-x86_64-unknown-linux-gnu.zip" -o $@