init template for leptos-0.7-beta4
This commit is contained in:
commit
e1a90aa976
20 changed files with 3738 additions and 0 deletions
275
flake.nix
Normal file
275
flake.nix
Normal file
|
@ -0,0 +1,275 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
crane = {
|
||||
url = "github:ipetkov/crane";
|
||||
};
|
||||
|
||||
cargo-leptos-src = {
|
||||
url = "github:leptos-rs/cargo-leptos";
|
||||
flake = false;
|
||||
};
|
||||
nix-filter.url = "github:numtide/nix-filter";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
rust-overlay,
|
||||
crane,
|
||||
cargo-leptos-src,
|
||||
nix-filter,
|
||||
flake-utils,
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (
|
||||
system:
|
||||
let
|
||||
# set up `pkgs` with rust-overlay
|
||||
overlays = [ (import rust-overlay) ];
|
||||
pkgs = (import nixpkgs) {
|
||||
inherit system overlays;
|
||||
};
|
||||
|
||||
# filter the source to reduce cache misses
|
||||
# add a path here if you need other files, e.g. bc of `include_str!()`
|
||||
src = nix-filter {
|
||||
root = ./.;
|
||||
include = [
|
||||
(nix-filter.lib.matchExt "toml")
|
||||
./Cargo.lock
|
||||
./crates
|
||||
];
|
||||
};
|
||||
|
||||
# set up the rust toolchain, including the wasm target
|
||||
# these are separated because rust-analyzer is useless in CI, so the
|
||||
# dev toolchain is only used in the dev shell
|
||||
toolchain = pkgs.rust-bin.selectLatestNightlyWith (
|
||||
toolchain:
|
||||
toolchain.minimal.override {
|
||||
targets = [ "wasm32-unknown-unknown" ];
|
||||
}
|
||||
);
|
||||
dev-toolchain = pkgs.rust-bin.selectLatestNightlyWith (
|
||||
toolchain:
|
||||
toolchain.default.override {
|
||||
extensions = [
|
||||
"rust-src"
|
||||
"rust-analyzer"
|
||||
"rustfmt-preview"
|
||||
];
|
||||
targets = [ "wasm32-unknown-unknown" ];
|
||||
}
|
||||
);
|
||||
|
||||
# read leptos options from `Cargo.toml`
|
||||
leptos-options = builtins.elemAt (builtins.fromTOML (builtins.readFile ./Cargo.toml))
|
||||
.workspace.metadata.leptos 0;
|
||||
|
||||
# configure crane to use our toolchain
|
||||
craneLib = (crane.mkLib pkgs).overrideToolchain toolchain;
|
||||
|
||||
# build cargo-leptos from source
|
||||
cargo-leptos = (import ./nix/cargo-leptos.nix) {
|
||||
inherit pkgs craneLib;
|
||||
cargo-leptos = cargo-leptos-src;
|
||||
};
|
||||
|
||||
# crane build configuration used by multiple builds
|
||||
common-args = {
|
||||
inherit src;
|
||||
|
||||
# use the name defined in the `Cargo.toml` leptos options
|
||||
pname = leptos-options.name;
|
||||
version = "0.1.0";
|
||||
|
||||
doCheck = false;
|
||||
|
||||
nativeBuildInputs =
|
||||
[
|
||||
pkgs.binaryen # provides wasm-opt
|
||||
]
|
||||
++ pkgs.lib.optionals (system == "x86_64-linux") [
|
||||
pkgs.nasm # wasm compiler only for x86_64-linux
|
||||
]
|
||||
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
|
||||
# Additional darwin specific inputs can be set here
|
||||
pkgs.libiconv # character encoding lib needed by darwin
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
pkgs.pkg-config # used by many crates for finding system packages
|
||||
pkgs.openssl # needed for many http libraries
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
# build the deps for the frontend bundle, and export the target folder
|
||||
site-frontend-deps = craneLib.mkCargoDerivation (
|
||||
common-args
|
||||
// {
|
||||
pname = "site-frontend-deps";
|
||||
src = craneLib.mkDummySrc common-args;
|
||||
cargoArtifacts = null;
|
||||
doInstallCargoArtifacts = true;
|
||||
|
||||
buildPhaseCargoCommand = ''
|
||||
cargo build \
|
||||
--package=${leptos-options.lib-package or leptos-options.output-name} \
|
||||
--lib \
|
||||
--target-dir=/build/source/target/front \
|
||||
--target=wasm32-unknown-unknown \
|
||||
--no-default-features \
|
||||
--profile=${leptos-options.lib-profile-release}
|
||||
'';
|
||||
}
|
||||
);
|
||||
# build the deps for the server binary, and export the target folder
|
||||
site-server-deps = craneLib.mkCargoDerivation (
|
||||
common-args
|
||||
// {
|
||||
pname = "site-server-deps";
|
||||
src = craneLib.mkDummySrc common-args;
|
||||
cargoArtifacts = site-frontend-deps;
|
||||
doInstallCargoArtifacts = true;
|
||||
|
||||
buildPhaseCargoCommand = ''
|
||||
cargo build \
|
||||
--package=${leptos-options.bin-package or leptos-options.name} \
|
||||
--no-default-features \
|
||||
--release
|
||||
'';
|
||||
}
|
||||
);
|
||||
|
||||
# build the binary and bundle using cargo leptos
|
||||
site-server = craneLib.buildPackage (
|
||||
common-args
|
||||
// {
|
||||
# add inputs needed for leptos build
|
||||
nativeBuildInputs = common-args.nativeBuildInputs ++ [
|
||||
cargo-leptos
|
||||
# used by cargo-leptos for styling
|
||||
pkgs.dart-sass
|
||||
pkgs.tailwindcss
|
||||
];
|
||||
|
||||
# enable hash_files again
|
||||
buildPhaseCargoCommand = ''
|
||||
# export LEPTOS_HASH_FILES=true
|
||||
cargo leptos build --release -vvv
|
||||
'';
|
||||
|
||||
installPhaseCommand = ''
|
||||
mkdir -p $out/bin
|
||||
cp target/release/site-server $out/bin/
|
||||
# cp target/release/hash.txt $out/bin/
|
||||
cp -r target/site $out/bin/
|
||||
'';
|
||||
|
||||
doCheck = false;
|
||||
cargoArtifacts = site-server-deps;
|
||||
}
|
||||
);
|
||||
|
||||
in
|
||||
{
|
||||
checks = {
|
||||
# lint packages
|
||||
app-hydrate-clippy = craneLib.cargoClippy (
|
||||
common-args
|
||||
// {
|
||||
cargoArtifacts = site-server-deps;
|
||||
cargoClippyExtraArgs = "-p site-app --features hydrate -- --deny warnings";
|
||||
}
|
||||
);
|
||||
app-ssr-clippy = craneLib.cargoClippy (
|
||||
common-args
|
||||
// {
|
||||
cargoArtifacts = site-server-deps;
|
||||
cargoClippyExtraArgs = "-p site-app --features ssr -- --deny warnings";
|
||||
}
|
||||
);
|
||||
site-server-clippy = craneLib.cargoClippy (
|
||||
common-args
|
||||
// {
|
||||
cargoArtifacts = site-server-deps;
|
||||
cargoClippyExtraArgs = "-p site-server -- --deny warnings";
|
||||
}
|
||||
);
|
||||
site-frontend-clippy = craneLib.cargoClippy (
|
||||
common-args
|
||||
// {
|
||||
cargoArtifacts = site-server-deps;
|
||||
cargoClippyExtraArgs = "-p site-frontend -- --deny warnings";
|
||||
}
|
||||
);
|
||||
|
||||
# make sure the docs build
|
||||
site-server-doc = craneLib.cargoDoc (
|
||||
common-args
|
||||
// {
|
||||
cargoArtifacts = site-server-deps;
|
||||
}
|
||||
);
|
||||
|
||||
# check formatting
|
||||
site-server-fmt = craneLib.cargoFmt {
|
||||
pname = common-args.pname;
|
||||
version = common-args.version;
|
||||
|
||||
inherit src;
|
||||
};
|
||||
|
||||
# # audit licenses
|
||||
# site-server-deny = craneLib.cargoDeny {
|
||||
# pname = common_args.pname;
|
||||
# version = common_args.version;
|
||||
# inherit src;
|
||||
# };
|
||||
|
||||
# run tests
|
||||
site-server-nextest = craneLib.cargoNextest (
|
||||
common-args
|
||||
// {
|
||||
cargoArtifacts = site-server-deps;
|
||||
partitions = 1;
|
||||
partitionType = "count";
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
packages = {
|
||||
default = site-server;
|
||||
server = site-server;
|
||||
};
|
||||
|
||||
formatter = pkgs.nixfmt-rfc-style;
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
nativeBuildInputs =
|
||||
(with pkgs; [
|
||||
self.formatter.${system}
|
||||
|
||||
dev-toolchain # rust toolchain
|
||||
cargo-leptos # main leptos build tool
|
||||
bacon # cargo check w/ hot reload
|
||||
cargo-deny # license checking
|
||||
|
||||
# styling
|
||||
dart-sass
|
||||
])
|
||||
++ common-args.buildInputs
|
||||
++ common-args.nativeBuildInputs
|
||||
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
|
||||
pkgs.darwin.Security
|
||||
];
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue