diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..3550a30f --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index a6909f1f..fb5c32e1 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,8 @@ guide/build/ # These are backup files generated by rustfmt **/*.rs.bk +# IDEs .idea + +# direnv +/.direnv diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..1a6dff87 --- /dev/null +++ b/flake.lock @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1722651103, + "narHash": "sha256-IRiJA0NVAoyaZeKZluwfb2DoTpBAj+FLI0KfybBeDU0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a633d89c6dc9a2a8aae11813a62d7c58b2c0cc51", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1714640452, + "narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..1a53656e --- /dev/null +++ b/flake.nix @@ -0,0 +1,30 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; + flake-parts.url = "github:hercules-ci/flake-parts"; + }; + + outputs = inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; + perSystem = { pkgs, config, inputs', system, lib, ... }: { + formatter = pkgs.nixpkgs-fmt; + + devShells.default = pkgs.mkShell { + packages = [ + config.formatter + pkgs.fd + pkgs.just + pkgs.nodePackages.prettier + pkgs.taplo + pkgs.watchexec + ] ++ lib.optional pkgs.stdenv.isDarwin [ + pkgs.pkgsBuildHost.darwin.apple_sdk.frameworks.Security + pkgs.pkgsBuildHost.darwin.apple_sdk.frameworks.CoreFoundation + pkgs.pkgsBuildHost.darwin.apple_sdk.frameworks.SystemConfiguration + pkgs.pkgsBuildHost.libiconv + ]; + }; + }; + }; +} diff --git a/justfile b/justfile index e7a7978a..9e92635a 100644 --- a/justfile +++ b/justfile @@ -1,6 +1,23 @@ _list: @just --list +# Check project. +check: && clippy + just --unstable --fmt --check + # nixpkgs-fmt --check . + fd --hidden --type=file -e=md -e=yml --exec-batch prettier --check + fd --hidden -e=toml --exec-batch taplo format --check + fd --hidden -e=toml --exec-batch taplo lint + cargo +nightly fmt -- --check + +# Format project. +fmt: + just --unstable --fmt + # nixpkgs-fmt . + fd --hidden --type=file -e=md -e=yml --exec-batch prettier --write + fd --type=file --hidden -e=toml --exec-batch taplo format + cargo +nightly fmt + # Downgrade dev-dependencies necessary to run MSRV checks/tests. [private] downgrade-for-msrv: @@ -12,7 +29,6 @@ msrv := ``` | sed -E 's/^1\.([0-9]{2})$/1\.\1\.0/' ``` msrv_rustup := "+" + msrv - non_linux_all_features_list := ``` cargo metadata --format-version=1 \ | jq '.packages[] | select(.source == null) | .features | keys' \ @@ -20,19 +36,15 @@ non_linux_all_features_list := ``` --arg exclusions "tokio-uring,io-uring" \ 'add | unique | . - ($exclusions | split(",")) | join(",")' ``` - -all_crate_features := if os() == "linux" { - "--all-features" -} else { - "--features='" + non_linux_all_features_list + "'" -} +all_crate_features := if os() == "linux" { "--all-features" } else { "--features='" + non_linux_all_features_list + "'" } # Run Clippy over workspace. clippy toolchain="": cargo {{ toolchain }} clippy --workspace --all-targets {{ all_crate_features }} # Test workspace code. -[macos, windows] +[macos] +[windows] test toolchain="": cargo {{ toolchain }} test --lib --tests --package=actix-macros cargo {{ toolchain }} nextest run --workspace --exclude=actix-macros --no-default-features