)]}'
{
  "commit": "1c18ec94b0d2edcc6d69d1b96f89e3c6e630fc11",
  "tree": "994dbcf813d9c772da320ccccfc2e2f5fe826155",
  "parents": [
    "e1a6e1b25d1cf7f3aec4b98e155be7cf3701a1b0"
  ],
  "author": {
    "name": "Josh Bleecher Snyder",
    "email": "josharian@gmail.com",
    "time": "Tue Jul 08 10:55:54 2025 -0700"
  },
  "committer": {
    "name": "Josh Bleecher Snyder",
    "email": "josharian@gmail.com",
    "time": "Tue Jul 08 13:06:43 2025 -0700"
  },
  "message": "all: use make to build\n\nThis overhauls the build system.\nWe used to use a just-in-time clever build system\nso that \u0027go run\u0027 and \u0027go install\u0027 Just Worked.\n\nThis was really nice, except that it make it\nall but impossible to ship a single binary.\nIt also required our uses to install npm,\nwhich some folks have an understandably negative reaction to.\n\nThis migrates to a makefile for building.\nThe core typescript building logic is mostly still in Go,\nand untouched (boy did I learn that lesson the hard way).\n\nThe output is a single file that includes the webui, innie, and outie.\n\n(There are still very mild shenanigans in which we write outie\nout to a temp file and then \u0027docker cp\u0027 it into the docker container.\nBut this is pretty manageable.)\n\nThere are some significant follow-ups left after this commit:\n\n- convert the nightly release builds to use the makefile\n- lots of dead code removal\n- maybe add -race support using a dockerfile for the cgo compilation\n- maybe use \u0027docker cp\u0027 stdin reading with tar to avoid the temp outtie file\n- all the rest of the \"better release\" todos (brew install, etc.)",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "76fce36e0db9402b049cbb2fabdb6c7bd95ca238",
      "old_mode": 33188,
      "old_path": ".gitignore",
      "new_id": "2b55c68ccc5ead4fc01bda39b26f178d9a3d2070",
      "new_mode": 33188,
      "new_path": ".gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2b31b661b9c632bbd077ccb0b86b8bd39d7ee3ab",
      "new_mode": 33188,
      "new_path": "Makefile"
    },
    {
      "type": "modify",
      "old_id": "2e73713674c6be4572412fc3bfbfaa3120e96510",
      "old_mode": 33188,
      "old_path": "README.md",
      "new_id": "4964714c2bad960c9c9987001cfc9c2a3ef3cf49",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2abe552708990a7ea67aa982ddc692a6e8230b05",
      "new_mode": 33188,
      "new_path": "cmd/genwebui/genwebui.go"
    },
    {
      "type": "delete",
      "old_id": "02602b6fff19b27fee1bade5ba408d4fc2bf35ef",
      "old_mode": 33188,
      "old_path": "cmd/genwebuizip/genwebuizip.go",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "587a6b110120c226e768fe2369c7cf46362253d5",
      "old_mode": 33188,
      "old_path": "cmd/sketch/main.go",
      "new_id": "21e569b1d7eeba0fb2afe438bd6715098f2681e9",
      "new_mode": 33188,
      "new_path": "cmd/sketch/main.go"
    },
    {
      "type": "modify",
      "old_id": "7b9d54998c5c3dc8ff3001e8c89640e940adbd6e",
      "old_mode": 33188,
      "old_path": "dockerimg/dockerimg.go",
      "new_id": "77af08a0089a180756a0add5068ddb71bd416b72",
      "new_mode": 33188,
      "new_path": "dockerimg/dockerimg.go"
    },
    {
      "type": "modify",
      "old_id": "563d33bc6ab4ef89c06d67c98ea24245954c081d",
      "old_mode": 33188,
      "old_path": "dockerimg/dockerimg_test.go",
      "new_id": "e15a81fe9ca4b89d772f555d37d129b4c22cb8e1",
      "new_mode": 33188,
      "new_path": "dockerimg/dockerimg_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2bcd87882f669dcecbff620afa001f455d70ba3c",
      "new_mode": 33188,
      "new_path": "embedded/.gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5b8c49ad14e1e1c35ab1b2dd992b563996f188f",
      "new_mode": 33188,
      "new_path": "embedded/embedded.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "475e7a23f6225939c9c597cbc403dcb6b100d9ac",
      "new_mode": 33188,
      "new_path": "embedded/embedded_innie.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a89ff4be18ce28bc40b827e17e67d2d18c4246c6",
      "new_mode": 33188,
      "new_path": "embedded/embedded_outie.go"
    },
    {
      "type": "modify",
      "old_id": "3f90f8bae6c7864b21090060b48254bd327e01f2",
      "old_mode": 33188,
      "old_path": "loop/server/loophttp.go",
      "new_id": "e223a6029a2395846364d3b932aff3b287b57a2f",
      "new_mode": 33188,
      "new_path": "loop/server/loophttp.go"
    },
    {
      "type": "modify",
      "old_id": "d310f95eaa1ae99b1f8378c5515f0491a9a8e248",
      "old_mode": 33188,
      "old_path": "webui/esbuild.go",
      "new_id": "1588f0615d0b2446af83f25a23ae2e98a93c5de3",
      "new_mode": 33188,
      "new_path": "webui/esbuild.go"
    }
  ]
}
