From 1fce908ef5cca9300a6bb5d0a2efa358a20a0577 Mon Sep 17 00:00:00 2001 From: traxys Date: Sun, 21 Jul 2024 15:45:19 +0200 Subject: [PATCH] Import from template --- .envrc | 1 + .gitignore | 3 ++ Cargo.lock | 7 +++ Cargo.toml | 9 ++++ deny.toml | 4 ++ flake.lock | 121 +++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 3 ++ 8 files changed, 288 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 deny.toml create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 src/main.rs diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8799178 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +result* +/.direnv diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..dcd41ca --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "wiki-builder" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1c5a5df --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "wiki-builder" +version = "0.1.0" +edition = "2021" +license = "GPL3" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/deny.toml b/deny.toml new file mode 100644 index 0000000..0c2ea9c --- /dev/null +++ b/deny.toml @@ -0,0 +1,4 @@ +[licenses] +allow = [ + "GPL3" +] diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..07f8008 --- /dev/null +++ b/flake.lock @@ -0,0 +1,121 @@ +{ + "nodes": { + "advisory-db": { + "flake": false, + "locked": { + "lastModified": 1721383898, + "narHash": "sha256-oB7n3qZp0cVRiiFTSisg2eYfIbFXsbGWK/ZBD02Auq8=", + "owner": "rustsec", + "repo": "advisory-db", + "rev": "eb081cbca8853b7481aec2f194627fa639bc5e62", + "type": "github" + }, + "original": { + "owner": "rustsec", + "repo": "advisory-db", + "type": "github" + } + }, + "crane": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1721322122, + "narHash": "sha256-a0G1NvyXGzdwgu6e1HQpmK5R5yLsfxeBe07nNDyYd+g=", + "owner": "ipetkov", + "repo": "crane", + "rev": "8a68b987c476a33e90f203f0927614a75c3f47ea", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": [] + }, + "locked": { + "lastModified": 1721543262, + "narHash": "sha256-6m2G2pGmFjPGeXDs0FqhDfdACCCcFN3XMWHEyTTyTXo=", + "owner": "nix-community", + "repo": "fenix", + "rev": "a01667fc71674454dd9ec2669afc0b326a275796", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1721497942, + "narHash": "sha256-EDPL9qJfklXoowl3nEBmjDIqcvXKUZInt5n6CCc1Hn4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d43f0636fc9492e83be8bbb41f9595d7a87106b8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "advisory-db": "advisory-db", + "crane": "crane", + "fenix": "fenix", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..f1ade8a --- /dev/null +++ b/flake.nix @@ -0,0 +1,140 @@ +{ + description = "Build a cargo project"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + crane = { + url = "github:ipetkov/crane"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.rust-analyzer-src.follows = ""; + }; + + flake-utils.url = "github:numtide/flake-utils"; + + advisory-db = { + url = "github:rustsec/advisory-db"; + flake = false; + }; + }; + + outputs = + { + self, + nixpkgs, + crane, + fenix, + flake-utils, + advisory-db, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + + inherit (pkgs) lib; + + craneLib = crane.mkLib pkgs; + src = craneLib.cleanCargoSource ./.; + + # Common arguments can be set here to avoid repeating them later + commonArgs = { + inherit src; + strictDeps = true; + + buildInputs = [ ]; + + # Additional environment variables can be set directly + # MY_CUSTOM_VAR = "some value"; + }; + + craneLibLLvmTools = craneLib.overrideToolchain ( + fenix.packages.${system}.complete.withComponents [ + "cargo" + "llvm-tools" + "rustc" + ] + ); + + # Build *just* the cargo dependencies, so we can reuse + # all of that work (e.g. via cachix) when running in CI + cargoArtifacts = craneLib.buildDepsOnly commonArgs; + + # Build the actual crate itself, reusing the dependency + # artifacts from above. + wiki-builder = craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; }); + in + { + checks = { + # Build the crate as part of `nix flake check` for convenience + inherit wiki-builder; + + # Run clippy (and deny all warnings) on the crate source, + # again, reusing the dependency artifacts from above. + # + # Note that this is done as a separate derivation so that + # we can block the CI if there are issues here, but not + # prevent downstream consumers from building our crate by itself. + wiki-builder-clippy = craneLib.cargoClippy ( + commonArgs + // { + inherit cargoArtifacts; + cargoClippyExtraArgs = "--all-targets -- --deny warnings"; + } + ); + + wiki-builder-doc = craneLib.cargoDoc (commonArgs // { inherit cargoArtifacts; }); + + # Check formatting + wiki-builder-fmt = craneLib.cargoFmt { inherit src; }; + + # Audit dependencies + wiki-builder-audit = craneLib.cargoAudit { inherit src advisory-db; }; + + # Audit licenses + wiki-builder-deny = craneLib.cargoDeny { inherit src; }; + + # Run tests with cargo-nextest + # Consider setting `doCheck = false` on `wiki-builder` if you do not want + # the tests to run twice + wiki-builder-nextest = craneLib.cargoNextest ( + commonArgs + // { + inherit cargoArtifacts; + partitions = 1; + partitionType = "count"; + } + ); + }; + + packages = + { + default = wiki-builder; + } + // lib.optionalAttrs (!pkgs.stdenv.isDarwin) { + wiki-builder-llvm-coverage = craneLibLLvmTools.cargoLlvmCov (commonArgs // { inherit cargoArtifacts; }); + }; + + apps.default = flake-utils.lib.mkApp { drv = wiki-builder; }; + + devShells.default = craneLib.devShell { + # Inherit inputs from checks. + checks = self.checks.${system}; + + # Additional dev-shell environment variables can be set directly + # MY_CUSTOM_DEVELOPMENT_VAR = "something else"; + + # Extra inputs can be added here; cargo and rustc are provided by default. + packages = [ + # pkgs.ripgrep + ]; + }; + } + ); +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}