Commit Graph

988 Commits

Author SHA1 Message Date
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
Radon Rosborough be8133ee71 Don't try pulling admin image 2020-12-31 23:10:53 -08:00
Radon Rosborough 9860f8f07c Fix subtle hash calculation bugs 2020-12-31 23:07:00 -08:00