git.delta.rocks / jrsonnet / refs/commits / ea44e4495023

difftreelog

ci add pre-commit hook

Yaroslav Bolyukin2024-06-18parent: #8d39c73.patch.diff
in: master

5 files changed

modified.envrcdiffbeforeafterboth
--- a/.envrc
+++ b/.envrc
@@ -1 +1,8 @@
+RED='\033[0;31m'
+RESET='\033[0m'
+
 use flake
+
+if ! diff .github/hooks/pre-commit .git/hooks/pre-commit >/dev/null; then
+echo -e "${RED}Hooks are updated, read .github/hooks/pre-commit, and then install it with cp .github/hooks/pre-commit .git/hooks/pre-commit${RESET}"
+fi
added.github/hooks/pre-commitdiffbeforeafterboth
--- /dev/null
+++ b/.github/hooks/pre-commit
@@ -0,0 +1 @@
+cargo xtask lint
modifiedflake.nixdiffbeforeafterboth
--- a/flake.nix
+++ b/flake.nix
@@ -116,7 +116,7 @@
           };
         };
         devShells.default = craneLib.devShell {
-          nativeBuildInputs = with pkgs; [
+          packages = with pkgs; [
             alejandra
             cargo-edit
             cargo-asm
@@ -126,6 +126,9 @@
             lld
             hyperfine
             graphviz
+          ] ++ lib.optionals (!stdenv.isDarwin) [
+            valgrind
+            kcachegrind
           ];
         };
       }
modifiedxtask/Cargo.tomldiffbeforeafterboth
--- a/xtask/Cargo.toml
+++ b/xtask/Cargo.toml
@@ -15,3 +15,4 @@
 quote.workspace = true
 ungrammar.workspace = true
 xshell.workspace = true
+clap = {workspace = true, features = ["derive"]}
modifiedxtask/src/main.rsdiffbeforeafterboth
before · xtask/src/main.rs
1use anyhow::Result;23mod sourcegen;45fn main() -> Result<()> {6	sourcegen::generate_ungrammar()7}
after · xtask/src/main.rs
1use anyhow::Result;2use clap::Parser;3use xshell::{cmd, Shell};45mod sourcegen;67#[derive(Parser)]8enum Opts {9	/// Generate files for rowan parser10	Sourcegen,11	/// Profile file execution12	Profile {13		#[arg(long, default_value = "true")]14		hyperfine: bool,15		#[arg(long)]16		callgrind: bool,17		#[arg(long)]18		cachegrind: bool,19		#[arg(long, default_value = "x86_64-unknown-linux-gnu")]20		target: String,21		args: Vec<String>,22	},23	/// Run all lints enforced by this repo24	Lint {25		/// Also fix found issues when possible.26		#[arg(long)]27		fix: bool,28	},29}3031fn main() -> Result<()> {32	let sh = Shell::new()?;33	match Opts::parse() {34		Opts::Sourcegen => sourcegen::generate_ungrammar(),35		Opts::Profile {36			hyperfine,37			callgrind,38			cachegrind,39			args,40			target,41		} => {42			let out = sh.create_temp_dir()?;4344			// build-std45			cmd!(46				sh,47				"cargo build -Zbuild-std --target={target} --profile releasedebug"48			)49			.run()?;50			let built = format!("./target/{target}/releasedebug/jrsonnet");51			let bench_cmd = format!("{built} {}", args.join(" "));52			if hyperfine {53				cmd!(sh, "hyperfine {bench_cmd}").run()?;54			}55			if callgrind {56				let args = args.clone();57				let mut callgrind_out = out.path().to_owned();58				callgrind_out.push("callgrind.out.1");59				cmd!(sh, "valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes --callgrind-out-file={callgrind_out} {built} {args...}").run()?;60				cmd!(sh, "kcachegrind {callgrind_out}").run()?;61			}62			if cachegrind {63				let mut cachegrind_out = out.path().to_owned();64				cachegrind_out.push("cachegrind.out.1");65				cmd!(sh, "valgrind --tool=cachegrind --cachegrind-out-file={cachegrind_out} {built} {args...}").run()?;66				cmd!(sh, "kcachegrind {cachegrind_out}").run()?;67			}6869			Ok(())70		}71		Opts::Lint { fix } => {72			let fmt_check = if fix { None } else { Some("--check") };73			cmd!(sh, "cargo fmt {fmt_check...}").run()?;74			Ok(())75		}76	}77}