Commit Graph

91 Commits

Author SHA1 Message Date
Radon Rosborough c85ed6d586 Support RIJU_DEPLOY_CONFIG 2021-07-05 14:42:37 +00:00
Radon Rosborough 719b16f3c0 Infrastructure go brrr 2021-07-04 17:13:59 +00:00
Radon Rosborough 442265a642 Yeesh 2021-07-03 19:09:47 +00:00
Radon Rosborough fcf5432058 debug 2021-06-19 08:09:22 +00:00
Radon Rosborough 2638053405 Many misc changes 2021-06-18 23:10:20 +00:00
Radon Rosborough ddb2fa0d4b Hallelujah 2021-06-18 07:06:32 +00:00
Radon Rosborough 4e86dfc567 Add missing return 2021-06-18 07:06:32 +00:00
Radon Rosborough b132840385 shell-quote is full of bugs -_-
seriously, how did this happen?? this is the one kind of library you'd
assume couldn't possibly have bugs, because it's so obviously critical
for the thing to be thoroughly tested. and it's not even complicated
functionality to implement...
2021-06-18 07:06:32 +00:00
Radon Rosborough 6c7fbf7fb1 Start fixing sandbox script 2021-04-30 23:13:15 -07:00
Radon Rosborough d3cd61cdd6 Make stty conditional 2021-04-24 09:48:25 -07:00
Radon Rosborough 0e0ceebd9e Workaround Docker bug with term size settings 2021-04-24 09:38:51 -07:00
Radon Rosborough db41dfa0a3 Container process should have a pty 2021-04-24 09:25:55 -07:00
Radon Rosborough d521eed1ce Some random bugfixes 2021-04-23 20:33:57 -07:00
Radon Rosborough 1672e42960 Bugfixes for hashing 2021-03-21 21:53:22 -07:00
Radon Rosborough 1b975de021 Get containerized execution working 2021-03-21 14:45:13 -07:00
Radon Rosborough 224f8f7d9d Misc fixes for containerization 2021-03-21 14:36:44 -07:00
Radon Rosborough 69f1c2ed58 Remove no longer correct comment 2021-03-21 14:16:23 -07:00
Radon Rosborough 4a79b95efc Tear down old containers properly 2021-03-21 13:55:33 -07:00
Radon Rosborough 219fbed342 Start work on depgraph runner 2021-03-20 22:15:49 -07:00
Radon Rosborough b99d17bcd3 Preliminary containerization work 2021-03-19 23:04:59 -07:00
Radon Rosborough 83208355d4 Load language configurations into server 2021-03-18 19:03:28 -07:00
Radon Rosborough 49e18e9830 Fix deprecated Express methods 2021-01-23 21:40:58 -08:00
Radon Rosborough edad36a563 Fix language settings for Unison 2021-01-23 21:07:03 -08:00
Radon Rosborough 998811d3d4 Get lsp-repl working again 2021-01-18 09:48:42 -08:00
Radon Rosborough b5267a4243 Fix alias mapping in Express 2021-01-18 09:41:03 -08:00
Radon Rosborough a29329f71c Install distutils for Hy, fix 'set -e' usage 2021-01-17 21:09:35 -08:00
Radon Rosborough f013f7e26c Work on a number of additional languages 2021-01-11 19:34:44 -08:00
Radon Rosborough ac39b15e16 Make more languages work 2021-01-09 15:36:14 -08:00
Radon Rosborough f50c177007 Get a bunch of new languages working 2021-01-09 14:07:10 -08:00
Radon Rosborough 670fabe177 Improve sandbox env, add shared dep support 2021-01-09 12:36:17 -08:00
Radon Rosborough 5752918068 Make users.js robust to concurrency 2021-01-07 21:09:33 -08:00
Radon Rosborough 9a99429f48 Miscellaneous work starting to support langs 2021-01-06 21:44:27 -08:00
Radon Rosborough 2daa11c7aa Import all language configs into YAML
This was an absolutely disgusting operation. Here's the commands I
used to do it (see <https://docs.gomplate.ca/> for the tool):

$ node
> require('fs').writeFile('langs.json', JSON.stringify(require('./langs').langs), console.log)
$ ./gomplate -c .=langs.json -f template.yaml > langs.yaml
$ cat langs.json | jq 'keys[]' -r L | while read lang; do cat langs.yaml | sed -n "/^ #START $lang\$/,/^ #END $lang\$/p" | tail -n+2 | head -n-1 | sed 's/^  //' > langs/$lang.yaml; done

I had some difficulty getting valid YAML to be generated, so I found
the tool at <http://www.yamllint.com/> to be helpful in identifying
errors.

For validation that nothing important had changed in the
transformation, I used <http://www.jsondiff.com/> to compare
langs.json against the output of this command:

$ ./gomplate -c .=langs.json -f template.yaml | node yaml2json.js | jq '(.. | select(type == "string")) |= sub("\n+$";"") | (.. | select(.template?) | .template?) |= (.+"\n") | (.. | select(.format?.input?) | .format?.input?) |= (.+"\n")'

Here's yaml2json.js:

import fs from "fs";
import YAML from "yaml";

console.log(JSON.stringify(YAML.parse(fs.readFileSync(0, "utf-8")), null, 2));

And here's the template.yaml, which is approximately the worst thing
ever:

{{ range . }}
"{{ .id }}":
 #START {{ .id }}
  id: "{{ .id }}"
{{ if has . "aliases" }}  aliases:
{{ range .aliases }}    - "{{ . }}"
{{ end }}{{ end }}  name: "{{ .name }}"
{{ if has . "monacoLang" }}  monacoLang: {{ .monacoLang }}
{{ end }}{{ if has . "info" }}
  info:
{{ if has .info "impl" }}    impl: "{{ .info.impl }}"
{{ end }}{{ if has .info "version" }}    version: "{{ .info.version }}"
{{ end }}    year: {{ .info.year }}
    desc: "{{ .info.desc }}"
{{ if eq "string" (printf "%T" .info.ext) }}    ext: {{ .info.ext }}
{{ else if eq 0 (len .info.ext) }}    ext: []
{{ else }}    ext:
{{ range .info.ext }}      - {{ . }}
{{ end }}{{ end }}    web:
{{ if has .info.web "wiki" }}      wiki: "{{ .info.web.wiki }}"
{{ end }}{{ if has .info.web "esolang" }}      esolang: "{{ .info.web.esolang }}"
{{ end }}{{ if has .info.web "home" }}      home: "{{ .info.web.home }}"
{{ end }}{{ if has .info.web "impl" }}      impl: "{{ .info.web.impl }}"
{{ end }}      source: {{ if eq "string" (printf "%T" .info.web.source) }}"{{ .info.web.source }}"
{{ else }}null
{{ end }}{{ if eq "string" (printf "%T" .info.category) }}    category: {{ .info.category }}
{{ else if eq 0 (len .info.category) }}    category: []
{{ else }}    category:
{{ range .info.category }}      - {{ . }}
{{ end }}{{ end }}{{ if eq "string" (printf "%T" .info.mode) }}    mode: {{ .info.mode }}
{{ else if eq 0 (len .info.mode) }}    mode: []
{{ else }}    mode:
{{ range .info.mode }}      - {{ . }}
{{ end }}{{ end }}{{ if eq "string" (printf "%T" .info.platform) }}    platform: {{ .info.platform }}
{{ else if eq 0 (len .info.platform) }}    platform: []
{{ else }}    platform:
{{ range .info.platform }}      - {{ . }}
{{ end }}{{ end }}{{ if eq "string" (printf "%T" .info.syntax) }}    syntax: {{ .info.syntax }}
{{ else if eq 0 (len .info.syntax) }}    syntax: []
{{ else }}    syntax:
{{ range .info.syntax }}      - {{ . }}
{{ end }}{{ end }}{{ if eq "string" (printf "%T" .info.typing) }}    typing: {{ .info.typing }}
{{ else if eq 0 (len .info.typing) }}    typing: []
{{ else }}    typing:
{{ range .info.typing }}      - {{ . }}
{{ end }}{{ end }}{{ if eq "string" (printf "%T" .info.paradigm) }}    paradigm: {{ .info.paradigm }}
{{ else if eq 0 (len .info.paradigm) }}    paradigm: []
{{ else }}    paradigm:
{{ range .info.paradigm }}      - {{ . }}
{{ end }}{{ end }}{{ if eq "string" (printf "%T" .info.usage) }}    usage: {{ .info.usage }}
{{ else if eq 0 (len .info.usage) }}    usage: []
{{ else }}    usage:
{{ range .info.usage }}      - {{ . }}
{{ end }}{{ end }}{{ end }}{{ if or (has . "daemon") (has . "setup") }}
{{ end }}{{ if has . "daemon" }}  daemon: |
{{ .daemon | indent 4 }}
{{ end }}{{ if has . "setup" }}  setup: |
{{ .setup | indent 4 }}
{{ end }}{{ if has . "repl" }}
  repl: |
{{ .repl | indent 4 }}
{{ end }}{{ if has . "input" }}{{ if .input | strings.Contains "\x1b" }}  input: "{{ .input | strings.ReplaceAll "\x1b" "\\x1b" }}"
{{ else }}  input: |{{ if .input | regexp.Match "^\\s" }}2{{ end }}
{{ .input | indent 4 }}
{{ end }}{{ end }}{{ if has . "output" }}  output: |
{{ .output | indent 4 }}
{{ end }}
  main: "{{ .main }}"
  template: {{ if eq .id "whitespace" }}{{ .template | strings.Quote }}
{{ else }}|{{ if .template | regexp.Match "^\\s" }}2{{ end }}
{{ .template | indent 4 }}{{ end }}{{ if has . "prefix" }}  prefix: |
{{ .prefix | indent 4 }}
{{ end }}{{ if has . "suffix" }}  suffix: |
{{ .suffix | indent 4 }}
{{ end }}{{ if has . "createEmpty" }}  createEmpty: "{{ .createEmpty }}"
{{ end }}
{{ if has . "compile" }}  compile: |
{{ .compile | indent 4 }}
{{ end }}  run: |
{{ .run | indent 4 }}
{{ if has . "helloInput" }}  helloInput: |
{{ .helloInput | indent 4 }}
{{ end }}{{ if has . "hello" }}  hello: |
{{ .hello | indent 4 }}
{{ end }}{{ if has . "helloMaxLength" }}  helloMaxLength: {{ .helloMaxLength }}
{{ end }}{{ if has . "runReplInput" }}  runReplInput: |
{{ .runReplInput | indent 4 }}
{{ end }}{{ if has . "runReplOutput" }}  runReplOutput: |
{{ .runReplOutput | indent 4 }}
{{ end }}{{ if has . "scope" }}
  scope:
    code: |
{{ .scope.code | indent 6 }}
{{ if has .scope "after" }}    after: "{{ .scope.after }}"
{{ end }}{{ if has .scope "input" }}{{ if .scope.input | strings.Contains "\x1b" }}    input: "{{ .scope.input | strings.ReplaceAll "\x1b" "\\x1b" }}"
{{ else }}    input: |
{{ .scope.input | indent 6 }}
{{ end }}{{ end }}{{ if has .scope "output" }}    output: |
{{ .scope.output | indent 6 }}
{{ end }}{{ end }}{{ if has . "format" }}
  format:
    run: |
{{ .format.run | indent 6 }}
{{ if has .format "input" }}    input: |
{{ .format.input | indent 6 }}{{ end }}{{ if has .format "output" }}    output: |
{{ .format.output | indent 6 }}{{ end }}{{ end }}{{ if has . "pkg" }}
  pkg:
    install: |
{{ .pkg.install | indent 6 }}
{{ if has .pkg "uninstall" }}
    uninstall: |
{{ .pkg.uninstall | indent 6 }}
{{ end }}{{ if has .pkg "all" }}
    all: |
{{ .pkg.all | indent 6 }}
{{ end }}{{ if has .pkg "search" }}
    search: |
{{ .pkg.search | indent 6 }}
{{ end }}{{ end }}{{ if has . "lsp" }}
  lsp:
{{ if has .lsp "setup" }}    setup: |
{{ .lsp.setup | indent 6 }}
{{ end }}    start: |
{{ .lsp.start | indent 6 }}
{{ if has .lsp "disableDynamicRegistration" }}    disableDynamicRegistration: {{ .lsp.disableDynamicRegistration }}
{{ end }}{{ if has .lsp "init" }}    init:
{{ .lsp.init | data.ToYAML | indent 6 }}{{ end }}{{ if has .lsp "config" }}    config: {{ .lsp.config | data.ToYAML }}{{ end }}{{ if has .lsp "lang" }}    lang: "{{ .lsp.lang }}"
{{ end }}{{ if has .lsp "code" }}    code: {{ .lsp.code | strings.Quote }}
{{ end }}{{ if has .lsp "after" }}    after: {{ .lsp.after | strings.Quote }}
{{ end }}{{ if has .lsp "item" }}    item: {{ .lsp.item | strings.Quote }}
{{ end }}{{ end }}{{ if has . "skip" }}
  skip:
{{ range .skip }}    - {{ . }}
{{ end }}{{ end }} #END {{ .id }}
{{ end }}
2021-01-02 10:14:26 -08:00
Radon Rosborough accc4da201 All tests are passing for Python 2020-12-27 13:12:29 -08:00
Radon Rosborough 2dd3e31f1a I hate writing Webpack configs. I hate it so much. 2020-12-27 12:42:06 -08:00
Radon Rosborough d9014b2342 More fixes for CI 2020-12-26 20:36:24 -08:00
Radon Rosborough 2c12fdd04a Various CI fixes, auto reload language configs 2020-12-26 20:26:03 -08:00
Radon Rosborough 2e6aafbcb3 Successfully run webserver from Docker image 2020-12-25 19:34:15 -08:00
Radon Rosborough 938e41b1c6 Python can be run interactively 2020-12-25 12:19:09 -08:00
Radon Rosborough 14f7bec490 Get main application page rendering 2020-12-25 12:06:25 -08:00
Radon Rosborough d54d0fb5bb Import webserver and get it running 2020-12-24 21:49:26 -08:00