)]}'
{"id":"depot~6832","triplet_id":"depot~canon~If8c0cdfc8470d4b337336257d9818aaa0d51110f","project":"depot","branch":"canon","attention_set":{},"removed_from_attention_set":{"1000034":{"account":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"last_update":"2022-10-08 10:59:45.000000000","reason":"Change was submitted"},"1000001":{"account":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"last_update":"2022-10-08 10:59:12.000000000","reason":"removed on reply"},"1000010":{"account":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"last_update":"2022-10-08 10:59:45.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"If8c0cdfc8470d4b337336257d9818aaa0d51110f","subject":"feat(nix/dependency-analyzer): find deps among a list of known drvs","status":"MERGED","created":"2022-10-01 20:48:19.000000000","updated":"2022-10-08 10:59:45.000000000","submitted":"2022-10-08 10:59:45.000000000","submitter":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"6834","meta_rev_id":"c13cdf7bfd827107eb7ffe13322f08bc92ab49ee","_number":6832,"virtual_id_number":6832,"owner":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"actions":{},"labels":{"Code-Review":{"approved":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"tag":"autogenerated:gerrit:merged","value":2,"date":"2022-10-08 10:59:45.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{"-2":"This shall not be merged","-1":"I would prefer this is not merged as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0},"Verified":{"approved":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"tag":"autogenerated:gerrit:merged","value":1,"date":"2022-10-08 10:59:45.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{"-1":"Fails"," 0":"No score","+1":"Verified"},"description":"","default_value":0},"Autosubmit":{"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{" 0":"Submit manually","+1":"Submit automatically"},"description":"","default_value":0,"optional":true},"All-Comments-Resolved":{"approved":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}]},"Conformant-Commit-Message":{"approved":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}]}},"removable_reviewers":[{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"}],"reviewers":{"REVIEWER":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2022-10-01 20:48:19.000000000","updated_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2022-10-01 20:48:31.000000000","updated_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2022-10-01 21:03:40.000000000","updated_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"reviewer":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"state":"REVIEWER"},{"updated":"2022-10-01 21:03:40.000000000","updated_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"reviewer":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"state":"REVIEWER"}],"messages":[{"id":"d0d13d9073f5c6e04b6ea1387fe660830b79a9d6","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-01 20:48:19.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"916c4b1ab477b35a3dc822a5969449c2ce6b7b85","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-01 20:48:19.000000000","message":"Patch Set 1:\n\nStarted build for patchset #1 on: https://buildkite.com/tvl/depot/builds/16884","accounts_in_message":[],"_revision_number":1},{"id":"0fe4cdcd21d3f05b55e7bfe0936745b996169d0e","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-01 20:48:31.000000000","message":"Patch Set 1: Verified-1\n\nBuild of patchset 1 failed: https://buildkite.com/tvl/depot/builds/16884","accounts_in_message":[],"_revision_number":1},{"id":"b2e338dbba785604b0053757faaa1ed72fce74ef","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-01 21:01:09.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.","accounts_in_message":[],"_revision_number":2},{"id":"4ed16a30e756a924eaf8c410481aaa565351a464","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-01 21:01:10.000000000","message":"Patch Set 2:\n\nStarted build for patchset #2 on: https://buildkite.com/tvl/depot/builds/16887","accounts_in_message":[],"_revision_number":2},{"id":"f34677fa698b45a8a7154d0d5c08ea981e2cc046","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-01 21:02:35.000000000","message":"Patch Set 2: Verified+1\n\nBuild of patchset 2 passed: https://buildkite.com/tvl/depot/builds/16887","accounts_in_message":[],"_revision_number":2},{"id":"d9cbfcb588f738448d24358fe821f7b5e94a62b5","tag":"autogenerated:gerrit:code-owners:addReviewer","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-01 21:03:40.000000000","message":"\u003cGERRIT_ACCOUNT_1000001\u003e, who was added as reviewer owns the following files:\n* nix/dependency-analyzer/default.nix\n* nix/dependency-analyzer/tests/default.nix\n\n\u003cGERRIT_ACCOUNT_1000010\u003e, who was added as reviewer owns the following files:\n* nix/dependency-analyzer/default.nix\n* nix/dependency-analyzer/tests/default.nix\n","accounts_in_message":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"}],"_revision_number":2},{"id":"66124da22825dc057dc6940ab66f2cfe23b7c0fa","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-10-06 09:30:57.000000000","message":"Patch Set 2: Code-Review+2\n\n(2 comments)\n\nBy voting Code-Review+2 the following files are now code-owner approved by \u003cGERRIT_ACCOUNT_1000001\u003e:\n* nix/dependency-analyzer/default.nix\n* nix/dependency-analyzer/tests/default.nix\n","accounts_in_message":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}],"_revision_number":2},{"id":"b2638bdab416025464889317a782cae276ace454","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-06 10:13:32.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"062efc859e94ec7ed4c5e0c37936caf66ef403db","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-06 10:13:34.000000000","message":"Patch Set 3:\n\nStarted build for patchset #3 on: https://buildkite.com/tvl/depot/builds/17043","accounts_in_message":[],"_revision_number":3},{"id":"35d61f5673871851c40f887740e1b67712113d2b","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-06 10:14:26.000000000","message":"Patch Set 3:\n\n(2 comments)","accounts_in_message":[],"_revision_number":3},{"id":"955ae7299f14bb79a37c621d7738a7652a9b870b","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-06 10:14:59.000000000","message":"Patch Set 3: Verified+1\n\nBuild of patchset 3 passed: https://buildkite.com/tvl/depot/builds/17043","accounts_in_message":[],"_revision_number":3},{"id":"aaa6654e51bd6edef03a20163fffd65cb9857f1c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-06 10:15:18.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"abdec5a95a4534c8bf90add2f6aa08aa7102cfbd","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-06 10:15:18.000000000","message":"Patch Set 4:\n\nStarted build for patchset #4 on: https://buildkite.com/tvl/depot/builds/17046","accounts_in_message":[],"_revision_number":4},{"id":"c743239bab25d1ac4872ec7ac824b544b17546a1","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-10-06 10:16:41.000000000","message":"Patch Set 4: Verified+1\n\nBuild of patchset 4 passed: https://buildkite.com/tvl/depot/builds/17046","accounts_in_message":[],"_revision_number":4},{"id":"282a0fa4ccda616dde11429ca6e24ca5aa6e4f77","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-10-08 10:59:12.000000000","message":"Patch Set 4: Code-Review+2\n\nBy voting Code-Review+2 the following files are now code-owner approved by \u003cGERRIT_ACCOUNT_1000001\u003e:\n* nix/dependency-analyzer/default.nix\n* nix/dependency-analyzer/examples/ci-targets.nix\n* nix/dependency-analyzer/examples/lisp.nix\n* nix/dependency-analyzer/tests/default.nix\n","accounts_in_message":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}],"_revision_number":4},{"id":"c13cdf7bfd827107eb7ffe13322f08bc92ab49ee","tag":"autogenerated:gerrit:merged","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2022-10-08 10:59:45.000000000","message":"Change has been successfully rebased and submitted as 57d5988b340ec1b799882f00323010d9435892ca","accounts_in_message":[],"_revision_number":5}],"current_revision_number":5,"current_revision":"57d5988b340ec1b799882f00323010d9435892ca","revisions":{"453f3252deb5078eee3778396deee230accde7c2":{"kind":"REWORK","_number":1,"created":"2022-10-01 20:48:19.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/32/6832/1","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/32/6832/1","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/32/6832/1"}}},"commit":{"parents":[{"commit":"5e097aa8e98f6c37e5a815b006f84424d29a20c6","subject":"feat(nix/stateMonad): simple Nix state monad implementation","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d5e097aa8e98f6c37e5a815b006f84424d29a20c6"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-09-26 21:46:52.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-10-01 20:48:09.000000000","tz":120},"subject":"feat(nix/dependency-analyzer): find deps among a list of known drvs","message":"feat(nix/dependency-analyzer): find deps among a list of known drvs\n\nThis was written with the same intention (and reuses a little of its\ncode) as cl/5060 and cl/5063: We want to be able to emit dependencies\nbetween //nix/buildkite pipeline steps, so that no agent is occupied\nwith waiting on locks for derivations built by a different agent.\n\nThis dependency information is already available to the Nix store\nimplementation (e.g. via `nix-store --query --references`) and can also\nbe obtained in the Nix language which is important, since the pipeline\nis generated at evaluation time. (Note: For Nix 2.3, you either need a\nstrong convention about how derivations expose their dependencies (which\nwe don\u0027t) or rely on store implementation internals (drv files).\nFor Nix 2.6 there is a better trick, but it also relies on the existence\nof drv files.)\n\nThe actual task can be formulated as follows: Given a set of\nderivations, calculate the the closest derivations also in the input\neach derivation depends on. (We call these (next) known dependencies.)\nThis is crucial because pipeline step often depend on each other only\nindirectly with any number of intermediate derivations. For cl/5064 I\ndetermined that 6 intermediate layers is quite common for dependencies\nthat are perceived to be “direct”.\n\nThis problem is solved as follows:\n\n1. Calculate the dependency graph of the combined dependency closure of\n   all input derivations. This is quite easy and fairly quick thanks to\n   the C++ implementation of builtins.genericClosure. One weak point of\n   the current implementation is that the function to determine the\n   direct derivation dependencies for Nix \u003c 2.6 is quite hacky.\n\n2. Take the graph from 1. and calculate a dependency graph that only\n   connects the known derivations of the input, but retains all\n   connections between them (minus intermediate nodes).\n\nIn practice the dependency graph is represented as an attribute set\nmapping derivation paths to a list of derivation paths it depends on.\nThe second step is performed by adding a second list of known derivation\npaths it depends on.\n\nThe main improvements over the previous concept (cl/5060 and cl/5063):\n\n* We only try to find the closest known dependencies in the dependency\n  graph whereas we would traverse emit dependencies for the entire\n  dependency closure.\n\n* We immediately store the calculation of the closest known dependency\n  in the dependency graph, even for intermediate nodes. This avoids\n  recalculating the connection (which was a big drawback of the previous\n  approach) and makes the calculation itself cheaper.\n\nYou can run `mg build //nix/dependency-analyzer:example` to build a\nvisualization of the internal dependencies between `depot.ci.targets` as\ndiscovered by dependency-analyzer.\n\nChange-Id: If8c0cdfc8470d4b337336257d9818aaa0d51110f\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d453f3252deb5078eee3778396deee230accde7c2"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d453f3252deb5078eee3778396deee230accde7c2"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"5e097aa8e98f6c37e5a815b006f84424d29a20c6","is_merged_in_target_branch":true,"change_id":"I47cf3c644a96952c70276c9fa4cb3190b1c1e027","change_number":6828,"patch_set_number":2,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"d19b6af6fffe7289fb163e3a23df4a5e0ca0b955":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2022-10-01 21:01:09.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/32/6832/2","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/32/6832/2","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/32/6832/2"}}},"commit":{"parents":[{"commit":"55b772dd20c1413906068c62e458b300c3e84780","subject":"feat(ops/pipelines): allow accessing the nix store","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d55b772dd20c1413906068c62e458b300c3e84780"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-09-26 21:46:52.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-10-01 21:01:04.000000000","tz":120},"subject":"feat(nix/dependency-analyzer): find deps among a list of known drvs","message":"feat(nix/dependency-analyzer): find deps among a list of known drvs\n\nThis was written with the same intention (and reuses a little of its\ncode) as cl/5060 and cl/5063: We want to be able to emit dependencies\nbetween //nix/buildkite pipeline steps, so that no agent is occupied\nwith waiting on locks for derivations built by a different agent.\n\nThis dependency information is already available to the Nix store\nimplementation (e.g. via `nix-store --query --references`) and can also\nbe obtained in the Nix language which is important, since the pipeline\nis generated at evaluation time. (Note: For Nix 2.3, you either need a\nstrong convention about how derivations expose their dependencies (which\nwe don\u0027t) or rely on store implementation internals (drv files).\nFor Nix 2.6 there is a better trick, but it also relies on the existence\nof drv files.)\n\nThe actual task can be formulated as follows: Given a set of\nderivations, calculate the the closest derivations also in the input\neach derivation depends on. (We call these (next) known dependencies.)\nThis is crucial because pipeline step often depend on each other only\nindirectly with any number of intermediate derivations. For cl/5064 I\ndetermined that 6 intermediate layers is quite common for dependencies\nthat are perceived to be “direct”.\n\nThis problem is solved as follows:\n\n1. Calculate the dependency graph of the combined dependency closure of\n   all input derivations. This is quite easy and fairly quick thanks to\n   the C++ implementation of builtins.genericClosure. One weak point of\n   the current implementation is that the function to determine the\n   direct derivation dependencies for Nix \u003c 2.6 is quite hacky.\n\n2. Take the graph from 1. and calculate a dependency graph that only\n   connects the known derivations of the input, but retains all\n   connections between them (minus intermediate nodes).\n\nIn practice the dependency graph is represented as an attribute set\nmapping derivation paths to a list of derivation paths it depends on.\nThe second step is performed by adding a second list of known derivation\npaths it depends on.\n\nThe main improvements over the previous concept (cl/5060 and cl/5063):\n\n* We only try to find the closest known dependencies in the dependency\n  graph whereas we would traverse emit dependencies for the entire\n  dependency closure.\n\n* We immediately store the calculation of the closest known dependency\n  in the dependency graph, even for intermediate nodes. This avoids\n  recalculating the connection (which was a big drawback of the previous\n  approach) and makes the calculation itself cheaper.\n\nYou can run `mg build //nix/dependency-analyzer:example` to build a\nvisualization of the internal dependencies between `depot.ci.targets` as\ndiscovered by dependency-analyzer.\n\nChange-Id: If8c0cdfc8470d4b337336257d9818aaa0d51110f\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003dd19b6af6fffe7289fb163e3a23df4a5e0ca0b955"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003dd19b6af6fffe7289fb163e3a23df4a5e0ca0b955"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"55b772dd20c1413906068c62e458b300c3e84780","is_merged_in_target_branch":false,"change_id":"I33a7de83ef0ee20a7076690329d62f6caffffe5f","change_number":6835,"patch_set_number":1,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"6dede5545f55239d393c63cad571a7b542044321":{"kind":"REWORK","_number":3,"created":"2022-10-06 10:13:32.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/32/6832/3","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/32/6832/3","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/32/6832/3"}}},"commit":{"parents":[{"commit":"4f107f8d2572b947a3989a2f2f97ef6b4b5470a7","subject":"feat(ops/pipelines): allow accessing the nix store","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d4f107f8d2572b947a3989a2f2f97ef6b4b5470a7"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-09-26 21:46:52.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-10-06 10:13:21.000000000","tz":120},"subject":"feat(nix/dependency-analyzer): find deps among a list of known drvs","message":"feat(nix/dependency-analyzer): find deps among a list of known drvs\n\nThis was written with the same intention (and reuses a little of its\ncode) as cl/5060 and cl/5063: We want to be able to emit dependencies\nbetween //nix/buildkite pipeline steps, so that no agent is occupied\nwith waiting on locks for derivations built by a different agent.\n\nThis dependency information is already available to the Nix store\nimplementation (e.g. via `nix-store --query --references`) and can also\nbe obtained in the Nix language which is important, since the pipeline\nis generated at evaluation time. (Note: For Nix 2.3, you either need a\nstrong convention about how derivations expose their dependencies (which\nwe don\u0027t) or rely on store implementation internals (drv files).\nFor Nix 2.6 there is a better trick, but it also relies on the existence\nof drv files.)\n\nThe actual task can be formulated as follows: Given a set of\nderivations, calculate the the closest derivations also in the input\neach derivation depends on. (We call these (next) known dependencies.)\nThis is crucial because pipeline step often depend on each other only\nindirectly with any number of intermediate derivations. For cl/5064 I\ndetermined that 6 intermediate layers is quite common for dependencies\nthat are perceived to be “direct”.\n\nThis problem is solved as follows:\n\n1. Calculate the dependency graph of the combined dependency closure of\n   all input derivations. This is quite easy and fairly quick thanks to\n   the C++ implementation of builtins.genericClosure. One weak point of\n   the current implementation is that the function to determine the\n   direct derivation dependencies for Nix \u003c 2.6 is quite hacky.\n\n2. Take the graph from 1. and calculate a dependency graph that only\n   connects the known derivations of the input, but retains all\n   connections between them (minus intermediate nodes).\n\nIn practice the dependency graph is represented as an attribute set\nmapping derivation paths to a list of derivation paths it depends on.\nThe second step is performed by adding a second list of known derivation\npaths it depends on.\n\nThe main improvements over the previous concept (cl/5060 and cl/5063):\n\n* We only try to find the closest known dependencies in the dependency\n  graph whereas we would traverse emit dependencies for the entire\n  dependency closure.\n\n* We immediately store the calculation of the closest known dependency\n  in the dependency graph, even for intermediate nodes. This avoids\n  recalculating the connection (which was a big drawback of the previous\n  approach) and makes the calculation itself cheaper.\n\nYou can run `mg build //nix/dependency-analyzer:example` to build a\nvisualization of the internal dependencies between `depot.ci.targets` as\ndiscovered by dependency-analyzer.\n\nChange-Id: If8c0cdfc8470d4b337336257d9818aaa0d51110f\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d6dede5545f55239d393c63cad571a7b542044321"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d6dede5545f55239d393c63cad571a7b542044321"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"4f107f8d2572b947a3989a2f2f97ef6b4b5470a7","is_merged_in_target_branch":false,"change_id":"I33a7de83ef0ee20a7076690329d62f6caffffe5f","change_number":6835,"patch_set_number":2,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"733b4c6b3c4375881be44c56839e4dcb0af23e2e":{"kind":"REWORK","_number":4,"created":"2022-10-06 10:15:18.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/32/6832/4","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/32/6832/4","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/32/6832/4"}}},"commit":{"parents":[{"commit":"4f107f8d2572b947a3989a2f2f97ef6b4b5470a7","subject":"feat(ops/pipelines): allow accessing the nix store","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d4f107f8d2572b947a3989a2f2f97ef6b4b5470a7"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-09-26 21:46:52.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-10-06 10:15:14.000000000","tz":120},"subject":"feat(nix/dependency-analyzer): find deps among a list of known drvs","message":"feat(nix/dependency-analyzer): find deps among a list of known drvs\n\nThis was written with the same intention (and reuses a little of its\ncode) as cl/5060 and cl/5063: We want to be able to emit dependencies\nbetween //nix/buildkite pipeline steps, so that no agent is occupied\nwith waiting on locks for derivations built by a different agent.\n\nThis dependency information is already available to the Nix store\nimplementation (e.g. via `nix-store --query --references`) and can also\nbe obtained in the Nix language which is important, since the pipeline\nis generated at evaluation time. (Note: For Nix 2.3, you either need a\nstrong convention about how derivations expose their dependencies (which\nwe don\u0027t) or rely on store implementation internals (drv files).\nFor Nix 2.6 there is a better trick, but it also relies on the existence\nof drv files.)\n\nThe actual task can be formulated as follows: Given a set of\nderivations, calculate the the closest derivations also in the input\neach derivation depends on. (We call these (next) known dependencies.)\nThis is crucial because pipeline step often depend on each other only\nindirectly with any number of intermediate derivations. For cl/5064 I\ndetermined that 6 intermediate layers is quite common for dependencies\nthat are perceived to be “direct”.\n\nThis problem is solved as follows:\n\n1. Calculate the dependency graph of the combined dependency closure of\n   all input derivations. This is quite easy and fairly quick thanks to\n   the C++ implementation of builtins.genericClosure. One weak point of\n   the current implementation is that the function to determine the\n   direct derivation dependencies for Nix \u003c 2.6 is quite hacky.\n\n2. Take the graph from 1. and calculate a dependency graph that only\n   connects the known derivations of the input, but retains all\n   connections between them (minus intermediate nodes).\n\nIn practice the dependency graph is represented as an attribute set\nmapping derivation paths to a list of derivation paths it depends on.\nThe second step is performed by adding a second list of known derivation\npaths it depends on.\n\nThe main improvements over the previous concept (cl/5060 and cl/5063):\n\n* We only try to find the closest known dependencies in the dependency\n  graph whereas we would traverse emit dependencies for the entire\n  dependency closure.\n\n* We immediately store the calculation of the closest known dependency\n  in the dependency graph, even for intermediate nodes. This avoids\n  recalculating the connection (which was a big drawback of the previous\n  approach) and makes the calculation itself cheaper.\n\nYou can run `mg build //nix/dependency-analyzer:example` to build a\nvisualization of the internal dependencies between `depot.ci.targets` as\ndiscovered by dependency-analyzer.\n\nChange-Id: If8c0cdfc8470d4b337336257d9818aaa0d51110f\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d733b4c6b3c4375881be44c56839e4dcb0af23e2e"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d733b4c6b3c4375881be44c56839e4dcb0af23e2e"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"4f107f8d2572b947a3989a2f2f97ef6b4b5470a7","is_merged_in_target_branch":false,"change_id":"I33a7de83ef0ee20a7076690329d62f6caffffe5f","change_number":6835,"patch_set_number":2,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"57d5988b340ec1b799882f00323010d9435892ca":{"kind":"REWORK","_number":5,"created":"2022-10-08 10:59:45.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/32/6832/5","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/32/6832/5","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/32/6832/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/32/6832/5"}}},"commit":{"parents":[{"commit":"ca3bd5c7cabf517f23234501928912d55fef45b3","subject":"feat(ops/pipelines): allow accessing the nix store","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003dca3bd5c7cabf517f23234501928912d55fef45b3"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-09-26 21:46:52.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2022-10-08 10:59:45.000000000","tz":0},"subject":"feat(nix/dependency-analyzer): find deps among a list of known drvs","message":"feat(nix/dependency-analyzer): find deps among a list of known drvs\n\nThis was written with the same intention (and reuses a little of its\ncode) as cl/5060 and cl/5063: We want to be able to emit dependencies\nbetween //nix/buildkite pipeline steps, so that no agent is occupied\nwith waiting on locks for derivations built by a different agent.\n\nThis dependency information is already available to the Nix store\nimplementation (e.g. via `nix-store --query --references`) and can also\nbe obtained in the Nix language which is important, since the pipeline\nis generated at evaluation time. (Note: For Nix 2.3, you either need a\nstrong convention about how derivations expose their dependencies (which\nwe don\u0027t) or rely on store implementation internals (drv files).\nFor Nix 2.6 there is a better trick, but it also relies on the existence\nof drv files.)\n\nThe actual task can be formulated as follows: Given a set of\nderivations, calculate the the closest derivations also in the input\neach derivation depends on. (We call these (next) known dependencies.)\nThis is crucial because pipeline step often depend on each other only\nindirectly with any number of intermediate derivations. For cl/5064 I\ndetermined that 6 intermediate layers is quite common for dependencies\nthat are perceived to be “direct”.\n\nThis problem is solved as follows:\n\n1. Calculate the dependency graph of the combined dependency closure of\n   all input derivations. This is quite easy and fairly quick thanks to\n   the C++ implementation of builtins.genericClosure. One weak point of\n   the current implementation is that the function to determine the\n   direct derivation dependencies for Nix \u003c 2.6 is quite hacky.\n\n2. Take the graph from 1. and calculate a dependency graph that only\n   connects the known derivations of the input, but retains all\n   connections between them (minus intermediate nodes).\n\nIn practice the dependency graph is represented as an attribute set\nmapping derivation paths to a list of derivation paths it depends on.\nThe second step is performed by adding a second list of known derivation\npaths it depends on.\n\nThe main improvements over the previous concept (cl/5060 and cl/5063):\n\n* We only try to find the closest known dependencies in the dependency\n  graph whereas we would traverse emit dependencies for the entire\n  dependency closure.\n\n* We immediately store the calculation of the closest known dependency\n  in the dependency graph, even for intermediate nodes. This avoids\n  recalculating the connection (which was a big drawback of the previous\n  approach) and makes the calculation itself cheaper.\n\nYou can run `mg build //nix/dependency-analyzer:example` to build a\nvisualization of the internal dependencies between `depot.ci.targets` as\ndiscovered by dependency-analyzer.\n\nChange-Id: If8c0cdfc8470d4b337336257d9818aaa0d51110f\nReviewed-on: https://cl.tvl.fyi/c/depot/+/6832\nTested-by: BuildkiteCI\nReviewed-by: tazjin \u003ctazjin@tvl.su\u003e\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d57d5988b340ec1b799882f00323010d9435892ca"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d57d5988b340ec1b799882f00323010d9435892ca"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"ca3bd5c7cabf517f23234501928912d55fef45b3","is_merged_in_target_branch":true,"change_id":"I33a7de83ef0ee20a7076690329d62f6caffffe5f","change_number":6835,"patch_set_number":3,"change_status":"MERGED"}],"branch":"refs/heads/canon","description":"Rebase"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~PrologRule","status":"CLOSED","labels":[{"label":"Autosubmit","status":"MAY"},{"label":"Conformant-Commit-Message","status":"OK","applied_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}},{"label":"All-Comments-Resolved","status":"OK","applied_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}},{"label":"Verified","status":"OK","applied_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"OK","applied_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}}]},{"rule_name":"Code-Owners","status":"CLOSED"}],"submit_requirements":[{"name":"All-Comments-Resolved","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:All-Comments-Resolved\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:All-Comments-Resolved\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Code-Owners","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"rule:Code-Owners","fulfilled":true,"status":"PASS","passing_atoms":["Code-Owners"],"failing_atoms":[]}},{"name":"Conformant-Commit-Message","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Conformant-Commit-Message\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Conformant-Commit-Message\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dgerrit~PrologRule"],"failing_atoms":[]}}]}
