difftreelog
ci use nightly rust-analyzer for dev
in: master
1 file changed
flake.nixdiffbeforeafterboth1{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 toolchain = pkgs.fenix.combine [64 (pkgs.fenix.stable.withComponents [65 "cargo"66 "clippy"67 "rustc"68 "rust-src"69 "rust-analyzer"70 ])71 rustfmt72 ];73 craneLib = (inputs.crane.mkLib pkgs).overrideToolchain toolchain;74 treefmt =75 (inputs.treefmt-nix.lib.evalModule pkgs (import ./treefmt.nix { inherit rustfmt; })).config.build;7677 # Cross-compilation toolchains78 crossToolchain = pkgs.fenix.combine [79 (pkgs.fenix.stable.withComponents [80 "cargo"81 "rustc"82 ])83 pkgs.fenix.targets."${targetArch}-unknown-linux-musl".stable.rust-std84 pkgs.fenix.targets."${targetArch}-apple-darwin".stable.rust-std85 ];86 craneLibCross = (inputs.crane.mkLib pkgs).overrideToolchain crossToolchain;8788 # Windows cross-compilation89 pkgsWindows = import inputs.nixpkgs {90 overlays = [ inputs.fenix.overlays.default ];91 localSystem = system;92 crossSystem = {93 config = "${targetArch}-w64-mingw32";94 libc = "msvcrt";95 };96 };97 windowsToolchain = pkgs.fenix.combine [98 (pkgs.fenix.stable.withComponents [99 "cargo"100 "rustc"101 ])102 pkgs.fenix.targets."${targetArch}-pc-windows-gnu".stable.rust-std103 ];104 craneLibWindows = (inputs.crane.mkLib pkgsWindows).overrideToolchain (_: windowsToolchain);105106 in107 {108 legacyPackages = {109 release = optionalAttrs pkgs.stdenv.hostPlatform.isLinux (110 {111 jrsonnet-linux-glibc = self'.packages.jrsonnet;112 jrsonnet-experimental-linux-glibc = self'.packages.jrsonnet-experimental;113 }114 // optionalAttrs pkgs.stdenv.hostPlatform.is64bit rec {115 jrsonnet-linux-musl = pkgs.callPackage ./nix/jrsonnet-cross-musl.nix {116 craneLib = craneLibCross;117 targetTriple = "${targetArch}-unknown-linux-musl";118 muslCC = pkgs.pkgsMusl.stdenv.cc;119 };120 jrsonnet-experimental-linux-musl = jrsonnet-linux-musl.override {121 withExperimentalFeatures = true;122 };123 }124 // optionalAttrs (targetArch == "aarch64") rec {125 jrsonnet-darwin = pkgs.callPackage ./nix/jrsonnet-cross-darwin.nix {126 craneLib = craneLibCross;127 targetTriple = "${targetArch}-apple-darwin";128 };129 jrsonnet-experimental-darwin = jrsonnet-darwin.override {130 withExperimentalFeatures = true;131 };132 }133 // optionalAttrs (targetArch == "x86_64") rec {134 jrsonnet-windows = pkgsWindows.callPackage ./nix/jrsonnet-cross-windows.nix {135 craneLib = craneLibWindows;136 targetTriple = "${targetArch}-pc-windows-gnu";137 };138 jrsonnet-experimental-windows = jrsonnet-windows.override {139 withExperimentalFeatures = true;140 };141 }142 );143 benchmarks = optionalAttrs (system == "x86_64-linux" || system == "aarch64-linux") {144 default = pkgs.callPackage ./nix/benchmarks.nix {145 inherit (config.legacyPackages.jsonnetImpls)146 go-jsonnet147 sjsonnet148 cpp-jsonnet149 rsjsonnet150 ;151 jrsonnetVariants = [152 {153 drv = self'.packages.jrsonnet.override { forBenchmarks = true; };154 name = "";155 }156 ];157 };158 quick = pkgs.callPackage ./nix/benchmarks.nix {159 inherit (config.legacyPackages.jsonnetImpls)160 go-jsonnet161 sjsonnet162 cpp-jsonnet163 rsjsonnet164 ;165 quick = true;166 jrsonnetVariants = [167 {168 drv = self'.packages.jrsonnet.override { forBenchmarks = true; };169 name = "";170 }171 ];172 };173 against-release = pkgs.callPackage ./nix/benchmarks.nix {174 inherit (config.legacyPackages.jsonnetImpls)175 go-jsonnet176 sjsonnet177 cpp-jsonnet178 rsjsonnet179 ;180 jrsonnetVariants = [181 {182 drv = self'.packages.jrsonnet.override { forBenchmarks = true; };183 name = "current";184 }185 {186 drv = self'.packages.jrsonnet-experimental.override { forBenchmarks = true; };187 name = "current-experimental";188 }189 {190 drv = self'.legacyPackages.jsonnetImpls.jrsonnet-release.override { forBenchmarks = true; };191 name = "release";192 }193 ];194 };195 quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {196 inherit (config.legacyPackages.jsonnetImpls)197 go-jsonnet198 sjsonnet199 cpp-jsonnet200 rsjsonnet201 ;202 quick = true;203 jrsonnetVariants = [204 {205 drv = self'.packages.jrsonnet.override { forBenchmarks = true; };206 name = "current";207 }208 {209 drv = self'.packages.jrsonnet-experimental.override { forBenchmarks = true; };210 name = "current-experimental";211 }212 {213 drv = self'.legacyPackages.jsonnetImpls.jrsonnet-release.override { forBenchmarks = true; };214 name = "release";215 }216 ];217 };218 };219 jsonnetImpls = {220 go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix { };221 sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix { };222 cpp-jsonnet = pkgs.callPackage ./nix/cpp-jsonnet.nix { };223 # I didn't managed to build it, and nixpkgs version is marked as broken224 # haskell-jsonnet = pkgs.callPackage ./nix/haskell-jsonnet.nix { };225 rsjsonnet = pkgs.callPackage ./nix/rsjsonnet.nix { };226 # Older released version of jrsonnet itself, for benchmarking purposes227 jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {228 rustPlatform = pkgs.makeRustPlatform {229 rustc = toolchain;230 cargo = toolchain;231 };232 };233 };234 };235 packages =236 let237 jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {238 inherit craneLib;239 };240 jrsonnet-experimental = pkgs.callPackage ./nix/jrsonnet.nix {241 inherit craneLib;242 withExperimentalFeatures = true;243 };244 in245 {246 default = jrsonnet;247 inherit jrsonnet jrsonnet-experimental;248 };249 checks = optionalAttrs (system != "armv7l-linux") {250 formatting = treefmt.check inputs.self;251 };252 formatter = mkIf (system != "armv7l-linux") treefmt.wrapper;253 shelly.shells.default = {254 factory = craneLib.devShell;255 packages =256 with pkgs;257 [258 cargo-edit259 cargo-outdated260 cargo-watch261 cargo-insta262 cargo-hack263 cargo-show-asm264 lld265 hyperfine266 graphviz267 ]268 ++ optionals (!stdenv.isDarwin) [269 valgrind270 kdePackages.kcachegrind271 samply272 ];273 };274 };275 hercules-ci.github-releases.files =276 let277 rel = system: inputs.self.legacyPackages.${system}.release;278 bin = drv: "${drv}/bin/jrsonnet";279 exe = drv: "${drv}/bin/jrsonnet.exe";280 in281 [282 {283 label = "jrsonnet-x86_64-linux-musl";284 path = bin (rel "x86_64-linux").jrsonnet-linux-musl;285 }286 {287 label = "jrsonnet-experimental-x86_64-linux-musl";288 path = bin (rel "x86_64-linux").jrsonnet-experimental-linux-musl;289 }290 {291 label = "jrsonnet-aarch64-darwin";292 path = bin (rel "aarch64-linux").jrsonnet-darwin;293 }294 {295 label = "jrsonnet-experimental-aarch64-darwin";296 path = bin (rel "aarch64-linux").jrsonnet-experimental-darwin;297 }298 {299 label = "jrsonnet-x86_64-windows.exe";300 path = exe (rel "x86_64-linux").jrsonnet-windows;301 }302 {303 label = "jrsonnet-experimental-x86_64-windows.exe";304 path = exe (rel "x86_64-linux").jrsonnet-experimental-windows;305 }306307 {308 label = "jrsonnet-aarch64-linux-musl";309 path = bin (rel "aarch64-linux").jrsonnet-linux-musl;310 }311 {312 label = "jrsonnet-experimental-aarch64-linux-musl";313 path = bin (rel "aarch64-linux").jrsonnet-experimental-linux-musl;314 }315316 {317 label = "jrsonnet-x86_64-linux-glibc";318 path = bin (rel "x86_64-linux").jrsonnet-linux-glibc;319 }320 {321 label = "jrsonnet-experimental-x86_64-linux-glibc";322 path = bin (rel "x86_64-linux").jrsonnet-experimental-linux-glibc;323 }324 {325 label = "jrsonnet-aarch64-linux-glibc";326 path = bin (rel "aarch64-linux").jrsonnet-linux-glibc;327 }328 {329 label = "jrsonnet-experimental-aarch64-linux-glibc";330 path = bin (rel "aarch64-linux").jrsonnet-experimental-linux-glibc;331 }332 {333 label = "jrsonnet-i686-linux-glibc";334 path = bin (rel "i686-linux").jrsonnet-linux-glibc;335 }336 {337 label = "jrsonnet-experimental-i686-linux-glibc";338 path = bin (rel "i686-linux").jrsonnet-experimental-linux-glibc;339 }340 {341 label = "jrsonnet-armv7l-linux-glibc";342 path = bin (rel "armv7l-linux").jrsonnet-linux-glibc;343 }344 {345 label = "jrsonnet-experimental-armv7l-linux-glibc";346 path = bin (rel "armv7l-linux").jrsonnet-experimental-linux-glibc;347 }348 ];349 hercules-ci.cargo-publish = {350 enable = true;351 secretName = "crates-io";352 extraPublishArgs = [ "--workspace" ];353 };354 hercules-ci.flake-update = {355 enable = true;356 baseMerge.enable = true;357 baseMerge.method = "fast-forward";358 when = {359 dayOfWeek = [ "Sat" ];360 };361 };362 herculesCI =363 { lib, config, ... }:364 {365 ciSystems = [366 "x86_64-linux"367 "i686-linux"368 "aarch64-linux"369 "armv7l-linux"370 # TODO: add workers for these platforms371 # "aarch64-darwin"372 ];373 onPush.default.outputs = {374 benchmarks.x86_64-linux = inputs.self.legacyPackages.x86_64-linux.benchmarks.default;375376 # Cross: musl/mingw/darwin-zigbuild377 release.x86_64-linux = inputs.self.legacyPackages.x86_64-linux.release;378 release.aarch64-linux = inputs.self.legacyPackages.aarch64-linux.release;379 release.armv7l-linux = inputs.self.legacyPackages.armv7l-linux.release;380 release.i686-linux = inputs.self.legacyPackages.i686-linux.release;381382 # Too much to build for CI purposes383 devShells = mkForce { };384 formatter = mkForce { };385386 # No need to run them on different arch, pretty large derivations and might try to compile GHC387 checks.i686-linux.formatting = mkForce { };388 checks.aarch64-linux.formatting = mkForce { };389 };390 };391 };392}