{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":25163509,"defaultBranch":"master","name":"ganeti","ownerLogin":"ganeti","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-10-13T15:03:51.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/8798225?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1684841346.75651","currentOid":""},"activityList":{"items":[{"before":"a28c51a87ccbeca80b3b48d89b9d0d39fba5c286","after":"52f7d5b21cff4b910abac092fd1bf04242a924f8","ref":"refs/heads/master","pushedAt":"2024-05-02T16:17:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"saschalucas","name":null,"path":"/saschalucas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8359898?s=80&v=4"},"commit":{"message":"drop distutils\n\ndistutils was only used to check if the pyopenssl is greater than 0.7.\npackageing.version.parse is now used for the version comparison.","shortMessageHtmlLink":"drop distutils"}},{"before":"a881f5117d89fed9cfa038588948fc54b07f91ce","after":"a28c51a87ccbeca80b3b48d89b9d0d39fba5c286","ref":"refs/heads/master","pushedAt":"2024-04-12T16:00:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"Rework documentation\n\nThis reworks large parts of the documentation:\n\n- drop dated/wrong information\n- update and enhance installation guide\n- extend the administration guide\n- remove duplicate content\n- restructure index page\n\nSigned-off-by: Rudolph Bott ","shortMessageHtmlLink":"Rework documentation"}},{"before":"9cd307ee20a46e61949bb752d4f4afcdd75d55c1","after":"a881f5117d89fed9cfa038588948fc54b07f91ce","ref":"refs/heads/master","pushedAt":"2024-04-03T16:12:24.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"saschalucas","name":null,"path":"/saschalucas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8359898?s=80&v=4"},"commit":{"message":"switch to debian bookwork image","shortMessageHtmlLink":"switch to debian bookwork image"}},{"before":"8bb2178b97105b9bea4a79600991dc0018f87a0c","after":"9cd307ee20a46e61949bb752d4f4afcdd75d55c1","ref":"refs/heads/master","pushedAt":"2024-04-03T16:08:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"saschalucas","name":null,"path":"/saschalucas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8359898?s=80&v=4"},"commit":{"message":"use new 'unittest.mock' from standard library\n\ninstead of old 'mock' module","shortMessageHtmlLink":"use new 'unittest.mock' from standard library"}},{"before":"872f6713f2fdf13863b4fbe7b0f2c868a58fb1c7","after":"8bb2178b97105b9bea4a79600991dc0018f87a0c","ref":"refs/heads/master","pushedAt":"2024-03-15T14:48:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"Fix flaky GetCmdline() tests in Github Action containers\n\nThe test for utils.GetCmdline() sometimes returns an error because the\nprocess started by subprocess.popen() does not _yet_ return a valid\ncommand line via /proc/$pid/cmdline. This does only seem to happen in\ncontainers running in the Github Actions environment as I was not able\nto reproduce this anywhere else. The \"fix\" is to wait for one second so\nthings can settle.\n\nSigned-off-by: Rudolph Bott ","shortMessageHtmlLink":"Fix flaky GetCmdline() tests in Github Action containers"}},{"before":"dfce61ed7f3f1c0dcda9a2b0070b79b4b6c7b85f","after":"872f6713f2fdf13863b4fbe7b0f2c868a58fb1c7","ref":"refs/heads/master","pushedAt":"2024-03-14T23:21:21.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"saschalucas","name":null,"path":"/saschalucas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8359898?s=80&v=4"},"commit":{"message":"master-ip-setup: set master ip as deprecated\n\nThis way it is not used as a source address by the node.","shortMessageHtmlLink":"master-ip-setup: set master ip as deprecated"}},{"before":"f22b5fa1e9a46513e02823654beee02b86139d4d","after":"dfce61ed7f3f1c0dcda9a2b0070b79b4b6c7b85f","ref":"refs/heads/master","pushedAt":"2023-12-18T19:24:16.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"Drop testing against bullseye, add bookworm instead\n\nThe ci-images have been updated to provide Debian Bookworm as stable\nenvironment while the `debian-testing` image has moved on to Trixie.\nThis commit updates the Github Actions workflow accordingly.\n\nSigned-off-by: Rudolph Bott ","shortMessageHtmlLink":"Drop testing against bullseye, add bookworm instead"}},{"before":"dfce61ed7f3f1c0dcda9a2b0070b79b4b6c7b85f","after":"f22b5fa1e9a46513e02823654beee02b86139d4d","ref":"refs/heads/master","pushedAt":"2023-12-18T19:22:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"blah","shortMessageHtmlLink":"blah"}},{"before":"68dc7eddc277f3e84ac3d63b80a151169ff03a2d","after":"dfce61ed7f3f1c0dcda9a2b0070b79b4b6c7b85f","ref":"refs/heads/master","pushedAt":"2023-12-18T16:56:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"Drop testing against bullseye, add bookworm instead\n\nThe ci-images have been updated to provide Debian Bookworm as stable\nenvironment while the `debian-testing` image has moved on to Trixie.\nThis commit updates the Github Actions workflow accordingly.\n\nSigned-off-by: Rudolph Bott ","shortMessageHtmlLink":"Drop testing against bullseye, add bookworm instead"}},{"before":"456ea285a7583183c2c8e5bcffe9006ec8a9d658","after":"68dc7eddc277f3e84ac3d63b80a151169ff03a2d","ref":"refs/heads/master","pushedAt":"2023-09-25T16:07:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"saschalucas","name":null,"path":"/saschalucas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8359898?s=80&v=4"},"commit":{"message":"kvm_extra supports now spaces (#1713)\n\nThis commit replaces the simple string split with the Python integrated\r\nmethod shlex.split, which is made to split strings like in the shell.\r\n\r\nThis has the result that quoted strings with spaces are no longer split.","shortMessageHtmlLink":"kvm_extra supports now spaces (#1713)"}},{"before":"ea55205d0cf884d455095fb9bfd320c8d12ca827","after":"456ea285a7583183c2c8e5bcffe9006ec8a9d658","ref":"refs/heads/master","pushedAt":"2023-05-28T10:17:36.912Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"Add warning about setting the PVID as instance vlan\n\nAs discussed in #1670 this commit adds a warning to not set the PVID\n(port vlan ID) as an instance VLAN ID. Network equipment might drop\nframes which explicitly have the VLAN ID set which is configured as the\ndefault VLAN ID/port VLAN ID on the network side.\n\nSigned-off-by: Rudolph Bott ","shortMessageHtmlLink":"Add warning about setting the PVID as instance vlan"}},{"before":"8dfab3583fb5e51242db26783621285b6369cc94","after":"ea55205d0cf884d455095fb9bfd320c8d12ca827","ref":"refs/heads/master","pushedAt":"2023-05-25T14:46:42.607Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"move-instance: allow users to empty out NIC parameters\n\nIn #1696, I ended up in a situation where the instance I'm moving had\nboth \"network\" and \"link\" parameters. That seems like a natural\nconfiguration in our cluster, but something move-instance really\ndoesn't like, as it's passing this verbatim to create-instance which\nnaturally freaks out on the contradictory arguments.\n\nInstead of just crashing, detect empty parameters (`not v` is a\nshortcut here) and null them out. This will result in those parameters\nbeing passed as empty to create-instance, or to be more accurate, not\nbe passed at all.\n\nI've been able to fix the crash in #1696 by passing `--net\n0:ip=pool,network=gnt-dal-01,mode=,link=` to move-instance with this\npatch.\n\nI'm not sure it's the right approach though. I'd much rather *not*\nhave to pass `--net` at all, as I actually want to move multiple\ninstances across clusters, and that seems incompatible with `--net`\nfor some reason I cannot currently fathom (but which is possibly\nrelated to this problem).","shortMessageHtmlLink":"move-instance: allow users to empty out NIC parameters"}},{"before":"5e0f0f04c3045036d7d8279061379415a91b4390","after":"8dfab3583fb5e51242db26783621285b6369cc94","ref":"refs/heads/master","pushedAt":"2023-05-25T14:41:24.381Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"optimize move-instance: do not wait for DRBD sync\n\nThis is debatable and a change from the default in create-instance,\nbut I think it makes sense. We're already creating a copy of the VM in\nmove-instance, if `keep_source_instance` is set, of course, but\nalso *while* the migration is happening, in any case. So we shouldn't\nworry too much about the lack of DRBD consistency during the move.\n\nOtherwise this takes twice the time it could normally take, as the\nmove needs to wait for the entire disk to sync. In my tests, it turns\na 17 minutes migration into a ~7 minutes migration, improving\nperformance by a twofold.\n\nNaturally, this could also be made configurable, but I am not sure we\nwant to exactly copy all of the instance creation parameters here, and\nthis one particularly feels like a default that could be improved.\n\nJust like `keep_source_instance` used to be hardcoded, let's start\nwith a hardcoded value and switch it to configurable if people\nactually need to.\n\nCloses: #1702","shortMessageHtmlLink":"optimize move-instance: do not wait for DRBD sync"}},{"before":"093e39caca82c32b9d188bf7db6950a0019bad05","after":"5e0f0f04c3045036d7d8279061379415a91b4390","ref":"refs/heads/master","pushedAt":"2023-04-20T19:19:36.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"saschalucas","name":null,"path":"/saschalucas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8359898?s=80&v=4"},"commit":{"message":"Merge pull request #1704 from saschalucas/watcher_enhancements\n\ncherry-pick watcher enhancements from attic branch","shortMessageHtmlLink":"Merge pull request #1704 from saschalucas/watcher_enhancements"}},{"before":"b966c23c1db63996690ae56fa5c8d1b5fa9505e2","after":"093e39caca82c32b9d188bf7db6950a0019bad05","ref":"refs/heads/master","pushedAt":"2023-04-07T13:00:35.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"daemon: drop event scheduler\n\nThe main loop event scheduler was introduced with e2be81cf2 (Implement\ntimers in confd, 2009-08-23) to support timed events for ganeti-confd\n(at the time a Python daemon). Since the conversion of confd to Haskell,\nthis asyncore-specific code has been unused and it makes sense to remove\nit as asyncore will be dropped in Python 3.12. Drop all dead code\ntogether with the relevant tests.\n\nSigned-off-by: Apollon Oikonomopoulos ","shortMessageHtmlLink":"daemon: drop event scheduler"}},{"before":null,"after":"e16097b226a7ebee75d434cd545c5a219b0f8478","ref":"refs/heads/deprecation/asyncore","pushedAt":"2023-03-21T10:01:36.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"daemon: drop event scheduler\n\nThe main loop event scheduler was introduced with e2be81cf2 (Implement\ntimers in confd, 2009-08-23) to support timed events for ganeti-confd\n(at the time a Python daemon). Since the conversion of confd to Haskell,\nthis asyncore-specific code has been unused and it makes sense to remove\nit as asyncore will be dropped in Python 3.12. Drop all dead code\ntogether with the relevant tests.\n\nSigned-off-by: Apollon Oikonomopoulos ","shortMessageHtmlLink":"daemon: drop event scheduler"}},{"before":"114e59fcc9d4a7c82618569f5d6b7389a0f80123","after":"b966c23c1db63996690ae56fa5c8d1b5fa9505e2","ref":"refs/heads/master","pushedAt":"2023-03-17T23:38:42.928Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rbott","name":"Rudolph Bott","path":"/rbott","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/13122740?s=80&v=4"},"commit":{"message":"move-instance: fix crash in Python 3\n\nAny move-instance call without --opportunistic-tries currently crashes\nwith this:\n\n File \"/usr/lib/ganeti/tools/move-instance\", line 1132, in \n main()\n File \"/usr/share/ganeti/3.0/ganeti/rapi/client.py\", line 274, in wrapper\n return fn(*args, **kwargs)\n File \"/usr/lib/ganeti/tools/move-instance\", line 1069, in main\n CheckOptions(parser, options, args)\n File \"/usr/lib/ganeti/tools/move-instance\", line 1007, in CheckOptions\n _CheckAllocatorOptions(parser, options)\n File \"/usr/lib/ganeti/tools/move-instance\", line 941, in _CheckAllocatorOptions\n if not options.iallocator and (options.opportunistic_tries > 0):\nTypeError: '>' not supported between instances of 'NoneType' and 'int'\n\nIt is said this was a problem related to the 2to3 migration, but I\nhaven't investigated fully.\n\nSee: #1696","shortMessageHtmlLink":"move-instance: fix crash in Python 3"}},{"before":"e77dcc47a893ecea30ed0e9e998eb21bd6f44760","after":null,"ref":"refs/heads/fix/procps_negative_uid","pushedAt":"2023-03-08T10:25:28.364Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"}},{"before":"c295246da01504b68c287be73f5429e2ae38d016","after":null,"ref":"refs/heads/fix/ghc_9_lens_5","pushedAt":"2023-03-08T10:25:25.294Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"}},{"before":"5e302a9bfd0d3c87a97cdbfc9d529d408d73b05f","after":null,"ref":"refs/heads/compat/python_3.12","pushedAt":"2023-03-08T10:25:04.488Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"}},{"before":"9cd67e6a81c66ed326d68ea8c3241d14eea6550b","after":"114e59fcc9d4a7c82618569f5d6b7389a0f80123","ref":"refs/heads/master","pushedAt":"2023-03-07T20:56:06.673Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Convert custom condition methods to snake_case\n\nSingleNotifyPipeCondition and PipeCondition are designed to be\nAPI-compatible with threading.Condition. Since the rest of the code now\nexpects threading.Condition to respond to notify_all rather than\nnotifyAll, rename the latter in the custom condition code.","shortMessageHtmlLink":"Convert custom condition methods to snake_case"}},{"before":"03c845ec660b164e03e10359aae43ac5f902463e","after":"5e302a9bfd0d3c87a97cdbfc9d529d408d73b05f","ref":"refs/heads/compat/python_3.12","pushedAt":"2023-03-07T11:58:11.971Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Convert custom condition methods to snake_case\n\nSingleNotifyPipeCondition and PipeCondition are designed to be\nAPI-compatible with threading.Condition. Since the rest of the code now\nexpects threading.Condition to respond to notify_all rather than\nnotifyAll, rename the latter in the custom condition code.","shortMessageHtmlLink":"Convert custom condition methods to snake_case"}},{"before":"ed8344030029dc154d950b1ae828a36dca01562f","after":"03c845ec660b164e03e10359aae43ac5f902463e","ref":"refs/heads/compat/python_3.12","pushedAt":"2023-03-07T11:55:18.735Z","pushType":"push","commitsCount":1,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Convert custom condition methods to snake_case\n\nSingleNotifyPipeCondition and PipeCondition are designed to be\nAPI-compatible with threading.Condition. Since the rest of the code now\nexpects threading.Condition to respond to notify_all rather than\nnotifyAll, rename the latter in the custom condition code.","shortMessageHtmlLink":"Convert custom condition methods to snake_case"}},{"before":"6000f5a6ffe6e29f76d85198148e531a55087131","after":"ed8344030029dc154d950b1ae828a36dca01562f","ref":"refs/heads/compat/python_3.12","pushedAt":"2023-03-07T11:25:05.604Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Replace calls to deprecated threading methods\n\nPython 3.10 has deprecated a bunch of camelCase threading methods in\nfavor of snake_case methods and getter/setter attributes. The new\nmethods/attributes have existed since Python 2.6, so switching does not\nbreak backward compatibility.\n\nThis is part of #1687.","shortMessageHtmlLink":"Replace calls to deprecated threading methods"}},{"before":null,"after":"6000f5a6ffe6e29f76d85198148e531a55087131","ref":"refs/heads/compat/python_3.12","pushedAt":"2023-03-07T11:24:11.396Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Replace calls to deprecated threading methods\n\nPython 3.10 has deprecated a bunch of camelCase threading methods in\nfavor of snake_case methods and getter/setter attributes. The new\nmethods/attributes have existed since Python 2.6, so switching does not\nbreak backward compatibility.\n\nThis is part of #1687.","shortMessageHtmlLink":"Replace calls to deprecated threading methods"}},{"before":"feab8faa8fe055c89205497e4f277ae4c7b8caad","after":"9cd67e6a81c66ed326d68ea8c3241d14eea6550b","ref":"refs/heads/master","pushedAt":"2023-03-07T09:44:50.407Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"uidpool_unittest: avoid using negative UIDs\n\nThe uidpool unittests long relied on the fact that pgrep would accept\n\"-1\" as a valid uid and in turn would match nothing. As of propcs 4.0.3\nhowever, pgrep will error out when passed a negative uid, thus breaking\nthe tests.\n\nWork around this by using a valid UID, but one that is unlikely to be\nused in real systems: on most systems, SUB_UID_MAX which is the highest\nuid expected to be in regular use, is set to 600100000. Picking 2^30 +\n42 looks like a reasonably safe choice.\n\nThis fixes #1691.\n\nSigned-off-by: Apollon Oikonomopoulos ","shortMessageHtmlLink":"uidpool_unittest: avoid using negative UIDs"}},{"before":"a21a557f645f567d3c323b2a8b9e5221f83cacc8","after":"e77dcc47a893ecea30ed0e9e998eb21bd6f44760","ref":"refs/heads/fix/procps_negative_uid","pushedAt":"2023-03-07T09:25:05.264Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"uidpool_unittest: avoid using negative UIDs\n\nThe uidpool unittests long relied on the fact that pgrep would accept\n\"-1\" as a valid uid and in turn would match nothing. As of propcs 4.0.3\nhowever, pgrep will error out when passed a negative uid, thus breaking\nthe tests.\n\nWork around this by using a valid UID, but one that is unlikely to be\nused in real systems: on most systems, SUB_UID_MAX which is the highest\nuid expected to be in regular use, is set to 600100000. Picking 2^30 +\n42 looks like a reasonably safe choice.\n\nThis fixes #1691.\n\nSigned-off-by: Apollon Oikonomopoulos ","shortMessageHtmlLink":"uidpool_unittest: avoid using negative UIDs"}},{"before":"4f8d61ea0101721eae1c6f43be8430d819e5e611","after":"feab8faa8fe055c89205497e4f277ae4c7b8caad","ref":"refs/heads/master","pushedAt":"2023-03-07T09:23:55.562Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Reorder Arbitrary instance definitions\n\nCiting the GHC 9.0.1 changelog[1]:\n\n Breaking change: Template Haskell splices now act as separation points\n between constraint solving passes. It is no longer possible to use an\n instance of a class before a splice and define that instance after a\n splice. For example, this code now reports a missing instance for C\n Bool:\n\n ```\n class C a where foo :: a\n bar :: Bool\n bar = foo\n $(return [])\n instance C Bool where foo = True\n ```\n\nIn other words, code order matters in Template Haskell files, which\nbreaks the Haskell test build with GHC >= 9.0.1. Fix this by reordering\nvarious Arbitrary instances so that they are defined before being used.\n\nAlso the Arbitrary instance for IAllocatorParams was silently acting as\na generic instance for (Container JSValue), providing instances for\nDiskParams, HypervisorState and DiskState as well. Change the Arbitrary\ninstance declaration to Arbitrary (Container JSValue) to better reflect\nits generic purpose.\n\n[1] https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/9.0.1-notes.html#highlights\n\nSigned-off-by: Apollon Oikonomopoulos ","shortMessageHtmlLink":"Reorder Arbitrary instance definitions"}},{"before":"b1350ba346b865b68dd0a1239737b6e11e76e822","after":"c295246da01504b68c287be73f5429e2ae38d016","ref":"refs/heads/fix/ghc_9_lens_5","pushedAt":"2023-03-07T09:06:27.513Z","pushType":"push","commitsCount":1,"pusher":{"login":"apoikos","name":"Apollon Oikonomopoulos","path":"/apoikos","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1160889?s=80&v=4"},"commit":{"message":"Reorder Arbitrary instance definitions\n\nCiting the GHC 9.0.1 changelog[1]:\n\n Breaking change: Template Haskell splices now act as separation points\n between constraint solving passes. It is no longer possible to use an\n instance of a class before a splice and define that instance after a\n splice. For example, this code now reports a missing instance for C\n Bool:\n\n ```\n class C a where foo :: a\n bar :: Bool\n bar = foo\n $(return [])\n instance C Bool where foo = True\n ```\n\nIn other words, code order matters in Template Haskell files, which\nbreaks the Haskell test build with GHC >= 9.0.1. Fix this by reordering\nvarious Arbitrary instances so that they are defined before being used.\n\nAlso the Arbitrary instance for IAllocatorParams was silently acting as\na generic instance for (Container JSValue), providing instances for\nDiskParams, HypervisorState and DiskState as well. Change the Arbitrary\ninstance declaration to Arbitrary (Container JSValue) to better reflect\nits generic purpose.\n\n[1] https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/9.0.1-notes.html#highlights\n\nSigned-off-by: Apollon Oikonomopoulos ","shortMessageHtmlLink":"Reorder Arbitrary instance definitions"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEP_7xJwA","startCursor":null,"endCursor":null}},"title":"Activity ยท ganeti/ganeti"}