From 9a04ef909b3a7c093acb8fa83258cf58f27855f1 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Fri, 2 Aug 2024 00:33:42 +0200 Subject: [PATCH] feat(nixpkgs): run oxidized channel scripts We don't need weird Perl scripts where we are going. Here's a streaming channel-scripts deployment with plenty of bells, including OTLP. Signed-off-by: Raito Bezarius --- common/channels.nix | 32 +++ flake.lock | 21 ++ flake.nix | 4 + hosts/gerrit01/default.nix | 20 ++ secrets.nix | 2 + secrets/s3-channel-keys.age | Bin 0 -> 1220 bytes secrets/s3-channel-staging-keys.age | Bin 0 -> 1220 bytes services/channel-scripts/default.nix | 229 +++++++++++++++++++++ services/channel-scripts/service-order.nix | 63 ++++++ services/default.nix | 1 + 10 files changed, 372 insertions(+) create mode 100644 common/channels.nix create mode 100644 secrets/s3-channel-keys.age create mode 100644 secrets/s3-channel-staging-keys.age create mode 100644 services/channel-scripts/default.nix create mode 100644 services/channel-scripts/service-order.nix diff --git a/common/channels.nix b/common/channels.nix new file mode 100644 index 0000000..4c6311c --- /dev/null +++ b/common/channels.nix @@ -0,0 +1,32 @@ +# Taken from https://github.com/NixOS/infra/blob/master/channels.nix +{ + # "Channel name" = { + # # This should be the part of + # # https://hydra.forkos.org/job//latest-finished + # job = "project/jobset/jobname"; + # + # # When adding a new version, determine if it needs to be tagged as a + # # variant -- for example: + # # nixos-xx.xx => primary + # # nixos-xx.xx-small => small + # # nixos-xx.xx-darwin => darwin + # # nixos-xx.xx-aarch64 => aarch64 + # variant = "primary"; + # + # # Channel Status: + # # '*-unstable' channels are always "rolling" + # # Otherwise a release generally progresses through the following phases: + # # + # # - Directly after branch off => "beta" + # # - Once the channel is released => "stable" + # # - Once the next channel is released => "deprecated" + # # - N months after the next channel is released => "unmaintained" + # # (check the release notes for when this should happen) + # status = "beta"; + # }; + "forkos-unstable" = { + job = "forkos/nixos-main/tested"; + variant = "primary"; + status = "rolling"; + }; +} diff --git a/flake.lock b/flake.lock index 0c2181a..e0039cf 100644 --- a/flake.lock +++ b/flake.lock @@ -101,6 +101,26 @@ "url": "https://git.lix.systems/lix-project/buildbot-nix.git" } }, + "channel-scripts": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1725125429, + "narHash": "sha256-NUnlreY8tdWTzAMY82hMxEhvsv9bKCCG4qAQ0LJanHA=", + "ref": "refs/heads/main", + "rev": "cb5a2a2b07570fcbe3ad128d3d2a147305524600", + "revCount": 258, + "type": "git", + "url": "https://git.lix.systems/the-distro/channel-scripts.git" + }, + "original": { + "type": "git", + "url": "https://git.lix.systems/the-distro/channel-scripts.git" + } + }, "colmena": { "inputs": { "flake-compat": "flake-compat", @@ -684,6 +704,7 @@ "inputs": { "agenix": "agenix", "buildbot-nix": "buildbot-nix", + "channel-scripts": "channel-scripts", "colmena": "colmena", "gerrit-dashboard": "gerrit-dashboard", "grapevine": "grapevine", diff --git a/flake.nix b/flake.nix index 9349bcf..10fabcf 100644 --- a/flake.nix +++ b/flake.nix @@ -25,6 +25,9 @@ buildbot-nix.url = "git+https://git.lix.systems/lix-project/buildbot-nix.git?ref=refs/heads/non-flakes"; buildbot-nix.inputs.nixpkgs.follows = "nixpkgs"; + channel-scripts.url = "git+https://git.lix.systems/the-distro/channel-scripts.git"; + channel-scripts.inputs.nixpkgs.follows = "nixpkgs"; + lix.follows = "hydra/lix"; grapevine = { @@ -51,6 +54,7 @@ inputs.hydra.overlays.default inputs.lix.overlays.default inputs.nix-gerrit.overlays.default + inputs.channel-scripts.overlays.default ]; }; terraform = pkgs.opentofu; diff --git a/hosts/gerrit01/default.nix b/hosts/gerrit01/default.nix index cb05025..a532697 100755 --- a/hosts/gerrit01/default.nix +++ b/hosts/gerrit01/default.nix @@ -121,6 +121,26 @@ }; }; + age.secrets.s3-channel-staging-keys.file = ../../secrets/s3-channel-staging-keys.age; + bagel.nixpkgs.channel-scripts = { + enable = true; + otlp.enable = true; + nixpkgsUrl = "https://cl.forkos.org/nixpkgs.git"; + hydraUrl = "https://hydra.forkos.org"; + binaryCacheUrl = "https://cache.forkos.org"; + baseUriForGitRevisions = "https://cl.forkos.org/plugins/gitiles/nixpkgs/+"; + s3 = { + release = "bagel-channel-scripts-test"; + channel = "bagel-channel-scripts-test"; + }; + releaseBucketCredentialsFile = config.age.secrets.s3-channel-staging-keys.path; + deployKeyFile = config.age.secrets.priv-ssh-key.path; + extraArgs = [ + "--bypass-preflight-checks" + ]; + channels = import ../../common/channels.nix; + }; + i18n.defaultLocale = "fr_FR.UTF-8"; system.stateVersion = "24.05"; diff --git a/secrets.nix b/secrets.nix index deb69e9..083da3f 100644 --- a/secrets.nix +++ b/secrets.nix @@ -33,6 +33,8 @@ let metrics-push-password = builtins.attrValues machines; ows-deploy-key = [ machines.gerrit01 ]; + s3-channel-staging-keys = [ machines.gerrit01 ]; + s3-channel-keys = [ machines.gerrit01 ]; postgres-ca-priv = [ machines.bagel-box ]; postgres-tls-priv = [ machines.bagel-box ]; diff --git a/secrets/s3-channel-keys.age b/secrets/s3-channel-keys.age new file mode 100644 index 0000000000000000000000000000000000000000..e1d62041535ce743b89dff5ac6fe656cdb8bfe55 GIT binary patch literal 1220 zcmZA0TdUgy00;2F(1-XibWR0P3v-Bu+9Yk7RNW+(rYDzPlD4^2o#vkOlC({eG!Yzg z=omObPy|KYz=03jo9xVaM11gaU=D{4g)L-KI)Kz&Naq9pmOsXmcE;AbHO#1bKVuZ`VIISrV%Xh5Fv|;2eOJ*uyzkjpFmko?0 z3g&#l$(hlwYmVjl_ClLLGNnm!Q08HJBI|q;p$%`KG6)NF6Lk_!^v-DFFpIKHm?}H> z5Cmo9l-E-%3#CJ|~f(gNIZ-UbqMFO232C5S-V zfbyo)HwK8~_!(7Ad!U)4l8?vSh{JK0ti(_yo0FrNFOUOtiqAaEBW$JA(*#{gb)d&v zAcvR^+RDXVmMBqdMp!?<>_)=?os?}W!91etx`As;H6%LqhA_Z;y(Ok;Zat7YKq}5f z+ibI5u1%G8Op-n^jcluiCDd3^gIT#%Q$|A&W>SQ)$%)0vc9pG97iq=gv5sH>JmWRs z7T%P=<-DBC)Q-@g;5nB_mTQh6jkBl_2|Sb(Z$#=sWyZj44xHFkstgXA1~Uogk$%o(P&H;Pnrp&iZsq@OH#JDAVK-iq&RVIf z+DxEkWJBW{A)5qApxRy>=$2U$WxPHTJ1}kyO`uz~b%9WZwiYgH+8FXjEx(KB9>AJC>D!_-grP{rZv%r?w}VqLYu+KS}z-+BGWaofL~xjBO@J?vYWuU z2kPuM552Iwe)@W%K6m)yFV#}>i}&xnaBTMvC-|qI*>donll$_QdfWEbPOrcEp0jn< z9X)vz+zxd2UcR!8_#1xRUp=$;lj8@zs~r3Bt=%u*@>_Q5u^qRblQs^oomt&__LU3Y z?p*f{K7VP~8_-kBi{8&y4(#3{-uJ<$Yis8}yZWo)M%1qOjz8NUos_p9da!V6jDLN1 z_3fi4g?-1l7f+Y}`swnXJF~^5507trdF|cXJ5TJqOFTmU`_*lq*WGZn_|C}Kdu08Q t!9OR?7rwv$;K!YH^4i(0!Lu9t|Jc}pJihwyp{pJG&9!y%#P6?N_zxXUwCex> literal 0 HcmV?d00001 diff --git a/secrets/s3-channel-staging-keys.age b/secrets/s3-channel-staging-keys.age new file mode 100644 index 0000000000000000000000000000000000000000..a26a25d8bc3292941c44900f443c27414fea6398 GIT binary patch literal 1220 zcmZXT+pF6I0Eb1U4|U)~wmF?rHV2OEm|N2{GAC)%q)mEB(xgp;7jkQorn#qA=F>Qn zu^}>W15qC)qM(8x!VV1ah~qq{I};oTigLW*9O%oOZUe>hG9Tt&@WJ={ewuA9S%Hzv zqs$G1$HT-1Cva}*P(DqaCCfxG3?}jj1&}R_ulrcEW{ z6Tu*9rm{xc@4T!trz|ISnDK{FtHLdfRHt2wQpAQpW1ZkQ;nzrP( zqk%s4WqM8)a)wg%)I^*H1EdZFIHwJ9i{&U8&?aIHK<4dUDbZ?BkJ02?v?SH?Uec>H zgj`w>M8pLaPSI#D0>HJ2g-YA0;-u7~0E1B)@C^{f$V$m5HXLC_OImGa8tP5o2GgY+`RLo^$J#8}cKzl3_JOthSKgNVU`887IC9mK30_90mv0$nCo zh_$-QfrWWgA3{iz;eFj0`m!=;*YJws!!F$mfxv_nlQK~%E!Vops95yov>7QwALVlt zQt?K!iaw&4PTw=8A|bZ`FGyJiVMZ+)qCu$ILz-?Z4dpnJi$iHvnUD>?ibS(1iw$xB zOk+3~*)t_-EfBTJ`Z!T>CEic67Qu=Mj#(K)2}7njlfkYw<*_l5G1jPI_sy)!S93(i zFRBx+BH$8eWmRKjb{zMAC4rNvU zJ(DMd5~AzmFsN!JTHEY)X(=zVb6->Kri24+i;T)3!IS|NOT((jm5Ok)U)EU9QR)MO z%)Pqf!uA)=>^^z!(cOEVVBUQ2{XN&tU)NrK??!ybQ&RlO+11Lqi)UBW!DkaXTU&(0 zUil5QxAFUx6HAx=cwptg^0DpV=((%n`AyU}Ux(8xXY&aXRmUD [ + # { + # name = "foo"; + # value = { + # script = "true"; + # unitConfig = { After = []; }; + # }; + # } + # { + # name = "bar"; + # value = { + # script = "true"; + # unitConfig = { After = [ "bar" ]; }; + # }; + # } + # + mkOrderedChain = jobs: let + unitConfigFrom = job: job.unitConfig or {}; + afterFrom = job: (unitConfigFrom job).After or []; + previousFrom = collector: + if collector ? previous + then [collector.previous] + else []; + + ordered = builtins.foldl' + (collector: item: { + services = collector.services + ++ [{ + inherit (item) name; + value = item.value // { + unitConfig = (unitConfigFrom item.value) // + { + After = (afterFrom item.value) ++ + (previousFrom collector); + }; + }; + }]; + previous = "${item.name}.service"; + }) + { services = []; } + jobs; + in ordered.services; +} diff --git a/services/default.nix b/services/default.nix index 9d009b5..3009878 100644 --- a/services/default.nix +++ b/services/default.nix @@ -1,6 +1,7 @@ { imports = [ ./gerrit + ./channel-scripts ./hydra ./matrix ./monitoring