)]}'
{
  "log": [
    {
      "commit": "e65d9a934c8d6bab4d16358132f73f8396041e97",
      "tree": "3e220983f618fd40162f0b6ec7db964951b065ee",
      "parents": [
        "9b7421ac7ad75ad949e32d1606afcd685443ef8c"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 19 09:02:32 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 20 07:21:12 2025 +0400"
      },
      "message": "dodo: Support Sketch agent\n\nChange-Id: I4dcd6aab7d7a2c2e86aaf1ad8d36d30a649ab31d\n"
    },
    {
      "commit": "6481c9095aef7c7d2a0554b1d1af8a55171a89c3",
      "tree": "c82ca1b5f49c7a3247a8f0abb45092f763506673",
      "parents": [
        "b45b1866d422a31135a5d9af73ebc79381d0a0cb"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 16:16:30 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 21:55:58 2025 +0400"
      },
      "message": "DodoApp: Introduce password role\n\nAuto generate passwords for PostgreSQL and MongoDB.\n\nChange-Id: Ibd9fb900ddc8dd505c60ae4dfba73f1c951e3470\n"
    },
    {
      "commit": "4e3b24d8aa1e06d9e0bcc00e645195006206df27",
      "tree": "c01fabf64afeedce01a42f3156b25232ff7bd9cf",
      "parents": [
        "b7a3e1299ed7be6fc088b389c8841eb479ae3acb"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Apr 23 15:29:13 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Apr 23 17:59:02 2025 +0400"
      },
      "message": "DodoApp: Support env aliases\n\nChange-Id: I7567935df8615c03089cb27d46852c0fb8ea5877\n"
    },
    {
      "commit": "f15b9dae8da59ea970cebe865673c0b74fb05d14",
      "tree": "f6ae28d7c46bd6c833ada7c436f4dacab0628876",
      "parents": [
        "f6ad298e24e22c1fadb203d85f8b8dd6cb118e25"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Sep 19 06:59:16 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Sep 21 11:45:45 2024 +0400"
      },
      "message": "DodoApp: Support remote clusters\n\nChange-Id: I6f4e6a0a32cc723b47c96518d83b1ffdb5169f14\n"
    },
    {
      "commit": "81246f000e61fa3d1282870cab9bb04170c633f2",
      "tree": "147ef0a6df8c5ab609757cd151cf688daacfea47",
      "parents": [
        "a60f0decc365f877d7b88d099a65e0b686db78e9"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 10 12:02:15 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 10 13:57:34 2024 +0400"
      },
      "message": "DodoApp: Implement internal auth\n\nFollow up change will make internal auth optional, and let user\nconfigure dodo-app to use environment wise auth service.\n\nChange-Id: Ie308b30becd4390f3d9a07caf6f894b8bd4ebf3a\n"
    },
    {
      "commit": "a60f0decc365f877d7b88d099a65e0b686db78e9",
      "tree": "fc62da0f29749454569cc49710cd809724581bc6",
      "parents": [
        "71eecceeec941c4d1efe46c446139fa1b3eaa479"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 08 10:49:48 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 10 09:23:39 2024 +0400"
      },
      "message": "DodoApp: Status page\n\nImplements basic status page, listing all apps and their commit\nstatuses. Separates web and api endpoints. Unifies API addresses a bit.\n\nChange-Id: I98f9f949a49b60e80e188f7b51ec0e967666e65b\n"
    },
    {
      "commit": "efa0ed4866fc7b67652a52c1c29142542be55049",
      "tree": "1fea1aa9928dc0ef30abc31f1c7eadca43da2ead",
      "parents": [
        "f9f0beec8492e05a459bd7080ad095b4cf9292bc"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 13 12:31:43 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 13 18:59:36 2024 +0400"
      },
      "message": "Installer: dynamically generate open port requests\n\nApp config can mark any of the input (int) fields as having a role.\nFor such fields installer first will make port reservation request to\nPort Allocator, which will dynamically allocate and reserve one of the\navailable ports for the application. Once application is committed to\nconfig repository, installer makes another request to port allocator\nto actually open dynamically reserved port in the ingress service.\n\nAdded port reservation logic to Port Allocator. Reservation lasts 30\nminutes.\n\nChange-Id: Ic8caa0d04459b1a6e8a351e2ca6964ac15c7253d\n"
    },
    {
      "commit": "f88434168174a99f76853e509877475c7ffde893",
      "tree": "2fc1c2a35444462db55f09c3570bd22ec5b5c482",
      "parents": [
        "6ec78549d803828a27b62878dfc40567913db195"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 22 16:38:05 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 12 16:41:40 2024 +0400"
      },
      "message": "AppManager: cache helm charts and container images to local registry\n\nCaching container images is disabled until we figure out how to run\ncontainer registry behind TLS.\n\nChange-Id: I0253f2a862e5adddff18a82b102f67258151c070\n"
    },
    {
      "commit": "aa0fcdb54e7ff372899e6234405505abe6da96b7",
      "tree": "59b3e3cf279d9d938fd9b7ae5e3eaf85f7307696",
      "parents": [
        "e25ce1c3c72fc5a8f319d54bb0edcf3e2326e912"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 10 22:19:25 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 10 22:19:25 2024 +0400"
      },
      "message": "AppManager: replace Echo server with Gorilla Mux\n\nChange-Id: I4f238b18d87e767f63930aae1ff13e0ee7937466\n"
    },
    {
      "commit": "e72b54f819a38afc6656b99010370d6f3d51c38e",
      "tree": "3da4dec10618aca7403f423005ba31ed8c3fae04",
      "parents": [
        "56f86a481e4ac0be5548c8337ea85c1af0561462"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Apr 22 10:44:41 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Apr 30 16:15:43 2024 +0400"
      },
      "message": "DNS: run separate CoreDNS instance for each PCloud env.\n\nPreviously shared CoreDNS instance was used to handle all domains. This has multiple downsides, most important which is security. For example DNS-Sec keys of all domains were persisted on the same shared volume. Also key itself was generated by PCloud env-manager as part of bootstrapping new env. Which is counter to the main aspirations of PCloud, that environment internal private data must not leak outside of the environment.\n\nWith new approach implemented in this change, environment starts up it’s own CoreDNS and DNS record manager servers. Manager generates dns-sec keys internally and only exposes public information to the outside world. PCloud infrastructure runes another instance of CoreDNS which acts as a proxy service forwarding requests to individual environments based an requested domain.\n\nThis simplifies DNS based TLS challenge solvers, as private certificate issuer of each env will point directly to the DNS record manager of the same environment.\n\nChange-Id: Ifb0f36d2a133e3b53da22030cc7d6b9099136b3d\n"
    },
    {
      "commit": "207ce086a9a3600969d74727e2292d8363b9d50c",
      "tree": "00b3c843dd6d11bb00a6950fabc7bd09303fb0e4",
      "parents": [
        "c916187ddccbe0ae65e62b0474f84b1b7395b939"
      ],
      "author": {
        "name": "Davit Tabidze",
        "email": "davidtabidzef1@gmail.com",
        "time": "Tue Apr 09 19:15:25 2024 +0400"
      },
      "committer": {
        "name": "Davit Tabidze",
        "email": "davidtabidzef1@gmail.com",
        "time": "Wed Apr 24 13:20:26 2024 +0400"
      },
      "message": "launcher: application launcher\n\nChange-Id: I81d49a0651702dc821d683d6a4b3bbff6af3c753\n"
    },
    {
      "commit": "308105eedb9edefe37b40341f9ba02705a5c60b5",
      "tree": "7b718be43454bc9f5c8fc02bc5a9fd1a2f678190",
      "parents": [
        "db274d18bded70f68a886f4943fcc47dd54e22d5"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Apr 19 13:12:13 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Apr 19 20:44:29 2024 +0400"
      },
      "message": "Rewrite: rewrites env config repo and commits application cue files\n\nWe can build upon this tool to implement version to version migration logic.\n\nChange-Id: I6066f565f118ca44ca3ce7a0ac7522258958cf25\n"
    },
    {
      "commit": "3af43943f99b7a05b1c597c99aa0a3a999e839ec",
      "tree": "21e8559e36b37f92760eaf13b1a430010e605d2b",
      "parents": [
        "ef01fbb46843e198939f9d844110f7fb6c250015"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v0.dodo.cloud",
        "time": "Tue Apr 16 08:13:50 2024 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Apr 18 17:52:43 2024 +0400"
      },
      "message": "Installer: Clean up RepoIO interface\n\nChange-Id: If80d7be1460c725b7df9d1d27c9354cb9141acfe\n"
    },
    {
      "commit": "b59b7c21e16cdbc0989787c075f1055a295e8235",
      "tree": "1a5553a752dfece34e5fc2f9f3fe6701bef08e73",
      "parents": [
        "c0d2bf569807c5551c98ecc08f4602c17af73ae2"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Wed Apr 03 22:17:50 2024 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Mon Apr 08 20:28:51 2024 +0400"
      },
      "message": "port-allocator: allocates ports on preconfigured ingress-nginx\n\nReplacement of /core/installer/tcp-udp-transport\n\nChange-Id: I3d116b0f4508b462398f69e980ad55771dc88b7c\n"
    },
    {
      "commit": "ab7ff6eb3a1c56e594811f09b414643af0656a1b",
      "tree": "d9b0d2f98be3a362d4d5462cb271da4c7de0f9c3",
      "parents": [
        "afde8af1d241e52575368dcaabc806ff013982c0"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Fri Mar 29 13:11:30 2024 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "gio@gerrit.p.v0.dodo.cloud",
        "time": "Fri Mar 29 12:44:35 2024 +0000"
      },
      "message": "env: status page\n\nUpdates page asynchronously every 5 seconds.\nIntroduces beforeStart and afterStart trigger points to update setup status information.\n\nChange-Id: Ic2f6a9bb7a0fefeefc4d6a1a7338d506a4f99e80\n"
    },
    {
      "commit": "7c427602668a33eaec70a1a678a5884a555c284b",
      "tree": "07ce64790f298e73a2699ca60ff70020877ef959",
      "parents": [
        "d76414ebcf4a079b003f1edd67edbee330408c94"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Thu Jan 04 00:13:55 2024 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Thu Jan 04 00:13:55 2024 +0400"
      },
      "message": "appmanager: refactor schema into interface, introduce cuelang\n"
    },
    {
      "commit": "cd9e42c008f77aee31c05e9d5f236472eb65fdd2",
      "tree": "16035a45080eda26b3f94f156af144fd4a911b40",
      "parents": [
        "efce51ff114b84d036aed12e8fc8b15e4286a5da"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Wed Dec 13 09:49:44 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Wed Dec 13 09:49:44 2023 +0400"
      },
      "message": "installer-env: render dns records to publish\n"
    },
    {
      "commit": "46743d4ccf9881f0c7a121310b3a6d3d04ea7a50",
      "tree": "3a3f176699d5959905350089b0e220be3c54a097",
      "parents": [
        "e287076723578f067df050e8d314183417840157"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Sun Dec 10 15:47:23 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Sun Dec 10 15:47:23 2023 +0400"
      },
      "message": "installer: split up new env creation into chain of tasks\n"
    },
    {
      "commit": "e8b2f010c0f4f3a3e459ac68596f42ee5c104682",
      "tree": "1659e3879b67b801dd70928ab768814f828edcff",
      "parents": [
        "724885f1f6e7cc78bc0b00612579221687f76a09"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Thu Nov 30 19:05:03 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Thu Nov 30 19:05:03 2023 +0400"
      },
      "message": "dns-zone-controller: with env-manager generating dnssec key and zone records\n"
    },
    {
      "commit": "a1e7790c41fbccde0c4796c2606cf7b1734fb950",
      "tree": "6dba18f5e5987fcd0295b42e7488c13196c5f42d",
      "parents": [
        "29c95caac0f7f792bc6d3b145c7d6b075ef6612c"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Mon Nov 06 14:48:27 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Mon Nov 06 14:48:27 2023 +0400"
      },
      "message": "installer: use soft-serve keygen lib\n"
    },
    {
      "commit": "402fff9531b2dc90ba04d4f89a79533b69359c0e",
      "tree": "0379202c9c1f48ff4b5c4ccb9e9761fbee2a53f5",
      "parents": [
        "a2f4bb2284b2f5771341cc6d6e7e08a8ba44cd05"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Sun Jul 09 19:38:24 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Sun Jul 09 19:38:57 2023 +0400"
      },
      "message": "bootstrap: use retry to wait for soft serve to come up\n"
    },
    {
      "commit": "0ccd1481dbc083b60a7cb8ac33ad99bef2c1eb02",
      "tree": "aa576e26ad40f83f2ad893f54fd6b0376e64faa6",
      "parents": [
        "44f9d599f546f4aaf9d42dc1db74f4989ac29513"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Wed Jun 21 15:02:24 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Wed Jun 21 15:02:24 2023 +0400"
      },
      "message": "installer: fully automate initial bootstrap and env creation\n"
    },
    {
      "commit": "7efe22f412bb249bd1f41bdcc758edbd749198c8",
      "tree": "93e0846c9814426677787f9d49b7066ab8852ee0",
      "parents": [
        "bd6be7f5122b7158121e9cf79215b78eeaefff17"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Tue May 30 13:01:53 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Tue May 30 13:01:53 2023 +0400"
      },
      "message": "appmanager-api: render, install\n"
    },
    {
      "commit": "23ef7f8e2581fd0a6d7e9278691f1a4d865d813f",
      "tree": "99366cfed41973c7d8f6e60aac9423565c6c9b3f",
      "parents": [
        "620caa83cc92b2c9522c4c24167771be7dbbe4e5"
      ],
      "author": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Fri May 26 11:57:48 2023 +0400"
      },
      "committer": {
        "name": "Giorgi Lekveishvili",
        "email": "lekva@gl-mbp-m1-max.local",
        "time": "Fri May 26 11:57:48 2023 +0400"
      },
      "message": "installer: env and app manager\n"
    },
    {
      "commit": "8aa73e80a629d5047730ff43a204811856f6e33e",
      "tree": "78d6755819f5c490d52991a3a5da9eb733d09d21",
      "parents": [
        "b696f19cfb56615cca89bdcf7c97b27e66bb99f5"
      ],
      "author": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Sat Jul 09 11:34:39 2022 +0400"
      },
      "committer": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Sat Jul 09 11:34:39 2022 +0400"
      },
      "message": "installer: clean up codebase\n\n* introduce helper soft package to work with SoftServe\n* move commands to cmd/\n"
    },
    {
      "commit": "9eacb1aa9c0779fbd1687d0ebb377ec5a141f3cc",
      "tree": "0a683d3b88e466b1c155719173bf10224cf293a2",
      "parents": [
        "875548da4bbb7a1fc0bbdb74e0d8ffd3359457ad"
      ],
      "author": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Sat May 21 13:57:19 2022 +0400"
      },
      "committer": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Sat May 21 13:57:19 2022 +0400"
      },
      "message": "bootstrap: fix service account permission issues\n"
    },
    {
      "commit": "716efb913e77382bc77d80239502f8491673b3ac",
      "tree": "be89bb0fe80647fa5213a7a54990f84c7b5aa8e3",
      "parents": [
        "a5d1eb695b43d1914dbfcf7ba7f53165146e6eb0"
      ],
      "author": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Sat May 07 23:08:58 2022 +0400"
      },
      "committer": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Sat May 07 23:13:47 2022 +0400"
      },
      "message": "core-installer: bootstrap logic\n\nInstalls soft-serve git server and fluxcd.\nFluxcd stores all system resource configurations on soft-serve.\n"
    },
    {
      "commit": "050609f66431dba5a0f8bdc53bced2e10c96ff12",
      "tree": "37732e563792d710be32f27f726ed928ccd95ade",
      "parents": [
        "08531a4f9f63ae422921a5543074c35754b7afe8"
      ],
      "author": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Wed Dec 29 15:51:40 2021 +0400"
      },
      "committer": {
        "name": "giolekva",
        "email": "giolekva@gmail.com",
        "time": "Wed Dec 29 15:51:40 2021 +0400"
      },
      "message": "installer cmd line tool\n"
    }
  ]
}
