git.delta.rocks / jrsonnet / refs/commits / 2e0b0304a98d

difftreelog

source

flake.nix14.0 KiBsourcehistory
1{2  description = "Jrsonnet";3  inputs = {4    nixpkgs.url = "github:nixos/nixpkgs/release-25.11";5    fenix = {6      url = "github:CertainLach/fenix/fix/libatomic";7      inputs.nixpkgs.follows = "nixpkgs";8    };9    flake-parts = {10      url = "github:hercules-ci/flake-parts";11      inputs.nixpkgs-lib.follows = "nixpkgs";12    };13    hercules-ci-effects = {14      url = "github:hercules-ci/hercules-ci-effects";15      inputs.flake-parts.follows = "flake-parts";16      inputs.nixpkgs.follows = "nixpkgs";17    };18    treefmt-nix = {19      url = "github:numtide/treefmt-nix";20      inputs.nixpkgs.follows = "nixpkgs";21    };22    crane.url = "github:CertainLach/crane/refactor/drop-remarshal";23    shelly.url = "github:CertainLach/shelly";24  };25  outputs =26    inputs:27    let28      inherit (inputs.nixpkgs.lib)29        mkIf30        mkForce31        optionals32        optionalAttrs33        ;34    in35    inputs.flake-parts.lib.mkFlake { inherit inputs; } {36      imports = [37        inputs.shelly.flakeModule38        inputs.hercules-ci-effects.flakeModule39      ];40      systems = [41        "x86_64-linux"42        "i686-linux"43        "aarch64-linux"44        "armv7l-linux"45        "aarch64-darwin"46      ];47      perSystem =48        {49          config,50          self',51          system,52          ...53        }:54        let55          pkgs = import inputs.nixpkgs {56            inherit system;57            overlays = [ inputs.fenix.overlays.default ];58            config.allowUnsupportedSystem = true;59            config.allowUnfreePredicate = pkg: pkg.name == "Xcode.app";60          };61          targetArch = pkgs.stdenv.hostPlatform.parsed.cpu.name;62          rustfmt = (pkgs.fenix.complete or pkgs.fenix.stable).rustfmt;63          rust-analyzer = (pkgs.fenix.complete or pkgs.fenix.stable).rust-analyzer;64          toolchain = pkgs.fenix.combine [65            (pkgs.fenix.stable.withComponents [66              "cargo"67              "clippy"68              "rustc"69              "rust-src"70            ])71            rustfmt72            rust-analyzer73            pkgs.fenix.targets.wasm32-unknown-unknown.stable.rust-std74          ];75          craneLib = (inputs.crane.mkLib pkgs).overrideToolchain toolchain;76          treefmt =77            (inputs.treefmt-nix.lib.evalModule pkgs (import ./treefmt.nix { inherit rustfmt; })).config.build;7879          # Cross-compilation toolchains80          crossToolchain = pkgs.fenix.combine [81            (pkgs.fenix.stable.withComponents [82              "cargo"83              "rustc"84            ])85            pkgs.fenix.targets."${targetArch}-unknown-linux-musl".stable.rust-std86            pkgs.fenix.targets."${targetArch}-apple-darwin".stable.rust-std87          ];88          craneLibCross = (inputs.crane.mkLib pkgs).overrideToolchain crossToolchain;8990          # Windows cross-compilation91          pkgsWindows = import inputs.nixpkgs {92            overlays = [ inputs.fenix.overlays.default ];93            localSystem = system;94            crossSystem = {95              config = "${targetArch}-w64-mingw32";96              libc = "msvcrt";97            };98          };99          windowsToolchain = pkgs.fenix.combine [100            (pkgs.fenix.stable.withComponents [101              "cargo"102              "rustc"103            ])104            pkgs.fenix.targets."${targetArch}-pc-windows-gnu".stable.rust-std105          ];106          craneLibWindows = (inputs.crane.mkLib pkgsWindows).overrideToolchain (_: windowsToolchain);107108        in109        {110          legacyPackages = {111            release = optionalAttrs pkgs.stdenv.hostPlatform.isLinux (112              {113                jrsonnet-linux-glibc = self'.packages.jrsonnet;114                jrsonnet-experimental-linux-glibc = self'.packages.jrsonnet-experimental;115              }116              // optionalAttrs pkgs.stdenv.hostPlatform.is64bit rec {117                jrsonnet-linux-musl = pkgs.callPackage ./nix/jrsonnet-cross-musl.nix {118                  craneLib = craneLibCross;119                  targetTriple = "${targetArch}-unknown-linux-musl";120                  muslCC = pkgs.pkgsMusl.stdenv.cc;121                };122                jrsonnet-experimental-linux-musl = jrsonnet-linux-musl.override {123                  withExperimentalFeatures = true;124                };125              }126              // optionalAttrs (targetArch == "aarch64") rec {127                jrsonnet-darwin = pkgs.callPackage ./nix/jrsonnet-cross-darwin.nix {128                  craneLib = craneLibCross;129                  targetTriple = "${targetArch}-apple-darwin";130                };131                jrsonnet-experimental-darwin = jrsonnet-darwin.override {132                  withExperimentalFeatures = true;133                };134              }135              // optionalAttrs (targetArch == "x86_64") rec {136                jrsonnet-windows = pkgsWindows.callPackage ./nix/jrsonnet-cross-windows.nix {137                  craneLib = craneLibWindows;138                  targetTriple = "${targetArch}-pc-windows-gnu";139                };140                jrsonnet-experimental-windows = jrsonnet-windows.override {141                  withExperimentalFeatures = true;142                };143              }144            );145            benchmarks = optionalAttrs (system == "x86_64-linux" || system == "aarch64-linux") {146              default = pkgs.callPackage ./nix/benchmarks.nix {147                inherit (config.legacyPackages.jsonnetImpls)148                  go-jsonnet149                  sjsonnet150                  cpp-jsonnet151                  rsjsonnet152                  ;153                jrsonnetVariants = [154                  {155                    drv = self'.packages.jrsonnet.override { forBenchmarks = true; };156                    name = "";157                  }158                ];159              };160              quick = pkgs.callPackage ./nix/benchmarks.nix {161                inherit (config.legacyPackages.jsonnetImpls)162                  go-jsonnet163                  sjsonnet164                  cpp-jsonnet165                  rsjsonnet166                  ;167                quick = true;168                jrsonnetVariants = [169                  {170                    drv = self'.packages.jrsonnet.override { forBenchmarks = true; };171                    name = "";172                  }173                ];174              };175              against-release = pkgs.callPackage ./nix/benchmarks.nix {176                inherit (config.legacyPackages.jsonnetImpls)177                  go-jsonnet178                  sjsonnet179                  cpp-jsonnet180                  rsjsonnet181                  ;182                jrsonnetVariants = [183                  {184                    drv = self'.packages.jrsonnet.override { forBenchmarks = true; };185                    name = "current";186                  }187                  {188                    drv = self'.packages.jrsonnet-experimental.override { forBenchmarks = true; };189                    name = "current-experimental";190                  }191                  {192                    drv = self'.legacyPackages.jsonnetImpls.jrsonnet-release.override { forBenchmarks = true; };193                    name = "release";194                  }195                ];196              };197              quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {198                inherit (config.legacyPackages.jsonnetImpls)199                  go-jsonnet200                  sjsonnet201                  cpp-jsonnet202                  rsjsonnet203                  ;204                quick = true;205                jrsonnetVariants = [206                  {207                    drv = self'.packages.jrsonnet.override { forBenchmarks = true; };208                    name = "current";209                  }210                  {211                    drv = self'.packages.jrsonnet-experimental.override { forBenchmarks = true; };212                    name = "current-experimental";213                  }214                  {215                    drv = self'.legacyPackages.jsonnetImpls.jrsonnet-release.override { forBenchmarks = true; };216                    name = "release";217                  }218                ];219              };220            };221            jsonnetImpls = {222              go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix { };223              sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix { };224              cpp-jsonnet = pkgs.callPackage ./nix/cpp-jsonnet.nix { };225              # I didn't managed to build it, and nixpkgs version is marked as broken226              # haskell-jsonnet = pkgs.callPackage ./nix/haskell-jsonnet.nix { };227              rsjsonnet = pkgs.callPackage ./nix/rsjsonnet.nix { };228              # Older released version of jrsonnet itself, for benchmarking purposes229              jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {230                rustPlatform = pkgs.makeRustPlatform {231                  rustc = toolchain;232                  cargo = toolchain;233                };234              };235            };236          };237          packages =238            let239              jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {240                inherit craneLib;241              };242              jrsonnet-experimental = pkgs.callPackage ./nix/jrsonnet.nix {243                inherit craneLib;244                withExperimentalFeatures = true;245              };246            in247            {248              default = jrsonnet;249              inherit jrsonnet jrsonnet-experimental;250            };251          checks = optionalAttrs (system != "armv7l-linux") {252            formatting = treefmt.check inputs.self;253          };254          formatter = mkIf (system != "armv7l-linux") treefmt.wrapper;255          shelly.shells.default = {256            factory = craneLib.devShell;257            packages =258              with pkgs;259              [260                cargo-edit261                cargo-outdated262                cargo-watch263                cargo-insta264                cargo-hack265                cargo-show-asm266                lld267                hyperfine268                graphviz269              ]270              ++ optionals (!stdenv.isDarwin) [271                valgrind272                kdePackages.kcachegrind273                samply274              ];275          };276        };277      hercules-ci.github-releases.files =278        let279          rel = system: inputs.self.legacyPackages.${system}.release;280          bin = drv: "${drv}/bin/jrsonnet";281          exe = drv: "${drv}/bin/jrsonnet.exe";282        in283        [284          {285            label = "jrsonnet-x86_64-linux-musl";286            path = bin (rel "x86_64-linux").jrsonnet-linux-musl;287          }288          {289            label = "jrsonnet-experimental-x86_64-linux-musl";290            path = bin (rel "x86_64-linux").jrsonnet-experimental-linux-musl;291          }292          {293            label = "jrsonnet-aarch64-darwin";294            path = bin (rel "aarch64-linux").jrsonnet-darwin;295          }296          {297            label = "jrsonnet-experimental-aarch64-darwin";298            path = bin (rel "aarch64-linux").jrsonnet-experimental-darwin;299          }300          {301            label = "jrsonnet-x86_64-windows.exe";302            path = exe (rel "x86_64-linux").jrsonnet-windows;303          }304          {305            label = "jrsonnet-experimental-x86_64-windows.exe";306            path = exe (rel "x86_64-linux").jrsonnet-experimental-windows;307          }308309          {310            label = "jrsonnet-aarch64-linux-musl";311            path = bin (rel "aarch64-linux").jrsonnet-linux-musl;312          }313          {314            label = "jrsonnet-experimental-aarch64-linux-musl";315            path = bin (rel "aarch64-linux").jrsonnet-experimental-linux-musl;316          }317318          {319            label = "jrsonnet-x86_64-linux-glibc";320            path = bin (rel "x86_64-linux").jrsonnet-linux-glibc;321          }322          {323            label = "jrsonnet-experimental-x86_64-linux-glibc";324            path = bin (rel "x86_64-linux").jrsonnet-experimental-linux-glibc;325          }326          {327            label = "jrsonnet-aarch64-linux-glibc";328            path = bin (rel "aarch64-linux").jrsonnet-linux-glibc;329          }330          {331            label = "jrsonnet-experimental-aarch64-linux-glibc";332            path = bin (rel "aarch64-linux").jrsonnet-experimental-linux-glibc;333          }334          {335            label = "jrsonnet-i686-linux-glibc";336            path = bin (rel "i686-linux").jrsonnet-linux-glibc;337          }338          {339            label = "jrsonnet-experimental-i686-linux-glibc";340            path = bin (rel "i686-linux").jrsonnet-experimental-linux-glibc;341          }342          {343            label = "jrsonnet-armv7l-linux-glibc";344            path = bin (rel "armv7l-linux").jrsonnet-linux-glibc;345          }346          {347            label = "jrsonnet-experimental-armv7l-linux-glibc";348            path = bin (rel "armv7l-linux").jrsonnet-experimental-linux-glibc;349          }350        ];351      hercules-ci.cargo-publish = {352        enable = true;353        secretName = "crates-io";354        extraPublishArgs = [ "--workspace" ];355      };356      hercules-ci.flake-update = {357        enable = true;358        baseMerge.enable = true;359        baseMerge.method = "fast-forward";360        when = {361          dayOfWeek = [ "Sat" ];362        };363      };364      herculesCI =365        { lib, config, ... }:366        {367          ciSystems = [368            "x86_64-linux"369            "i686-linux"370            "aarch64-linux"371            "armv7l-linux"372            # TODO: add workers for these platforms373            # "aarch64-darwin"374          ];375          onPush.default.outputs = {376            benchmarks.x86_64-linux = inputs.self.legacyPackages.x86_64-linux.benchmarks.default;377378            # Cross: musl/mingw/darwin-zigbuild379            release.x86_64-linux = inputs.self.legacyPackages.x86_64-linux.release;380            release.aarch64-linux = inputs.self.legacyPackages.aarch64-linux.release;381            release.armv7l-linux = inputs.self.legacyPackages.armv7l-linux.release;382            release.i686-linux = inputs.self.legacyPackages.i686-linux.release;383384            # Too much to build for CI purposes385            devShells = mkForce { };386            formatter = mkForce { };387388            # No need to run them on different arch, pretty large derivations and might try to compile GHC389            checks.i686-linux.formatting = mkForce { };390            checks.aarch64-linux.formatting = mkForce { };391          };392        };393    };394}