Commit Graph

490 Commits

Author SHA1 Message Date
Radon Rosborough d9e7f6d378 Fix ENTRYPOINT for admin, ci images 2021-01-17 12:17:26 -08:00
Radon Rosborough ccc39b9c8f Make eC work 2021-01-17 12:14:17 -08:00
Radon Rosborough 4e032aaecb Deal with some DNS garbage
Apparently, my laptop was using 75.75.75.75 from Comcast as one of its
DNS servers, and unfortunately that server was totally broken (dig
@75.75.75.75 never returned results). I had to edit
/etc/systemd/resolved.conf to override DNS=8.8.8.8, then things worked
again. How DNS resolution worked at all outside of Docker was unclear
to me, but overriding 75.75.75.75 makes it work inside as well (when
not operating in --network=host mode).
2021-01-17 11:56:57 -08:00
Radon Rosborough 0c9c5707ea Use format strings 2021-01-16 10:03:49 -08:00
Radon Rosborough e848cc2792 Install shared deps into composite image 2021-01-16 09:56:59 -08:00
Radon Rosborough 471f18e567 Install shared deps for tests 2021-01-16 09:55:19 -08:00
Radon Rosborough 646eda0bbf Fix curry build 2021-01-14 21:56:22 -08:00
Radon Rosborough 7d780661db New solution that works on the free tier
Let's just require some languages to be built and published locally.
Easy enough.
2021-01-14 21:56:22 -08:00
Radon Rosborough 52093d53cb Try to avoid build timeout for Ante -_- 2021-01-14 07:56:44 -08:00
Radon Rosborough b82556bfd8 Clean up packages-microsoft-prod.deb 2021-01-13 22:06:13 -08:00
Radon Rosborough d46b1a9ece -_- 2021-01-13 21:47:37 -08:00
Radon Rosborough 6d89b5d2f9 Don't introduce circular dependency 2021-01-13 21:44:19 -08:00
Radon Rosborough 0be51eeaeb Compile setuid binary ahead of time in CI 2021-01-13 21:37:35 -08:00
Radon Rosborough 83d2873636 Fix some typoes in plan-publish script 2021-01-13 21:20:28 -08:00
Radon Rosborough 1e44d57254 Fix typo in getPackages() 2021-01-13 21:17:32 -08:00
Radon Rosborough eba085a10a Re-add license 2021-01-13 21:13:43 -08:00
Radon Rosborough fc1372a263 Update README 2021-01-13 21:13:18 -08:00
Radon Rosborough b02c2ebe77 Merge old development history into Debian rewrite 2021-01-13 21:09:37 -08:00
Radon Rosborough 342cff0511 Prepare for merge into master 2021-01-13 21:03:12 -08:00
Radon Rosborough 27099cca40 Attempt to account for shared deps in CI 2021-01-13 21:02:08 -08:00
Radon Rosborough 65c5403b6f Use http for now for Red
There seems to be a problem specific to my laptop's kernel or network
stack that causes an SSL error.
2021-01-13 17:00:57 -08:00
Radon Rosborough b9eaccfc66 Rename some files that I missed 2021-01-11 22:24:54 -08:00
Radon Rosborough f7b0b43551 Almost all languages working in new system 2021-01-11 22:17:09 -08:00
Radon Rosborough f013f7e26c Work on a number of additional languages 2021-01-11 19:34:44 -08:00
Radon Rosborough 5895b5f3e4 Everything through MongoDB 2021-01-10 15:52:23 -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 6450df047f Configure more package managers 2021-01-02 15:41:47 -08:00
Radon Rosborough d782cc1fb5 Import APT package installation 2021-01-02 11:08:14 -08:00
Radon Rosborough ec94a44030 Re-add install clause for Python 2021-01-02 10:18:15 -08:00
Radon Rosborough b849045d12 Fix Markdown test
It previously relied on multiple trailing newlines and that is not
allowed by our new YAML format.
2021-01-02 10:14:56 -08:00
Radon Rosborough a6adfea206 Rename Node.js => JavaScript 2021-01-02 10:14:56 -08:00
Radon Rosborough 8cd93a744f Remove some spurious trailing newlines 2021-01-02 10:14:56 -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 4f3633384c Factor out separate deploy script 2021-01-01 12:32:29 -08:00
Radon Rosborough a56dea0f76 Use hostnamectl 2021-01-01 12:19:11 -08:00
Radon Rosborough 86c29aef4c Add 'make sync' for my convenience 2021-01-01 12:13:59 -08:00
Radon Rosborough 87d7e6df8a Further optimization 2021-01-01 12:06:20 -08:00
Radon Rosborough 162e10d259 Configure TLS to work properly 2021-01-01 12:01:51 -08:00
Radon Rosborough e0e75d7dae Run tests in CI 2021-01-01 11:43:10 -08:00
Radon Rosborough a7e94b792e Speed up builds even more 2021-01-01 01:53:28 -08:00
Radon Rosborough 041d9ea40f Be less verbose 2021-01-01 01:18:14 -08:00
Radon Rosborough 2a656e4e50 Fix an oopsie, plus add 'make repkg' 2021-01-01 01:13:31 -08:00
Radon Rosborough 0f6d1d9923 Build packages in correct container 2021-01-01 01:02:56 -08:00
Radon Rosborough 8455d259c0 Attempt to patch more bugs 2021-01-01 00:55:33 -08:00
Radon Rosborough d36970b9de First cut at pruning unneeded downloads 2021-01-01 00:23:14 -08:00
Radon Rosborough e43b16bd12 Use smaller admin image for CI 2020-12-31 23:29:56 -08:00