From 16f848c507d74a62348e75ccae6f4a3a7cd02fb5 Mon Sep 17 00:00:00 2001 From: Khwezi Date: Thu, 16 Apr 2026 09:03:10 +0200 Subject: [PATCH] Refactored wandbox to include an execution engine and all languages except for java --- kubernetes-templates/wandbox.yml | 147 ++++++++++++++++++++----------- 1 file changed, 95 insertions(+), 52 deletions(-) diff --git a/kubernetes-templates/wandbox.yml b/kubernetes-templates/wandbox.yml index d3b4b37..9d42a06 100644 --- a/kubernetes-templates/wandbox.yml +++ b/kubernetes-templates/wandbox.yml @@ -5,20 +5,49 @@ metadata: name: wandbox --- apiVersion: v1 -kind: ServiceAccount -metadata: - name: wandbox-sa - namespace: wandbox ---- -apiVersion: v1 kind: ConfigMap metadata: name: wandbox-config namespace: wandbox data: wandbox.domain: "wandbox.khongisa.co.za" - wandbox.rooturl: "https://wandbox.khongisa.co.za" - wandbox.port: "5000" + wandbox.rooturl: "https://khongisa.co.za" + cattleshed.host: "cattleshed-svc" + cattleshed.port: "2012" + compilers.json: | + [ + { "name": "gcc-head", "language": "C++", "display-name": "GCC head", "command": "/usr/local/gcc-head/bin/g++" }, + { "name": "clang-head", "language": "C++", "display-name": "Clang head", "command": "/usr/local/clang-head/bin/clang++" }, + { "name": "dotnet-10", "language": "C#", "display-name": ".NET 10", "command": "/usr/bin/dotnet" }, + { "name": "fsharp-10", "language": "F#", "display-name": "F# (.NET 10)", "command": "/usr/bin/dotnet" }, + { "name": "python-3", "language": "Python", "display-name": "Python 3", "command": "/usr/bin/python3" }, + { "name": "rust-stable", "language": "Rust", "display-name": "Rust Stable", "command": "/usr/local/bin/rustc" }, + { "name": "go-1.x", "language": "Go", "display-name": "Go", "command": "/usr/local/go/bin/go" }, + { "name": "nodejs-20", "language": "JavaScript", "display-name": "Node.js", "command": "/usr/bin/node" }, + { "name": "typescript-5", "language": "TypeScript", "display-name": "TypeScript", "command": "/usr/bin/tsc" }, + { "name": "ruby-3", "language": "Ruby", "display-name": "Ruby", "command": "/usr/bin/ruby" }, + { "name": "php-8", "language": "PHP", "display-name": "PHP 8", "command": "/usr/bin/php" }, + { "name": "swift-5", "language": "Swift", "display-name": "Swift", "command": "/usr/bin/swift" }, + { "name": "perl-5", "language": "Perl", "display-name": "Perl", "command": "/usr/bin/perl" }, + { "name": "haskell-9", "language": "Haskell", "display-name": "Haskell (GHC)", "command": "/usr/bin/ghc" }, + { "name": "elixir-1", "language": "Elixir", "display-name": "Elixir", "command": "/usr/bin/elixir" }, + { "name": "erlang-25", "language": "Erlang", "display-name": "Erlang", "command": "/usr/bin/erl" }, + { "name": "lua-5", "language": "Lua", "display-name": "Lua", "command": "/usr/bin/lua" }, + { "name": "nim-2", "language": "Nim", "display-name": "Nim", "command": "/usr/bin/nim" }, + { "name": "crystal-1", "language": "Crystal", "display-name": "Crystal", "command": "/usr/bin/crystal" }, + { "name": "zig-0", "language": "Zig", "display-name": "Zig", "command": "/usr/bin/zig" }, + { "name": "d-mdc", "language": "D", "display-name": "D (LDC)", "command": "/usr/bin/ldc2" }, + { "name": "ocaml-4", "language": "OCaml", "display-name": "OCaml", "command": "/usr/bin/ocamlopt" }, + { "name": "julia-1", "language": "Julia", "display-name": "Julia", "command": "/usr/bin/julia" }, + { "name": "scala-3", "language": "Scala", "display-name": "Scala 3", "command": "/usr/bin/scalac" }, + { "name": "groovy-4", "language": "Groovy", "display-name": "Groovy", "command": "/usr/bin/groovyc" }, + { "name": "bash-script", "language": "Bash script", "display-name": "Bash", "command": "/bin/bash" }, + { "name": "vim-script", "language": "Vim script", "display-name": "Vim script", "command": "/usr/bin/vim" }, + { "name": "pascal-fpc", "language": "Pascal", "display-name": "Free Pascal", "command": "/usr/bin/fpc" }, + { "name": "r-script", "language": "R", "display-name": "R Language", "command": "/usr/bin/Rscript" }, + { "name": "lazyk", "language": "Lazy K", "display-name": "Lazy K", "command": "/usr/bin/lazyk" }, + { "name": "lisp-sbcl", "language": "Lisp", "display-name": "Common Lisp (SBCL)", "command": "/usr/bin/sbcl" } + ] --- apiVersion: v1 kind: Secret @@ -35,20 +64,47 @@ metadata: name: wandbox-pvc namespace: wandbox spec: - accessModes: - - ReadWriteOnce + accessModes: ["ReadWriteOnce"] storageClassName: nfs-storage resources: requests: - storage: 5Gi + storage: 50Gi # Increased for 30+ compilers --- apiVersion: apps/v1 kind: Deployment metadata: - name: wandbox + name: wandbox-cattleshed + namespace: wandbox +spec: + replicas: 1 + selector: + matchLabels: + app: cattleshed + template: + metadata: + labels: + app: cattleshed + spec: + containers: + - name: cattleshed + image: melpon/wandbox-cattleshed:latest + securityContext: + privileged: true + ports: + - containerPort: 2012 + volumeMounts: + - name: compilers + mountPath: /var/lib/wandbox/compilers + volumes: + - name: compilers + persistentVolumeClaim: + claimName: wandbox-pvc +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wandbox-server namespace: wandbox - labels: - app.kubernetes.io/name: wandbox spec: replicas: 1 selector: @@ -59,47 +115,35 @@ spec: labels: app.kubernetes.io/name: wandbox spec: - serviceAccountName: wandbox-sa containers: - name: wandbox image: melpon/wandbox:latest - ports: - - containerPort: 5000 - env: - - name: WANDBOX_PORT - valueFrom: - configMapKeyRef: - name: wandbox-config - key: wandbox.port - - name: WANDBOX_ROOTURL - valueFrom: - configMapKeyRef: - name: wandbox-config - key: wandbox.rooturl - - name: WANDBOX_DOMAIN - valueFrom: - configMapKeyRef: - name: wandbox-config - key: wandbox.domain - - name: API_KEY - valueFrom: - secretKeyRef: - name: wandbox-secret - key: api.key - volumeMounts: - - name: wandbox-data - mountPath: /data resources: - requests: - memory: "256Mi" - cpu: "250m" limits: - memory: "1Gi" + memory: "500Mi" cpu: "500m" - volumes: - - name: wandbox-data - persistentVolumeClaim: - claimName: wandbox-pvc + requests: + memory: "2Gi" + cpu: "2" + env: + - name: WANDBOX_URL + valueFrom: { configMapKeyRef: { name: wandbox-config, key: wandbox.rooturl } } + - name: CATTLESHED_HOST + valueFrom: { configMapKeyRef: { name: wandbox-config, key: cattleshed.host } } + - name: API_KEY + valueFrom: { secretKeyRef: { name: wandbox-secret, key: api.key } } +--- +apiVersion: v1 +kind: Service +metadata: + name: cattleshed-svc + namespace: wandbox +spec: + selector: + app: cattleshed + ports: + - port: 2012 + targetPort: 2012 --- apiVersion: v1 kind: Service @@ -107,6 +151,7 @@ metadata: name: wandbox-service namespace: wandbox spec: + type: NodePort selector: app.kubernetes.io/name: wandbox ports: @@ -114,6 +159,4 @@ spec: protocol: TCP port: 80 targetPort: 5000 - nodePort: 31003 - type: NodePort - + nodePort: 31002 \ No newline at end of file -- 2.47.3