)]}'
{
  "log": [
    {
      "commit": "e47ace84cb3e30375dcb4236c17ee9710a77a6ad",
      "tree": "c0e71fd6d25e4efad7175103b3b3780b773a02a0",
      "parents": [
        "5b87d7b074f3385eb85de601f48f4f7bccf1d423"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@brun.one",
        "time": "Wed Nov 06 12:45:47 2019 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@brun.one",
        "time": "Wed Nov 06 12:45:47 2019 +0100"
      },
      "message": "Fixes bazel_copy_generated_for_ide paths\n\nThis fixes the paths in bazel_copy_generated\nfor the new monorepo layout\n\nTest Plan: By using it :)\n\nX-Origin-Diff: phab/D246\nGitOrigin-RevId: 01fc0488ef4e2f6412ae458b4f2010a975a83692\n"
    },
    {
      "commit": "5b87d7b074f3385eb85de601f48f4f7bccf1d423",
      "tree": "8c87ae8ce2f880af7963298811570e749e0a2a10",
      "parents": [
        "1626705fd0ae9e93f563c2463fc514a144d41a99"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 14:56:30 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 14:56:30 2019 +0000"
      },
      "message": "Follow-up fix for D250 - actually use the new volume\n\nTest Plan: Covered by CI\n\nX-Origin-Diff: phab/D251\nGitOrigin-RevId: 65c547de038a4dfd37c7c8394a8a0e79914333bb\n"
    },
    {
      "commit": "1626705fd0ae9e93f563c2463fc514a144d41a99",
      "tree": "0b882399123846787b9a20265b04e41cdf1e4941",
      "parents": [
        "654930736a90fb7f2dadf280dc9044d8e57bce06"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 14:43:21 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 14:43:21 2019 +0000"
      },
      "message": "Separate cache volume for each working copy\n\nWe can rely on the repository leases to coordinate Bazel caches,\nbasically leasing them out along with the repository.\n\nWith multiple copies of the cache, keeping them on a tmpfs seems\nlike a bad idea, so we switch to a local volume.\n\nTest Plan: Covered by CI\n\nX-Origin-Diff: phab/D250\nGitOrigin-RevId: 01d9392198d8c00089d3133425091ab766b9b590\n"
    },
    {
      "commit": "4d39d37035c5e46274183f36221c2e50f99bb411",
      "tree": "48820886a3b559eac0669b1a7291425471efcc44",
      "parents": [
        "0bcaaee19dc2338751705a83126cec40a1b8a2e8"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 14:11:12 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 14:11:12 2019 +0000"
      },
      "message": "Remove left-over debugging code introduced in D242\n\nThis was, of course, done on purpose in order to check how carefully\nyou read the code ;-)\n\nTest Plan: N/A\n\nX-Origin-Diff: phab/D247\nGitOrigin-RevId: caf9e59d4c87c59eab6e08c70cdcd61b1fa12627\n"
    },
    {
      "commit": "052af2dce813dba9f74ffc05ffd760e60a37c23b",
      "tree": "e0c5dac8c237ad4e92a6c2d91427678d8a4e1691",
      "parents": [
        "b51b4171390ec52433f8c06faef46ef5eccf91d4"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 02:21:53 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Nov 06 02:21:53 2019 +0000"
      },
      "message": "Simple CI pipeline for Smalltown Core\n\nSince we run as root on the build server, we can properly mount a tmpfs\nas the shared build volume with exec support (this is still broken for\nunprivileged create_container.sh). We\u0027ll have to see when and if this\nblows up, and whether we want to use a disk-backed volume instead.\n\nThe pipeline has two stages that run the following commands:\n\n- `scripts/run_ci.sh ${build.id} ${target.phid} bazel build //core/scripts:launch`\n\n- `timeout 30 scripts/run_ci.sh ${build.id} ${target.phid} bazel run //core/scripts:launch; true` (for visual inspection)\n\nThose are placeholders - we will want to integrate any and all\ntests in Bazel, only trigger tests whose dependencies have been\nmodified in a given build step, and report individual results back\nto Habormaster.\n\nWhat works:\n\n- Persistent working copies on the build server. Drydocks caches a number of\n  persistent repository copies to avoid a full clone on each build, and\n  uses a leasing mechanism to allocate them. Of course, this means we\n  have to be careful about not polluting the repo, but Bazel takes care of that.\n\n- Shared build cache with fast incremental rebuilds\n  (a build with no changes takes ~15s including the podman build step).\n\n- Full rebuild after volume deletion takes ~4m.\n\n- Build output shows up in Phabricator in real time.\n\n- Aborting a build properly cancels the running build and clean up the pod.\n\n- Launching the QEMU VM.\n\n- Reporting build status back to Harbormaster (noop at the moment, can\n  be used to report unit test states later). This uses the awesome undocumented\n  SSH conduit transport so we don\u0027t have to deploy a separate token on the host.\n\n- Phabricator revisions are drafts until all tests complete successfully.\n\nTest Plan: See tests :-)\n\nBug: T483\n\nX-Origin-Diff: phab/D242\nGitOrigin-RevId: 64eca996c8704cb0cd4f1cbb4f88f71a6fdca1eb\n"
    },
    {
      "commit": "b51b4171390ec52433f8c06faef46ef5eccf91d4",
      "tree": "8c537364ed17732d16800fbe0e5a710519de71ca",
      "parents": [
        "6c39ea1355bf2853abdbd2f69a7eece222c44b78"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Mon Nov 04 12:55:19 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Mon Nov 04 12:55:19 2019 +0000"
      },
      "message": "Remove --userns\u003dkeep-id in create_container.sh\n\nWith a mapped user namespace, recent podman versions fail to mount /sys\n\nThis removes some isolation, similar to using uid 0 in a regular Docker container.\n\nTest Plan: Ran build\n\nX-Origin-Diff: phab/D238\nGitOrigin-RevId: 39dc826f4ce95a6c5b405a49be3d2e9d19174fc1\n"
    },
    {
      "commit": "3e6018fcf0645da7876eec06d1604438bea0550e",
      "tree": "6bb2fa6081152d2dc32530a8eaaf0a58c31dc35e",
      "parents": [
        "0d7c91e331022831a974c2e34d32bb5b89ddc89c"
      ],
      "author": {
        "name": "Hendrik Hofstadt",
        "email": "hendrik@certus.one",
        "time": "Mon Oct 28 21:29:42 2019 +0100"
      },
      "committer": {
        "name": "Hendrik Hofstadt",
        "email": "hendrik@certus.one",
        "time": "Mon Oct 28 21:29:42 2019 +0100"
      },
      "message": "Add sqlboiler bazel rules\n\nThis implements a bazel rule to build sqlboiler models from sql migration stacks. It also launches a cockroachdb container in `create_container` and puts it in one pod with the nexantic-dev container.\n\nCurrently gazelle overwrites the `go_library` rule. I still need to find a way to properly exclude it.\n\nTest Plan: Built a sample set of sql models\n\nX-Origin-Diff: phab/D226\nGitOrigin-RevId: ff24f07bb0b3da9994c52a74f48b54e1e2bea726\n"
    },
    {
      "commit": "0d7c91e331022831a974c2e34d32bb5b89ddc89c",
      "tree": "5b822873c015053f4b697d60c33fa3b1ef9a3a4b",
      "parents": [
        "043daa57020dd36e074488dcb432114a548a3d2a"
      ],
      "author": {
        "name": "Hendrik Hofstadt",
        "email": "hendrik@certus.one",
        "time": "Wed Oct 23 21:44:47 2019 +0200"
      },
      "committer": {
        "name": "Hendrik Hofstadt",
        "email": "hendrik@certus.one",
        "time": "Wed Oct 23 21:44:47 2019 +0200"
      },
      "message": "Implement monorepo layout\n\nImplemented the nexantic monorepo.\n\nSmalltown code was moved to `core`. From now on all code will live in top level directories named after the projects with the exception for general purpose libraries which should go to `\u003clang\u003elibs`.\n\nGeneral build and utility folders are underscore prefixed.\n\nThe repo name will from now on be rNXT (nexantic). I think this change makes sense since components in this repo will not all be part of Smalltown, the Smalltown brand has been claimed by Signon GmbH so we need to change it anyway and the longer we wait the harder it will be to change/move it.\n\nTest Plan: Launched Smalltown using `./scripts/bin/bazel run //core/scripts:launch`\n\nX-Origin-Diff: phab/D210\nGitOrigin-RevId: fa5a7f08143d2ead2cb7206b4c63ab641794162c\n"
    },
    {
      "commit": "043daa57020dd36e074488dcb432114a548a3d2a",
      "tree": "2975b607028ca0c085df182afd809d1d322be2b7",
      "parents": [
        "23be9215aae77d2171c31f767c37cf69050fb748"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Mon Oct 28 11:48:45 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Mon Oct 28 11:48:45 2019 +0000"
      },
      "message": "Fix caching and set home to /user\n\nTest Plan: Ran build\n\nX-Origin-Diff: phab/D220\nGitOrigin-RevId: d93c13b9a74c45d717e92151cdb10f0f3484a78b\n"
    },
    {
      "commit": "23be9215aae77d2171c31f767c37cf69050fb748",
      "tree": "72323854031d5311f437e490370f1644d34f0796",
      "parents": [
        "ba7bc7664b53ce63824ec991febdd74ea4d9dbf3"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Mon Oct 28 11:48:32 2019 +0000"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Mon Oct 28 11:48:32 2019 +0000"
      },
      "message": "Use rsync --delete to sync generated dependencies\n\nTest Plan:\nRecreated container, ran `build api/...` and the copy script,\neverything works.\n\nX-Origin-Diff: phab/D218\nGitOrigin-RevId: 22160ddaf417177ba7af94ea29d75663b20950b0\n"
    },
    {
      "commit": "4abadef540e5c5155aa0e6cc7b19221cbaa4b82d",
      "tree": "cdc71545bda98761bd7cd80958f3127b08da2d28",
      "parents": [
        "f5c89110d9af59fe3a5c928ce1b244d3ad815fce"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Thu Oct 24 18:19:53 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Thu Oct 24 18:19:53 2019 +0200"
      },
      "message": "Specify -prune\u003dtrue Gazelle flag\n\nThis cleans up our repositories.bzl file.\n\nUpdate BUILD.bazel files and go.mod. `google.golang.org/appengine v1.4.0`\ndisappears due to a bug that was fixed in Go 1.13 - make sure your\nworkstation is up to date, an automated installer for Fedora was\nadded in rWdfcd0da736.\n\nTest Plan: Ran scripts/gazelle.sh, repositories.bzl was updated properly.\n\nX-Origin-Diff: phab/D216\nGitOrigin-RevId: 2435f88beb610845edfc8a6c50e4ef16edb895ea\n"
    },
    {
      "commit": "f5c89110d9af59fe3a5c928ce1b244d3ad815fce",
      "tree": "a6af6fdd7f920a9411389b38abc1f096cadc41c1",
      "parents": [
        "1fbd7d9ef119d7a0487a7234affe7683c43a7b80"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Thu Oct 24 17:51:49 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Thu Oct 24 17:51:49 2019 +0200"
      },
      "message": "Create generated folder in bazel_copy_generated_for_ide.sh\n\nMinor change,\n\nTest Plan:\n\nRan the script inside the container, dependencies were fetched.\n\nGitOrigin-RevId: 91edd8babca5e506885b311cf95b4e8deb4f0525\n"
    },
    {
      "commit": "52804a1970bf8633c216fea4e165df4e88a16acc",
      "tree": "e6be5233989911dd21f2d74a170199a396793054",
      "parents": [
        "b51250a42b51b8dc6509c7dc57522d42bced2c00"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Thu Oct 24 02:17:13 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Thu Oct 24 02:17:13 2019 +0200"
      },
      "message": "Run as unprivileged user in container in a new user namespace\n\nThis prevents the build from accidentally modifying system files in\nthe container, and increases security.\n\nTest Plan:\n    scripts/destroy_container.sh; scripts/create_container.sh \u0026\u0026 scripts/run_in_container.sh id\n    # uid\u003d1000(1000) gid\u003d1000 groups\u003d1000\n\n    bazel run scripts:launch\n    # works\n\nX-Origin-Diff: phab/D212\nGitOrigin-RevId: 74af18ee49cf48e45440e12e9efe36e57be5f18d\n"
    },
    {
      "commit": "b51250a42b51b8dc6509c7dc57522d42bced2c00",
      "tree": "2acae03fe183393dae34c7cabd6f92f10dd8d08b",
      "parents": [
        "3ea707028e5f140b1a5186a7086c0089a70c8f9c"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 23:32:59 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 23:32:59 2019 +0200"
      },
      "message": "Update Bazel to 1.1.0 and replace bazelisk by a direct download\n\nThis pins the version and avoids the need to redownload the binary\neach time the container is recreated.\n\nThe .bazelversion file was bazelisk-specific and is no longer needed.\n\nTest Plan:\nRebuilt the container, ran `scripts:launch`.\n\nModifying the checksum caused to build to fail.\n\nX-Origin-Diff: phab/D211\nGitOrigin-RevId: ec9ec2b97c6555a676f6444ac3923fad34b2cd16\n"
    },
    {
      "commit": "3ea707028e5f140b1a5186a7086c0089a70c8f9c",
      "tree": "f07f5a23d75445789a1cbb116e8ca30471106ab2",
      "parents": [
        "544440b6c8603ddaa548add84a657c999feeec49"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 16:40:06 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 16:40:06 2019 +0200"
      },
      "message": "Mount Bazel repository_cache, Go mod cache and Go build cache as volumes\n\nThis leaves us with only git_repository rules not being cached,\nthe worst offender being the edk2 recursive submodule clone.\n\nSee: https://github.com/bazelbuild/bazel/issues/5116\n\ngazelle\u0027s repo lookup (running `go list`) is also not cached, even if the\nrepositories themselves are.\n\nWe can eliminate most of the remaining rebuild time by mounting\nthe entire execroot, however, this is currently foiled by a podman bug\n(Bazel needs to execute lots of binaries inside the root):\n\nhttps://github.com/containers/libpod/issues/4318\n\nTest Plan:\nRan `bazel build scripts:launch`, recreated container, ran it again.\n\nBuild times decreased significantly:\n\n    INFO: Elapsed time: 279.951s, Critical Path: 119.05s\n    INFO: 477 processes: 476 linux-sandbox, 1 local.\n    INFO: Build completed successfully, 497 total actions\n\nX-Origin-Diff: phab/D206\nGitOrigin-RevId: 2d17a7eeb5d8b70ad4e26c13a0c6b31c4edfb33f\n"
    },
    {
      "commit": "2a2081cc8bdb0a04a1c5e4509ce5cb569f3ef110",
      "tree": "af2403c83ae163f1f512721b1c27643d21ab39b2",
      "parents": [
        "7afd390eadf37eac58d4db8ad3751783c40bdf37"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 13:33:10 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 13:33:10 2019 +0200"
      },
      "message": "Increase robustness of bazel wrapper script and remove repository_cache\n\nThis allows the wrapper script to be called from anywhere.\n\nThe repo cache does not actually work as expected since it does not\ncache most external dependencies we care about, and is not always a\nvalid command line argument, so we would either have to specify it\nin .bazelrc (breaking non-standard dev setups), or specify it manually.\n\nTest Plan: Ran the bazel wrapper from my home directory, got expected output.\n\nX-Origin-Diff: phab/D204\nGitOrigin-RevId: 74d09ba24fd84ba0dd6e1ba282995c452546eb25\n"
    },
    {
      "commit": "7afd390eadf37eac58d4db8ad3751783c40bdf37",
      "tree": "73b7533e0ba991eb8f2d98ed58e4350ca4c8e394",
      "parents": [
        "2983d7285fe019f943f1b722f26a0f2e959c5f80"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 12:16:57 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 12:16:57 2019 +0200"
      },
      "message": "Use --privileged in Fedora container\n\nThis enables the namespace-based sandbox in Bazel.\n\nUsing `--privileged` isn\u0027t as dangerous as it looks, when used with podman in rootless mode (i.e. ran as unprivileged user), in which case it uses user namespaces.\n\nWe drop `--net\u003dhost`, which is not actually necessary.\n\nTest Plan:\n    scripts/destroy_container.sh\n    scripts/create_container.sh\n    scripts/run_in_container.sh bazelisk build :swtpm_data\n\n This now fails properly when ran with the container:\n\n     swtpm-localca: touch: cannot touch \u0027/var/lib/swtpm-localca/.lock.swtpm-localca\u0027: Read-only file system\n     swtpm-localca: Error: Could not create lock file /var/lib/swtpm-localca/.lock.swtpm-localca.\n\nX-Origin-Diff: phab/D202\nGitOrigin-RevId: f51a831e7584cccf21860e9f18b73272a658f055\n"
    },
    {
      "commit": "2983d7285fe019f943f1b722f26a0f2e959c5f80",
      "tree": "f6b5056682bef41597d02347dff0d523916d196f",
      "parents": [
        "e28e1b3556feb786c71f161b357fcf6899e44c19"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 12:16:42 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Wed Oct 23 12:16:42 2019 +0200"
      },
      "message": "Improve Bazel Fedora build container handling and cache repository downloads\n\nAdds lifecycle management scripts for the dev container and a \"bazel\" wrapper script, which sets container-only startup options.\n\nReplaces /dev/null bind mounts by SELinux contexts for container breakup prevention, since newer podman versions managed to somehow break the ordering of mounts and mounting on top of a volume gives ENOENT. This requires a placeholder .arcconfig.\n\nOn Fedora, SELinux prevents the container from accessing /dev/kvm, which requires a custom policy (see rWa716c988d69e).\n\nDesign considerations:\n\n- The build cache is on a tmpfs. This avoids fuse-overlayfs overhead. If the container is recreated, we want to drop the build cache - Bazel does not track ambient dependencies, so we do not know if we need to rebuild anything (like after upgrading a compiler).\n\n- The repository cache contains just workspace dependencies and is mounted as a volume.\n\nThe repository caches does not work terribly well yet, we probably need to mount parts ~/.cache/bazel as well. podman always mounts volumes as noexec, so this is not as straight-forward as it looks.\n\nTest Plan:\nRan the commands from the README as my unprivileged workstation user.\nSmalltown was built and launched successfully.\n\nX-Origin-Diff: phab/D198\nGitOrigin-RevId: aff720d2862cdf5d1df67813d842d221d69a84c0\n"
    },
    {
      "commit": "e28e1b3556feb786c71f161b357fcf6899e44c19",
      "tree": "4bc2b91b2e276c6e7ee4131ab0c76eec4ec391fa",
      "parents": [
        "5c80acaec733e0b7c43cb0584cdeb7cebc826aa9"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Tue Oct 22 19:20:34 2019 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Tue Oct 22 19:20:34 2019 +0200"
      },
      "message": "Fix Bazel on properly sandboxed execution\n\nTest Plan: Tested by launching VM\n\nX-Origin-Diff: phab/D199\nGitOrigin-RevId: d27f09e62067082ca0d6f40510c851752094b481\n"
    },
    {
      "commit": "5c80acaec733e0b7c43cb0584cdeb7cebc826aa9",
      "tree": "f7db6de47e4ef38599da89dd4f1082c65569ca03",
      "parents": [
        "a71b5a4c36d5cae089666eaad57514c64baf6f24"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Tue Oct 22 15:48:58 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Tue Oct 22 15:48:58 2019 +0200"
      },
      "message": "Replace build system with a Bazel-based one\n\nThis pins our external dependencies and introduces a mostly-hermetic build where all dependencies are explicitly declared and rebuilt if needed.\n\nNecessary prerequite for a proper CI workflow. Since Bazel can cache build artifacts, we can remove the hardcoded binary artifacts from the repo.\n\nAs suggested in our discussions, the genrule that builds mkfs.xfs is basically doing the same as the previous build_artifacts.sh script (see source code comments for rationale).\n\nThe main issue at this point is that the `build/linux_kernel:image` target rebuilds the kernel each time any of its inputs (like cmd/init)\nchange. This is very hard to fix without compromising on hermeticity, porting kbuild to Bazel (no thanks) or injecting the initramfs into the\nkernel image in a separate rule (might just work, but the kernel build rule would either have custom code, or a massive set of outputs).\n\nPerhaps we could use a separate initramfs for development? Or deliberately poke holes into Bazel\u0027s sandbox to reuse kernel build?\n\nTest Plan:\nRun this in a fresh container with empty Bazel cache:\n\n    bazelisk run scripts:launch\n\n... and watch as Bazel rebuilds the world.\n\nX-Origin-Diff: phab/D197\nGitOrigin-RevId: 21eea0e213a50e1c4ad25b2ac2bb87c53e36ea6d\n"
    },
    {
      "commit": "67f9d096fb66d9f9298542d98d128a42b9d43695",
      "tree": "cb548c7e7a63df850302f6bb42a5a6bb3e5d2700",
      "parents": [
        "40ab4b41d338657c67a7fa72a3f76e26f582d98e"
      ],
      "author": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Tue Oct 22 15:41:42 2019 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Tue Oct 22 15:41:42 2019 +0200"
      },
      "message": "Refactor build_artifacts.sh and makefile\n\n- Move everything to .data, .vendor, .artifacts and .bin in order to cleanly separate build input and output.\n- Sprinkle some subshells on build_artifacts.sh to make it fail more gracefully.\n- Fix fetch_third_party.sh check.\n- GOBUILD make helper.\n- Dockerfile with build dependencies.\n\nTest Plan:\nRan `make clean` and build steps described in README.md, it boots:\n\n{P84}\n\nX-Origin-Diff: phab/D195\nGitOrigin-RevId: 4106534c7248931b79e93e2a13153482033cd0d8\n"
    },
    {
      "commit": "f95909d11f20c01129120274076a44a689eabe3d",
      "tree": "2ba85463c30b26c0df8b7c278ea5df22da42dfdb",
      "parents": [
        "ae0d90d0f95a1a71801d31d5460d32f8644fc0dd"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Wed Sep 11 19:48:26 2019 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Wed Sep 11 19:48:26 2019 +0200"
      },
      "message": "UEFI EDK II, TPM minting, QEMU launcher and basic DHCP support\n\nTest Plan:\nYou still need a recent version of QEMU and swtpm installed (these are not yet integrated)\nRun `make launch` and have fun with a running Smalltown instance :)\n\nX-Origin-Diff: phab/D159\nGitOrigin-RevId: c7245bfbabebf92507445525bee009a71d19caea\n"
    }
  ]
}
