Local runner for GitHub autograder
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add shell completions, man page

Ben C da0f6131 3bcd98c1

+99 -22
+42 -15
Cargo.lock
··· 27 27 28 28 [[package]] 29 29 name = "anstyle" 30 - version = "1.0.5" 30 + version = "1.0.6" 31 31 source = "registry+https://github.com/rust-lang/crates.io-index" 32 - checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220" 32 + checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" 33 33 34 34 [[package]] 35 35 name = "anstyle-parse" ··· 73 73 74 74 [[package]] 75 75 name = "clap" 76 - version = "4.4.18" 76 + version = "4.5.0" 77 77 source = "registry+https://github.com/rust-lang/crates.io-index" 78 - checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" 78 + checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f" 79 79 dependencies = [ 80 80 "clap_builder", 81 81 "clap_derive", ··· 83 83 84 84 [[package]] 85 85 name = "clap_builder" 86 - version = "4.4.18" 86 + version = "4.5.0" 87 87 source = "registry+https://github.com/rust-lang/crates.io-index" 88 - checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" 88 + checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99" 89 89 dependencies = [ 90 90 "anstream", 91 91 "anstyle", ··· 94 94 ] 95 95 96 96 [[package]] 97 + name = "clap_complete" 98 + version = "4.5.0" 99 + source = "registry+https://github.com/rust-lang/crates.io-index" 100 + checksum = "299353be8209bd133b049bf1c63582d184a8b39fd9c04f15fe65f50f88bdfe6c" 101 + dependencies = [ 102 + "clap", 103 + ] 104 + 105 + [[package]] 97 106 name = "clap_derive" 98 - version = "4.4.7" 107 + version = "4.5.0" 99 108 source = "registry+https://github.com/rust-lang/crates.io-index" 100 - checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" 109 + checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" 101 110 dependencies = [ 102 111 "heck", 103 112 "proc-macro2", ··· 107 116 108 117 [[package]] 109 118 name = "clap_lex" 110 - version = "0.6.0" 119 + version = "0.7.0" 120 + source = "registry+https://github.com/rust-lang/crates.io-index" 121 + checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 122 + 123 + [[package]] 124 + name = "clap_mangen" 125 + version = "0.2.20" 111 126 source = "registry+https://github.com/rust-lang/crates.io-index" 112 - checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" 127 + checksum = "e1dd95b5ebb5c1c54581dd6346f3ed6a79a3eef95dd372fc2ac13d535535300e" 128 + dependencies = [ 129 + "clap", 130 + "roff", 131 + ] 113 132 114 133 [[package]] 115 134 name = "colorchoice" ··· 138 157 139 158 [[package]] 140 159 name = "gh-grader-preview" 141 - version = "0.1.0" 160 + version = "0.2.0" 142 161 dependencies = [ 143 162 "anyhow", 144 163 "clap", 164 + "clap_complete", 145 165 "clap_derive", 166 + "clap_mangen", 146 167 "indicatif", 147 168 "regex", 148 169 "serde", ··· 158 179 159 180 [[package]] 160 181 name = "indicatif" 161 - version = "0.17.7" 182 + version = "0.17.8" 162 183 source = "registry+https://github.com/rust-lang/crates.io-index" 163 - checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" 184 + checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" 164 185 dependencies = [ 165 186 "console", 166 187 "instant", ··· 262 283 checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 263 284 264 285 [[package]] 286 + name = "roff" 287 + version = "0.2.1" 288 + source = "registry+https://github.com/rust-lang/crates.io-index" 289 + checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" 290 + 291 + [[package]] 265 292 name = "ryu" 266 293 version = "1.0.16" 267 294 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 300 327 301 328 [[package]] 302 329 name = "strsim" 303 - version = "0.10.0" 330 + version = "0.11.0" 304 331 source = "registry+https://github.com/rust-lang/crates.io-index" 305 - checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 332 + checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" 306 333 307 334 [[package]] 308 335 name = "syn"
+3 -1
Cargo.toml
··· 1 1 [package] 2 2 name = "gh-grader-preview" 3 - version = "0.1.0" 3 + version = "0.2.0" 4 4 edition = "2021" 5 5 6 6 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html ··· 8 8 [dependencies] 9 9 anyhow = "1.0.79" 10 10 clap = { version = "4.4.18", features = ["derive"] } 11 + clap_complete = "4.5.0" 11 12 clap_derive = "4.4.7" 13 + clap_mangen = "0.2.20" 12 14 indicatif = "0.17.7" 13 15 regex = "1.10.3" 14 16 serde = { version = "1.0.196", features = ["derive"] }
+3 -3
flake.lock
··· 2 2 "nodes": { 3 3 "nixpkgs": { 4 4 "locked": { 5 - "lastModified": 1706683685, 6 - "narHash": "sha256-FtPPshEpxH/ewBOsdKBNhlsL2MLEFv1hEnQ19f/bFsQ=", 5 + "lastModified": 1707451808, 6 + "narHash": "sha256-UwDBUNHNRsYKFJzyTMVMTF5qS4xeJlWoeyJf+6vvamU=", 7 7 "owner": "NixOS", 8 8 "repo": "nixpkgs", 9 - "rev": "5ad9903c16126a7d949101687af0aa589b1d7d3d", 9 + "rev": "442d407992384ed9c0e6d352de75b69079904e4e", 10 10 "type": "github" 11 11 }, 12 12 "original": {
+13 -3
flake.nix
··· 6 6 }; 7 7 8 8 outputs = { self, nixpkgs }: { 9 - packages.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.rustPlatform.buildRustPackage { 9 + packages.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.rustPlatform.buildRustPackage rec { 10 10 pname = "gh-grader-preview"; 11 - version = "0.1.0"; 11 + version = "0.2.0"; 12 12 src = ./.; 13 13 cargoLock = { 14 14 lockFile = ./Cargo.lock; 15 15 }; 16 + nativeBuildInputs = [ 17 + nixpkgs.legacyPackages.x86_64-linux.installShellFiles 18 + ]; 19 + postInstall = '' 20 + $out/bin/${pname} --man-page > ${pname}.0 21 + installManPage ${pname}.0 22 + $out/bin/${pname} --completions=bash > ${pname}.bash 23 + $out/bin/${pname} --completions=zsh > ${pname}.zsh 24 + $out/bin/${pname} --completions=fish > ${pname}.fish 25 + installShellCompletion gh-grader-preview.{bash,zsh,fish} 26 + ''; 16 27 doCheck = false; 17 28 meta = with nixpkgs.legacyPackages.x86_64-linux.lib; { 18 29 description = "Simple program for previewing how GitHub Classroom runs your project "; 19 30 homepage = "https://github.com/Bwc9876/gh-grader-preview"; 20 - mainProgram = "gh-grader-preview"; 21 31 license = licenses.mit; 22 32 }; 23 33 };
+10
src/cli.rs
··· 27 27 help = "Skip the first X tests, useful if you have tests that are purely informational" 28 28 )] 29 29 pub skip: Option<usize>, 30 + #[arg( 31 + long = "man-page", 32 + help = "Print the manpage for this command to stdout" 33 + )] 34 + pub man_gen: bool, 35 + #[arg( 36 + long = "completions", 37 + help = "Prints out the completions for the shell specified" 38 + )] 39 + pub completions: Option<String>, 30 40 }
+9
src/main.rs
··· 1 1 mod cli; 2 2 mod grader; 3 + mod meta; 3 4 mod runner; 4 5 5 6 use std::time::Duration; ··· 13 14 14 15 fn main() -> Result<()> { 15 16 let cli = Cli::parse(); 17 + 18 + if cli.man_gen { 19 + println!("{}", meta::gen_man_page()); 20 + return Ok(()); 21 + } else if let Some(shell) = cli.completions { 22 + println!("{}", meta::gen_completions(shell.parse().unwrap())); 23 + return Ok(()); 24 + } 16 25 17 26 let grader_data = AutoGraderData::get(cli.file)?; 18 27
+19
src/meta.rs
··· 1 + use clap::CommandFactory; 2 + use clap_complete::Shell; 3 + use clap_mangen::Man; 4 + 5 + use crate::cli::Cli; 6 + 7 + pub fn gen_man_page() -> String { 8 + let man = Man::new(Cli::command()); 9 + let mut buf: Vec<u8> = vec![]; 10 + man.render(&mut buf).unwrap(); 11 + String::from_utf8(buf).unwrap() 12 + } 13 + 14 + pub fn gen_completions(shell: Shell) -> String { 15 + let mut cmd = Cli::command(); 16 + let mut buf: Vec<u8> = vec![]; 17 + clap_complete::generate(shell, &mut cmd, "gh-grader-preview", &mut buf); 18 + String::from_utf8(buf).unwrap() 19 + }