diff --git a/nix/buildkite/default.nix b/nix/buildkite/default.nix index b7715e902..cb40fb962 100644 --- a/nix/buildkite/default.nix +++ b/nix/buildkite/default.nix @@ -29,6 +29,23 @@ let inherit (depot.nix.readTree) mkLabel; in rec { + # Create a unique key for the buildkite pipeline based on the given derivation + # or drvPath. A consequence of using such keys is that every derivation may + # only be exposed as a single, unique step in the pipeline. + keyForDrv = drvOrPath: + let + drvPath = + if lib.isDerivation drvOrPath then drvOrPath.drvPath + else if lib.isString drvOrPath then drvOrPath + else builtins.throw "keyForDrv: expected string or derivation"; + + # Only use the drv hash to prevent escaping problems. Buildkite also has a + # limit of 100 characters on keys. + in + "drv-" + (builtins.substring 0 32 + (builtins.baseNameOf (unsafeDiscardStringContext drvPath)) + ); + # Given an arbitrary attribute path generate a Nix expression which obtains # this from the root of depot (assumed to be ./.). Attributes may be any # Nix strings suitable as attribute names, not just Nix literal-safe strings. @@ -81,7 +98,7 @@ rec { in { label = ":nix: " + label; - key = hashString "sha1" label; + key = keyForDrv target; skip = shouldSkip { inherit label drvPath parentTargetMap; }; command = mkBuildCommand { attrPath = targetAttrPath target; @@ -394,7 +411,7 @@ rec { commandScriptLink = "nix-buildkite-extra-step-command-script"; step = { - key = hashString "sha1" "${cfg.label}-${cfg.parentLabel}"; + key = "extra-step-" + hashString "sha1" "${cfg.label}-${cfg.parentLabel}"; label = ":gear: ${cfg.label} (from ${cfg.parentLabel})"; skip = let diff --git a/third_party/overlays/tvl.nix b/third_party/overlays/tvl.nix index 33031f94c..23f56e2f9 100644 --- a/third_party/overlays/tvl.nix +++ b/third_party/overlays/tvl.nix @@ -8,7 +8,14 @@ depot.nix.readTree.drvTargets { # flaky tests, long painful build, see https://github.com/NixOS/nixpkgs/pull/266443 withAWS = false; }); - nix = self.nix_2_3; + nix = self.nix_2_3 // { + # avoid duplicate pipeline step + meta = self.nix_2_3.meta or { } // { + ci = self.nix_2_3.meta.ci or { } // { + skip = true; + }; + }; + }; nix_latest = super.nix.override ({ # flaky tests, long painful build, see https://github.com/NixOS/nixpkgs/pull/266443 withAWS = false;