)]}'
{
  "log": [
    {
      "commit": "c607bf67ae20b17e8f254a7e3817e2d1a93114be",
      "tree": "23cbb4bb40570be41cca51699c288f193b2b7029",
      "parents": [
        "4bde9313d653c7a3714d824f9904aa4081796560"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jul 22 20:25:26 2025 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Aug 11 21:44:47 2025 +0000"
      },
      "message": "m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\nReviewed-on: https://review.monogon.dev/c/monogon/+/4496\nReviewed-by: Jan Schär \u003cjan@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "6d33a4342a16200d628f30ff91b169927fc2867a",
      "tree": "e65ad23cb6d0b795420b5ec625a757784d4c3e3b",
      "parents": [
        "7887f758de8f9106a484ca59d9734304aa919e36"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Feb 04 14:34:25 2025 +0100"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Feb 06 17:03:43 2025 +0000"
      },
      "message": "treewide: add license header and enable haslicense linter\n\nChange-Id: I873a8d4082d75e8f813d8a726a41187eea7a065e\nReviewed-on: https://review.monogon.dev/c/monogon/+/3825\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "91bcf46639db7008c7290e6f27136cd122fd1b3c",
      "tree": "f0edbfddd7a96ce00edb0db0bb1cf294536d9f1a",
      "parents": [
        "007d66e6b32db8080d37738b2986871729a48e03"
      ],
      "author": {
        "name": "Timon Stampfli",
        "email": "timon@timon.ch",
        "time": "Sun Dec 15 16:57:05 2024 +0100"
      },
      "committer": {
        "name": "Timon Stampfli",
        "email": "timon@timon.ch",
        "time": "Fri Dec 20 15:53:04 2024 +0000"
      },
      "message": "m/node: remove non-definition dependencies\n\nThis enables usage from arbitrary platforms without including lots of\ndependencies that aren\u0027t related to functionality.\n\nChange-Id: I33e16b5396dc7216b676b294b8c1752caf3551b3\nReviewed-on: https://review.monogon.dev/c/monogon/+/3697\nTested-by: Jenkins CI\nVouch-Run-CI: Lorenz Brun \u003clorenz@monogon.tech\u003e\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    }
  ]
}
