about summary refs log tree commit diff
path: root/nix/buildkite/default.nix (follow)
AgeCommit message (Collapse)AuthorFilesLines
2024-04-16 r/7940 feat(nix/buildkite): reflect deps between derivations in pipelinessterni1-3/+23
Most of the steps in our buildkite pipeline build derivations without doing anything else. A lot of those derivations depend on each other. Consequently, buildkite will schedule builds of derivations whose dependencies are still in the process of being built. The result is many buildkite agents doing nothing but blocking on other derivations being built. We can easily prevent this by using the dependency information we can get from the derivation (files) of the targets we want to build and translating them into buildkite step dependencies. The hard part of this has already been done for a while: //nix/dependency-analyzer finds the dependencies between a list of “known” derivations (even if they only depend on each other through intermediate derivations) without depending on a specific derivation builder convention, but rather relying on `.drv` files. It still has a few rough edges, but has been working reliably for our purposes. Since our steps are identified by derivation hashes, we can just directly use the available dependency data. Luckily, buildkite seems to just takes a step as if it was completed if it is skipped, so we don't even have to check whether dependencies have been skipped or not. On whitby it seems that the dependency analysis costs about a minute additionally (which is how long it takes to run //nix/dependency-analyzer in isolation just about). Supersedes cl/5063, cl/5060, cl/5064 and cl/5065. Change-Id: I91d2eb2b43d60811cac0d26fa94467298f622970 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11116 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com>
2024-04-16 r/7939 feat(nix/buildkite): use keys based on drvPaths where possiblesterni1-2/+19
This will make it easier to emit intra pipeline dependencies based on the dependencies between derivations contained therein later. A consequence of this change is that it is no longer possible to have the same derivation be exposed as multiple steps in the pipeline. I doubt that having this is very useful, though. Keys for extraSteps are not changed significantly, but are distinguished from derivation based steps (with prefix `drv-*`) by their prefix `extra-step-*`. Change-Id: I4165900e512b3967fa3ca4cd5bffd44bc15915fc Reviewed-on: https://cl.tvl.fyi/c/depot/+/11115 Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Tested-by: BuildkiteCI
2024-04-03 r/7848 fix(nix/buildkite): solve bogus realpath errors if build steps failsterni1-1/+4
- Set pipefail to make sure the correct exit code gets returned. - Don't let xargs(1) call realpath(1) if the build fails (and nothing is printed to stdout). Change-Id: I526a18df877601d884b83862da5f37336cdf52cd Reviewed-on: https://cl.tvl.fyi/c/depot/+/11312 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2024-03-07 r/7656 feat(buildkite): avoid building extraSteps in pipeline constructionsterni1-7/+28
In principle we don't want to build any (later) pipeline target during pipeline evaluation insofar they appear in extraSteps. For this reason, we have the needsOutput mechanism which prevents the parent target of an extraStep from being built in 🦙. Unfortunately, this mechanism is not general purpose enough, as we use other (i.e. non parent) targets from depot in extraSteps. As a consequence, kind of expensive builds need to happen during pipeline construction at the moment. The solution is to use the fact that the command script we want to run is exposed via the readTree interface to depot and build the script proper only when the extra step is executed. To facilitate this, some prerequisite changes need to be made: - We need to use a symlink different to result in case needsOutput is true which needs support in mkBuildCommand. We also need to avoid this symlink being picked up by git, as many extra steps check whether the tree is dirty or not. (Is there a way to have it outside the depot tree?) - Since we rely on the build command printing a single store path we store in $command_script, we need to avoid it printing two paths in cases where nix-store(1) is used (nix-store(1) prints the symlink and readlink(1) would print the store path in a separate line). Future work would be to remove/deprecate the needsOutput mechanism: After this change the parent target wouldn't be built right away even if it appeared in the script via string interpolation. Thus we could, instead of expecting the target being available as `./result`, make our extra steps nix-ier. Change-Id: Idd2e88a865eadabe229ce1e05406e8cc4cb63f94 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10850 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2024-03-02 r/7630 refactor(nix/buildkite): unify target attr path calculationsterni1-6/+9
After the previous refactor that made mkBuildExpr use attribute paths, mkStep and mkDrvMap can now share the code for calculating the attribute path of any given target. Change-Id: I50f9687e85c3b4407e4a55ff7e645db882bb80d6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10849 Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2024-03-02 r/7629 refactor(nix/buildkite): use attr path over target drv in mkBuild*sterni1-15/+14
mkBuild* is independent of the target abstraction, we can just use attribute paths. That is useful because we'll want to reuse that code in order to avoid building derivations (apart from unavoidable IfD) during pipeline construction for extraSteps. Breaking Change for mkBuildExpr and mkBuildCommand. Change-Id: I03646310192087d3e50f358a714472d1ac1a652f Reviewed-on: https://cl.tvl.fyi/c/depot/+/10848 Tested-by: BuildkiteCI Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su>
2024-03-02 r/7628 refactor(nix/buildkite): make more use of formal argumentssterni1-8/+10
When changing the buildkite pipeline code I found that some functions have a lot of arguments where the order is not necessarily clear. To ease further refactors / new features, I've ported them over to taking attribute sets. Note that this technically is a breaking change, as these functions are all exposed. Not sure how often they'd be called from the outside, though. Change-Id: I118c8c5242922403d12f6e5a61beaf68f636b40a Reviewed-on: https://cl.tvl.fyi/c/depot/+/10847 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-07-24 r/6443 feat(nix/buildkite): add meta.ci.buildkiteExtraStepArgsFlorian Klink1-1/+3
This allows setting / overwriting arbitrary step arguments, such as setting [Retry attributes](https://buildkite.com/docs/pipelines/command-step#retry-attributes) for a specific readTree target. It's intended to be used for cases where modelling each and every option in a custom meta.ci attribute would be unfeasible. Change-Id: I3352d5353b26a41a16760a7df37cd5ffee1665bb Reviewed-on: https://cl.tvl.fyi/c/depot/+/8983 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-07-24 r/6442 feat(nix/buildkite): add meta.ci.buildkiteExtraDepsFlorian Klink1-1/+1
This allows setting a buildkiteExtraDeps in `meta.ci`, which will get added to `depends_on` (which can also be a list). It allows explicitly describing a dependency on another buildkite step, either generated by nix/buildkite, or part of the static pipeline. At some point we might want to expose our key calculation function too, similar to how readTree exposes mkLabel already, but that's left for a followup. Change-Id: I793170401ccd3907ad8bf232b80ca7a492e1c942 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8980 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2023-07-18 r/6431 feat(nix/buildkite): support meta.timeoutFlorian Klink1-0/+2
This uses the nixpkgs convention of meta.timeout, and adds a timeout_in_minutes field to the pipeline step in case its set. Fixes https://b.tvl.fyi/issues/285. Change-Id: Ia72e3832f14bf9172319bce070c5b0944f1c96fe Reviewed-on: https://cl.tvl.fyi/c/depot/+/8970 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-07-18 r/6430 feat(nix/buildkite): drop postBuild logicFlorian Klink1-31/+2
This has been scheduled for removal in 2022-10-01, but it didn't happen so far. Let's remove it now, better late than never. Closes https://b.tvl.fyi/issues/286. Change-Id: I26fe07360c694c1c93418f3310b4067051e08c87 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8969 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-03 r/6229 feat(nix/buildkite): extraSteps: include parentLabel into hashFlorian Klink1-1/+1
Contrary to the normal steps, extra steps only show the attribute name in their label, not the whole attribute path. To make sure these are still unique, also incorporate the parentLabel into the string that's hashed. Change-Id: Ic7a1f76aaac159ab5bd30054e422234882947990 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8708 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-03 r/6228 feat(nix/buildkite): add step key to release stepsFlorian Klink1-0/+1
This uses the same logic ("sha1sum of label") as already used in the "build" chunks. Fixes https://b.tvl.fyi/issues/276. Change-Id: I76e59a141bd05f7d1d997a6471ea65e8cc7b4c2a Reviewed-on: https://cl.tvl.fyi/c/depot/+/8707 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-01 r/6226 docs(nix/buildkite): escape "release" in warningFlorian Klink1-1/+1
When using the buildkite tooling with `postBuild` parameter set, the following error message is shown: ``` This replaces the previous boolean postBuild API in extra step definitions. Please remove the postBuild parameter from this step and instead set phase = release;. ``` However, `release` is no symbol, this should be a string. Update the message to reflect that. Change-Id: I341c81d862204db06946512428910cada28481ca Reviewed-on: https://cl.tvl.fyi/c/depot/+/8690 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-11-01 r/5227 feat(ops/buildkite): Support "soft failures"William Carroll1-0/+4
Example Usage: ```nix { pkgs, ... }: (pkgs.writeText "foo" "bar").overrideAttrs (_: { meta.ci.extraSteps.bar = { label = "testing soft_fail"; softFail = [ { exit_status = 253; } { exit_status = 251; } ]; command = pkgs.writeShellScript "fail" '' # Trigger a soft failure by exiting 253 or 251 exit 253 ''; }; }) ``` Buildkite Documentation: https://buildkite.com/changelog/56-command-steps-can-now-be-made-to-soft-fail Change-Id: Idfce15a8d9cde568aa24ebd03956ada399bba5d2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7076 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-20 r/5169 fix(nix/buildkite) don't fail if gated step has no branchesEvgeny Zemtsov1-1/+1
Change-Id: Id3365c18bc3904b42e8b129a513cff4480a2cb07 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7051 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-11 r/5104 fix(nix/buildkite): split extra steps based on all known phasesEvgeny Zemtsov1-1/+1
Fix a bug introduced by 2ca153141 (I merged the wrong patchset). Issue happens when pipeline is split by phases into independent evals (e.g. build/release/deploy). Splitting extra steps requires knowledge of all known phases, otherwise pipeline evaluation fails due to extra steps from inactive phases. Change-Id: Iab0f2dc3eadda281e483055e26f00a95442e15b0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6942 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-10 r/5078 feat(nix/buildkite): allow custom phasesEvgeny Zemtsov1-17/+24
This change automatically extends the list of known phases as soon as they are added to active phase list. This is great when a user wants to design pipelines with multiple groups of dynamic steps. For example in Resoptima we want to design deployment pipeline where first only staging k8s namespaces are updated/tested and only after, we update production. Change-Id: Iab0f2dc3eadda281e483055e26f00a95442e15b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6923 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-30 r/5007 fix(nix/buildkite): follow parent skip behavior in extra stepsEvgeny Zemtsov1-1/+12
We found a bug after updating to latest tvl-kit which broke incremental releases. Bug was related to the fact that extra steps skip attribute had precedence over parent configuration. This is a desired behavior when extra step is explicitly set to `skip=true` but otherwise it must follow parent. Due to extra step normalization skip parameter is always set to false if not explicitly set. Along the way, I'm adding support for setting skip attribute on extra steps as string so that people can define skip reasons. The bug was introduced by commit: b9d79109d feat(ops/buildkite): Allow skip of individual steps Change-Id: I8a46d0926a749d2434412b309c661b749e9dbf37 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6827 Autosubmit: ezemtsov <eugene.zemtsov@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-09-28 r/4980 chore(3p/sources): Bump channels & overlayssterni1-2/+2
Upstream nixpkgs removed a lot of aliases this time, so we needed to do the following transformations. It's a real shame that aliases only really become discoverable easily when they are removed. * runCommandNoCC -> runCommand * gmailieer -> lieer We also need to work around the fact that home-manager hasn't catched on to this rename. * mysql -> mariadb * pkgconfig -> pkg-config This also affects our Nix fork which needs to be bumped. * prometheus_client -> prometheus-client * rxvt_unicode -> rxvt-unicode-unwrapped * nix-review -> nixpkgs-review * oauth2_proxy -> oauth2-proxy Additionally, some Go-related builders decided to drop support for passing the sha256 hash in directly, so we need to use the generic hash arguments. Change-Id: I84aaa225ef18962937f8616a9ff064822f0d5dc3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6792 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: wpcarro <wpcarro@gmail.com>
2022-09-01 r/4565 feat(buildkite/mkPipeline): allow fast failure for build stepsEvgeny Zemtsov1-3/+10
This is supposed to help with resource wasting in situations when multiple dynamic steps depend on a failing derivation. Cost of failure currently is `C = T * D` where: - T -> time to compile the failing derivation - D -> amount of CI targets depending on a failing derivation Switching to `Fail Fast` limits it to just T (time of a single failure). Which helps a lot, especially while upgrading nixpkgs. Fast fail at this moment is in preview, so to enable it: - Enable `Fail Fast` feature at pipeline or organization level - Set `cancelOnBuildFailing` parameter to true for `mkPipeline` Change-Id: I4373a46633522d21e94cfa8bac35243b4eeb0b9c Reviewed-on: https://cl.tvl.fyi/c/depot/+/6243 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-07-25 r/4322 fix(ops/buildkite): do not set branch if emptyJean-François Roche1-5/+4
To run an extra step for all branches, user don't set the `branches` attribute. This change avoid setting `branches` to null in such a case. Change-Id: Iabf2f3d0411b037ece5584f30b29c7e65420b63f Reviewed-on: https://cl.tvl.fyi/c/depot/+/5975 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-07-25 r/4321 feat(ops/buildkite): Allow agents targetingJean-François Roche1-2/+4
Using the `agents` attribute, it lets the user target specific agents to run a step. Change-Id: Id6fc0981d4879b77598854e1f296dffffb33a405 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5974 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-07-25 r/4320 feat(ops/buildkite): Allow skip of individual stepsJean-François Roche1-2/+4
Using the `skip` attribute, it lets the user decide to temporarily skip a step. Change-Id: If63ce60a2b4148f041655912730acc4ae9e28534 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5971 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-06-06 r/4222 refactor(nix/buildkite): Optimise steps if builds are not enabledVincent Ambo1-1/+2
Generating a release-only pipeline skips a bigger chunk of eval this way (the step itself is never actually evaluated, which means we never actually compute the drv), which can be quite beneficial in terms of evaluation time. Change-Id: I2739026ddd1c6a86f82627ac26a046c5fe7359ea Reviewed-on: https://cl.tvl.fyi/c/depot/+/5830 Tested-by: BuildkiteCI Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com>
2022-06-06 r/4221 fix(nix/buildkite): Disable `depends_on` if build phase is not runVincent Ambo1-4/+15
Extra steps that use `depends_on` (e.g. if they need output from their parent) should not actually depend on their parents build step if the build phase is not active. This is required to actually decouple the phases. Change-Id: I398da9a8a53e97ca3c635342259fc722d54b8e4a Reviewed-on: https://cl.tvl.fyi/c/depot/+/5829 Tested-by: BuildkiteCI Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com>
2022-06-06 r/4220 feat(nix/buildkite): Allow toggling of individual phasesVincent Ambo1-6/+18
Using the `activePhases` attribute, the set of phases included in an evaluation can be modified. This lets users generate e.g. ONLY the release steps of a pipeline. Change-Id: Ib0c38826dd69666094d619f5f324d1baafce8134 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5828 Tested-by: BuildkiteCI Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com>
2022-06-03 r/4205 feat(nix/buildkite): Validate available phases in extra stepsVincent Ambo1-5/+13
This will avoid things like extra steps being accidentally ignored because of typos. Change-Id: Ic4fa5925e42a7a449f89b4cde1510e216e91da6a Reviewed-on: https://cl.tvl.fyi/c/depot/+/5827 Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Tested-by: BuildkiteCI
2022-06-03 r/4204 fix(nix/buildkite): Forbid 'prompt' in build phase stepsVincent Ambo1-5/+11
This would block CI on human-approval if people were allowed to do it, so they're just not. Change-Id: I8a9b657d5c91636a7b4de249b977e24fc0941a1c Reviewed-on: https://cl.tvl.fyi/c/depot/+/5826 Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2022-06-03 r/4203 refactor(nix/buildkite): Explicit support for build phasesVincent Ambo1-63/+108
Previously the extra steps were roughly divided into steps that run "at build time" (i.e. before we publish results to Gerrit), and "post-build" (i.e. later on). In practice, these are something like a build/release pairing, where steps running after the build results are returned are mostly run for side-effects (e.g. publishing git subtrees to external repos). This refactoring makes this distinction explicit in //nix/buildkite and changes the extraSteps API with an explicit `phases` attribute instead of the previous `postStep` attribute. In practice the previous API is still supported, but will throw evaluation warnings until an arbitrarily chosen cutoff date of 2022-10-01 at which point we will change using it into a hard error. This uncovered a few strange behaviours which we only accidentally avoided, most of which I have left TODOs about and will clean up in subsequent commits. The purpose of this commit is to allow for separate evaluations of only build or only release steps, for example if release steps are evaluated in a slightly different context (e.g. with overridden versioning that is not relevant to standard CI functionality). Change-Id: I0b0186e3824273c15a774260708702d4a5974dac Reviewed-on: https://cl.tvl.fyi/c/depot/+/5825 Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Tested-by: BuildkiteCI
2022-06-03 r/4202 refactor(nix/buildkite): Rename "post" steps to "release" stepsVincent Ambo1-1/+1
This is in preparation for a subsequent CL that will do much more significant changes in //nix/buildkite. Change-Id: I80a8d67d3a7d593854c8d711572483c2581e7881 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5824 Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Tested-by: BuildkiteCI
2022-06-02 r/4201 docs(nix/buildkite): Fix an out-of-date comment about chunk sizeVincent Ambo1-1/+1
Change-Id: Ic1f874f4ca83f9088355dc0512723ea962e0db52 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5823 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-02-24 r/3866 fix(nix/buildkite): Do not set 'branches' attribute in step groupsVincent Ambo1-1/+1
This is no longer accepted by the Buildkite API and causes build failures. Functionality is unchanged since we also set the property on the step itself. Change-Id: Ib0e0908e4093ca4522711170a7179ce4bacafdc0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5324 Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Tested-by: BuildkiteCI
2022-02-07 r/3774 refactor(nix): Move `mkLabel` from buildkite to readTreeVincent Ambo1-8/+2
This function is more generically useful than just for pipeline construction. A subsequent commit will use it inside of readTree itself. Change-Id: I5eabd6f659726484667e060958865dddbc205762 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5237 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-02-04 r/3770 fix(nix/buildkite): read & print the store path of built derivationsVincent Ambo1-1/+1
This was useful to have in CI, e.g. when targeting a specific NixOS system. The actual result symlink which is printed is not useful. Alternative solution would be to change the wrapping of this so that we conditionally create the symlink for extra steps, but I think it's not worth the complexity of evaluating the step twice. Change-Id: Id86eb5114bec935c63a2907ec5f169fc5d41a6cc Reviewed-on: https://cl.tvl.fyi/c/depot/+/5227 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: sterni <sternenseemann@systemli.org>
2022-02-02 r/3743 feat(nix/buildkite): Add parentOverride argument to extra stepsVincent Ambo1-9/+23
This can be used to override the parent derivation if its output is required, for example to inject versions which are only used during releases to avoid cache-busting. Change-Id: I2211496efa8f9bc98ea43b23e4f3f92c61a6da73 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5184 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com>
2022-01-31 r/3723 style: format entire depot with nixpkgs-fmtVincent Ambo1-148/+164
This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
2022-01-29 r/3701 chore(nix/buildkite): reduce chunk size to 192Vincent Ambo1-1/+1
We've seen the famous 1 minute timeout on Buildkite again, probably due to something (keys in targets?) increasing the overall payload size of our chunks. This reduces the chunk size by 25%. Lets keep an eye on it with this value ... Change-Id: I6bf0e9e4ab0d5b8de22773e6cd5da8d0959cc448 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5105 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: sterni <sternenseemann@systemli.org>
2022-01-24 r/3668 feat(nix/buildkite): Support un-gated post-build extra stepsVincent Ambo1-2/+7
Allows users to define steps with `postBuild = true` which always run after :duck:, but do not require human approvals. This can be useful for things like unconditional release steps. Change-Id: Idbf6c48a9dedcfc6cc9b7f098423364e2fa72d2d Reviewed-on: https://cl.tvl.fyi/c/depot/+/5052 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: tazjin <tazjin@tvl.su>
2022-01-24 r/3667 refactor(nix/buildkite): Restrict step conditionals to refs onlyVincent Ambo1-11/+9
The previous `condition` abstraction which allowed the full set of Buildkite conditionals is way too leaky (it lets users to very Buildkite-specific things which we may not want to allow, and which are mostly not relevant to a pure evaluation). Supporting only the `branches` condition (native to Buildkite) should make it possible to port this to other future CI systems later. Change-Id: Ib8adcc41db4f1a3566cbeecf13a4228403105c1f Reviewed-on: https://cl.tvl.fyi/c/depot/+/5051 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Autosubmit: tazjin <tazjin@tvl.su>
2022-01-24 r/3666 feat(nix/buildkite): Add support for gated stepsVincent Ambo1-7/+69
Adds support for extra build steps that specify a `prompt`. These steps will be run at the end of the pipeline and will be gated by human approval. This mechanism can be used to, for example, stage releases of software released from depot that are subject to approval. Change-Id: I97bb505664a2ccf01142286f14e20a370afaa345 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5033 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Autosubmit: tazjin <tazjin@tvl.su>
2022-01-22 r/3657 refactor(ops/pipelines): Split build/post steps into separate chunksVincent Ambo1-16/+9
This will create `build-chunk-$n.json` files for steps that should run _before_ duck, and `post-chunk-$n.json` files for steps that should run after duck. The post steps are not yet uploaded to Buildkite, but we also don't have any right now. Change-Id: I7e1b59cf55a8bf1d97266f6e988aa496959077bf Reviewed-on: https://cl.tvl.fyi/c/depot/+/5047 Tested-by: BuildkiteCI Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com> Autosubmit: tazjin <tazjin@tvl.su>
2022-01-21 r/3652 feat(nix/buildkite): Add support for extra stepsVincent Ambo1-17/+85
This introduces a new feature to our CI system in which targets can declare extra steps in `meta.ci.extraSteps`. See the comment in //nix/buildkite/default.nix for an explanation of how these extra steps are defined. Change-Id: Icce2890c743286dd37f43024cd390dcebac8cdba Reviewed-on: https://cl.tvl.fyi/c/depot/+/5008 Tested-by: BuildkiteCI Reviewed-by: ezemtsov <eugene.zemtsov@gmail.com>
2022-01-17 r/3602 feat(nix/buildkite): Check target map of parent to determine skipsVincent Ambo1-22/+22
This changes the logic for build pipeline generation to inspect an (optional) parentTargetMap attribute which contains the derivation map of a target commit. Targets that existed in a parent commit with the same drv hash will be skipped, as they are not considered to have changed. This does not yet wire up any logic for retrieving the target map from storage, meaning that at this commit all targets are always built. The intention is that we will have logic to fetch the target map (initially from Buildkite artefact storage), which we then pass to the depot via externalArgs when actually generating the pipeline. Change-Id: I3373c60aaf4b56b94c6ab64e2e5eef68dea9287c Reviewed-on: https://cl.tvl.fyi/c/depot/+/4946 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-01-17 r/3601 feat(ops/pipelines): Create drvmap structure for each commitVincent Ambo1-3/+23
Always create a structure that maps all targets to derivations, and persist it as a JSON file. This relates to some of the ideas expressed in: https://docs.google.com/document/d/16A0a5oUxH1VoiSM8hyFyLW0WiUYpNo2e2D6FTW4BlH8/edit The file is always uploaded to Buildkite as an artifact. This allows for retrieving it based on the commit ID in a Buildkite GraphQL query. By default, Buildkite stores artefacts for 6 months. Storage location can be overridden (with custom retention) through some environment variables, but for now at TVL the Buildkite-managed storage is fine. See also: https://buildkite.com/docs/pipelines/artifacts In the subsequent filtering implementation, when diffing commits across a time-range that exceeds artefact retention time, we should simply default to building everything. Change-Id: I6d808461cd1c1fdd6983ba8c8ef075736d42caa7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3662 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2021-12-28 r/3491 refactor: Generalise pipeline generation in //nix/buildkiteVincent Ambo1-0/+165
Extracts the logic for generating our Buildkite pipeline (which has been copy&pasted and slightly modified in some places outside of depot) into a generic //nix/buildkite library. This should cause no change in functionality. Change-Id: Iad3201713945de41279b39e4f1b847f697c179f7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/4726 Autosubmit: tazjin <mail@tazj.in> Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>