forked from mirrors/jj
8cb429d065
Summary: Let's be more aggressive about tracking the latest stable Rust release. There's little benefit to being conservative so early on, especially when no users seem to have faced any issue with upgrading, or strictly required an old Rust version. Right now, just lagging Rust by 1 major release probably seems fine. We're targeting 1.71.0 to get ahead of the curve, since 1.72.0 will likely release sometime before the next `jj` release. Signed-off-by: Austin Seipp <aseipp@pobox.com> Change-Id: I4e691b6ba63b5b9023a75ae0a6917672
148 lines
4.6 KiB
Nix
148 lines
4.6 KiB
Nix
{
|
|
description = "Jujutsu VCS, a Git-compatible DVCS that is both simple and powerful";
|
|
|
|
inputs = {
|
|
# For listing and iterating nix systems
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
|
|
# For installing non-standard rustc versions
|
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
|
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
|
|
rust-overlay.inputs.flake-utils.follows = "flake-utils";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, rust-overlay }: {
|
|
overlays.default = (final: prev: {
|
|
jujutsu = self.packages.${final.system}.jujutsu;
|
|
});
|
|
} //
|
|
(flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
rust-overlay.overlays.default
|
|
];
|
|
};
|
|
|
|
filterSrc = src: regexes:
|
|
pkgs.lib.cleanSourceWith {
|
|
inherit src;
|
|
filter = path: type:
|
|
let
|
|
relPath = pkgs.lib.removePrefix (toString src + "/") (toString path);
|
|
in
|
|
pkgs.lib.all (re: builtins.match re relPath == null) regexes;
|
|
};
|
|
|
|
rust-version = pkgs.rust-bin.stable."1.71.0".default;
|
|
|
|
ourRustPlatform = pkgs.makeRustPlatform {
|
|
rustc = rust-version;
|
|
cargo = rust-version;
|
|
};
|
|
|
|
# NOTE (aseipp): on Linux, go ahead and use mold by default to improve
|
|
# link times a bit; mostly useful for debug build speed, but will help
|
|
# over time if we ever get more dependencies, too
|
|
useMoldLinker = pkgs.stdenv.isLinux;
|
|
in
|
|
{
|
|
packages = {
|
|
jujutsu = ourRustPlatform.buildRustPackage rec {
|
|
pname = "jujutsu";
|
|
version = "unstable-${self.shortRev or "dirty"}";
|
|
buildNoDefaultFeatures = true;
|
|
buildFeatures = [ "packaging" ];
|
|
cargoBuildFlags = ["--bin" "jj"]; # don't build and install the fake editors
|
|
useNextest = true;
|
|
src = filterSrc ./. [
|
|
".*\\.nix$"
|
|
"^.jj/"
|
|
"^flake\\.lock$"
|
|
"^target/"
|
|
];
|
|
cargoLock = {
|
|
lockFile = ./Cargo.lock;
|
|
};
|
|
nativeBuildInputs = with pkgs; [
|
|
gzip
|
|
installShellFiles
|
|
makeWrapper
|
|
pkg-config
|
|
];
|
|
buildInputs = with pkgs; [
|
|
openssl zstd libgit2 libssh2
|
|
] ++ lib.optionals stdenv.isDarwin [
|
|
darwin.apple_sdk.frameworks.Security
|
|
darwin.apple_sdk.frameworks.SystemConfiguration
|
|
libiconv
|
|
];
|
|
ZSTD_SYS_USE_PKG_CONFIG = "1";
|
|
LIBSSH2_SYS_USE_PKG_CONFIG = "1";
|
|
NIX_JJ_GIT_HASH = self.rev or "";
|
|
CARGO_INCREMENTAL = "0";
|
|
postInstall = ''
|
|
$out/bin/jj util mangen > ./jj.1
|
|
installManPage ./jj.1
|
|
|
|
installShellCompletion --cmd jj \
|
|
--bash <($out/bin/jj util completion --bash) \
|
|
--fish <($out/bin/jj util completion --fish) \
|
|
--zsh <($out/bin/jj util completion --zsh)
|
|
'';
|
|
};
|
|
default = self.packages.${system}.jujutsu;
|
|
};
|
|
apps.default = {
|
|
type = "app";
|
|
program = "${self.packages.${system}.jujutsu}/bin/jj";
|
|
};
|
|
checks.jujutsu = self.packages.${system}.jujutsu.overrideAttrs ({ ... }: {
|
|
cargoBuildType = "debug";
|
|
cargoCheckType = "debug";
|
|
preCheck = ''
|
|
export RUST_BACKTRACE=1
|
|
'';
|
|
});
|
|
formatter = pkgs.nixpkgs-fmt;
|
|
devShells.default = pkgs.mkShell {
|
|
buildInputs = with pkgs; [
|
|
# Using the minimal profile with explicit "clippy" extension to avoid
|
|
# two versions of rustfmt
|
|
(rust-version.override {
|
|
extensions = [
|
|
"rust-src" # for rust-analyzer
|
|
"clippy"
|
|
];
|
|
})
|
|
|
|
# The CI checks against the latest nightly rustfmt, so we should too.
|
|
(rust-bin.selectLatestNightlyWith (toolchain: toolchain.rustfmt))
|
|
|
|
# Foreign dependencies
|
|
openssl zstd libgit2 libssh2
|
|
pkg-config
|
|
|
|
# Make sure rust-analyzer is present
|
|
rust-analyzer
|
|
|
|
# Additional tools recommended by contributing.md
|
|
cargo-deny
|
|
cargo-insta
|
|
cargo-nextest
|
|
cargo-watch
|
|
|
|
# Extra, more specific tools follow
|
|
] ++ pkgs.lib.optionals useMoldLinker [ mold ];
|
|
|
|
shellHook = ''
|
|
export RUST_BACKTRACE=1
|
|
export ZSTD_SYS_USE_PKG_CONFIG=1
|
|
export LIBSSH2_SYS_USE_PKG_CONFIG=1
|
|
'' + pkgs.lib.optionalString useMoldLinker ''
|
|
export RUSTFLAGS="-C link-arg=-fuse-ld=mold $RUSTFLAGS"
|
|
'';
|
|
};
|
|
}));
|
|
}
|