git.delta.rocks / jrsonnet / refs/commits / 144b32110d8f

difftreelog

refactor replace structopt with clap

Yaroslav Bolyukin2022-02-16parent: #8d4a7a1.patch.diff
in: trunk

13 files changed

modifiedCargo.lockdiffbeforeafterboth
before · Cargo.lock
212 packageslockfile v3
modifiedcmds/fleet/Cargo.tomldiffbeforeafterboth
--- a/cmds/fleet/Cargo.toml
+++ b/cmds/fleet/Cargo.toml
@@ -20,7 +20,7 @@
 base64 = "0.13.0"
 chrono = { version = "0.4.19", features = ["serde"] }
 z85 = "3.0.3"
-structopt = "0.3.23"
+clap = { version = "3.1.0", features = ["derive", "env", "wrap_help", "unicode"] }
 tokio = { version = "1.14.0", features = ["full"] }
 tracing = "0.1.29"
 tracing-subscriber = { version = "0.3.3", features = ["fmt", "env-filter"] }
modifiedcmds/fleet/src/cmds/build_systems.rsdiffbeforeafterboth
--- a/cmds/fleet/src/cmds/build_systems.rs
+++ b/cmds/fleet/src/cmds/build_systems.rs
@@ -2,25 +2,28 @@
 
 use crate::{command::CommandExt, host::Config};
 use anyhow::Result;
-use structopt::StructOpt;
+use clap::Parser;
 use tokio::{process::Command, task::LocalSet, time::sleep};
 use tracing::{error, field, info, info_span, warn, Instrument};
 
-#[derive(StructOpt, Clone)]
+#[derive(Parser, Clone)]
 pub struct BuildSystems {
-	/// --builders arg for nix
-	#[structopt(long)]
-	builders: Option<String>,
 	/// Jobs to run locally
-	#[structopt(long)]
+	#[clap(long)]
 	jobs: Option<usize>,
 	/// Do not continue on error
-	#[structopt(long)]
+	#[clap(long)]
 	fail_fast: bool,
-	#[structopt(long)]
+	/// Run builds as sudo
+	#[clap(long)]
 	privileged_build: bool,
-	#[structopt(subcommand)]
+	#[clap(subcommand)]
 	subcommand: Subcommand,
+
+	/// --builders arg for nix
+	#[clap(long)]
+	builders: Option<String>,
+	/// --show-trace arg for nix
 	#[structopt(long)]
 	show_trace: bool,
 }
@@ -65,7 +68,7 @@
 	}
 }
 
-#[derive(StructOpt, Clone)]
+#[derive(Parser, Clone)]
 enum Subcommand {
 	/// Upload, but do not switch
 	Upload,
modifiedcmds/fleet/src/cmds/info.rsdiffbeforeafterboth
--- a/cmds/fleet/src/cmds/info.rs
+++ b/cmds/fleet/src/cmds/info.rs
@@ -2,29 +2,29 @@
 
 use crate::host::Config;
 use anyhow::{ensure, Result};
-use structopt::StructOpt;
+use clap::Parser;
 
-#[derive(StructOpt)]
+#[derive(Parser)]
 pub struct Info {
-	#[structopt(long)]
+	#[clap(long)]
 	json: bool,
-	#[structopt(subcommand)]
+	#[clap(subcommand)]
 	cmd: InfoCmd,
 }
 
-#[derive(StructOpt)]
+#[derive(Parser)]
 pub enum InfoCmd {
 	/// List hosts
 	ListHosts {
-		#[structopt(long)]
+		#[clap(long)]
 		tagged: Vec<String>,
 	},
 	/// List ips
 	HostIps {
 		host: String,
-		#[structopt(long)]
+		#[clap(long)]
 		external: bool,
-		#[structopt(long)]
+		#[clap(long)]
 		internal: bool,
 	},
 }
modifiedcmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth
--- a/cmds/fleet/src/cmds/secrets/mod.rs
+++ b/cmds/fleet/src/cmds/secrets/mod.rs
@@ -3,14 +3,14 @@
 	host::Config,
 };
 use anyhow::{bail, Result};
+use clap::Parser;
 use futures::{StreamExt, TryStreamExt};
 use std::{
 	io::{self, Cursor, Read},
 	path::PathBuf,
 };
-use structopt::StructOpt;
 
-#[derive(StructOpt)]
+#[derive(Parser)]
 pub enum Secrets {
 	/// Force load keys for all defined hosts
 	ForceKeys,
@@ -21,11 +21,11 @@
 		/// Secret owners
 		machines: Vec<String>,
 		/// Override secret if already present
-		#[structopt(long)]
+		#[clap(long)]
 		force: bool,
-		#[structopt(long)]
+		#[clap(long)]
 		public: Option<String>,
-		#[structopt(long)]
+		#[clap(long)]
 		public_file: Option<PathBuf>,
 	},
 	/// Add secret, data should be provided in stdin
@@ -35,11 +35,11 @@
 		/// Secret owners
 		machine: String,
 		/// Override secret if already present
-		#[structopt(long)]
+		#[clap(long)]
 		force: bool,
-		#[structopt(long)]
+		#[clap(long)]
 		public: Option<String>,
-		#[structopt(long)]
+		#[clap(long)]
 		public_file: Option<PathBuf>,
 	},
 }
modifiedcmds/fleet/src/command.rsdiffbeforeafterboth
--- a/cmds/fleet/src/command.rs
+++ b/cmds/fleet/src/command.rs
@@ -63,6 +63,7 @@
 
 #[derive(Deserialize, Debug)]
 #[serde(rename_all = "camelCase", tag = "action")]
+#[allow(dead_code)]
 enum NixLog {
 	Msg {
 		level: u32,
modifiedcmds/fleet/src/host.rsdiffbeforeafterboth
--- a/cmds/fleet/src/host.rs
+++ b/cmds/fleet/src/host.rs
@@ -8,9 +8,8 @@
 };
 
 use anyhow::Result;
+use clap::{ArgGroup, Parser};
 use serde::de::DeserializeOwned;
-use structopt::clap::ArgGroup;
-use structopt::StructOpt;
 use tokio::process::Command;
 
 use crate::{command::CommandExt, fleetdata::FleetData};
@@ -121,22 +120,25 @@
 	}
 }
 
-#[derive(StructOpt, Clone)]
-#[structopt(group = ArgGroup::with_name("target_hosts"))]
+#[derive(Parser, Clone)]
+#[clap(group = ArgGroup::new("target_hosts"))]
 pub struct FleetOpts {
 	/// All hosts except those would be skipped
-	#[structopt(long, number_of_values = 1, group = "target_hosts")]
+	#[clap(long, number_of_values = 1, group = "target_hosts")]
 	only: Vec<String>,
 
 	/// Hosts to skip
-	#[structopt(long, number_of_values = 1, group = "target_hosts")]
+	#[clap(long, number_of_values = 1, group = "target_hosts")]
 	skip: Vec<String>,
 
 	/// Host, which should be threaten as current machine
-	#[structopt(long)]
+	#[clap(long)]
 	pub localhost: Option<String>,
 
-	#[structopt(long, default_value = "x86_64-linux")]
+	// TODO: unhardcode x86_64-linux
+	/// Override detected system for host, to perform builds via
+	/// binfmt-declared qemu instead of trying to crosscompile
+	#[clap(long, default_value = "x86_64-linux")]
 	pub local_system: String,
 }
 
modifiedcmds/fleet/src/main.rsdiffbeforeafterboth
--- a/cmds/fleet/src/main.rs
+++ b/cmds/fleet/src/main.rs
@@ -8,35 +8,30 @@
 use std::io;
 
 use anyhow::{anyhow, Result};
-use structopt::clap::AppSettings::*;
-use structopt::StructOpt;
+use clap::Parser;
 
 use cmds::{build_systems::BuildSystems, info::Info, secrets::Secrets};
 use host::{Config, FleetOpts};
 use tracing::{info, metadata::LevelFilter};
 use tracing_subscriber::EnvFilter;
 
-#[derive(StructOpt)]
+#[derive(Parser)]
 enum Opts {
 	/// Prepare systems for deployments
 	BuildSystems(BuildSystems),
 	/// Secret management
+	#[clap(subcommand)]
 	Secrets(Secrets),
 	/// Config parsing
 	Info(Info),
 }
 
-#[derive(StructOpt)]
-#[structopt(
-	version = "1.0",
-	author,
-	global_setting(ColorAuto),
-	global_setting(ColoredHelp)
-)]
+#[derive(Parser)]
+#[clap(version = "1.0", author)]
 struct RootOpts {
-	#[structopt(flatten)]
+	#[clap(flatten)]
 	fleet_opts: FleetOpts,
-	#[structopt(subcommand)]
+	#[clap(subcommand)]
 	command: Opts,
 }
 
@@ -64,7 +59,7 @@
 		.map_err(|e| anyhow!("Failed to initialize logger: {}", e))?;
 
 	info!("Starting");
-	let opts = RootOpts::from_args();
+	let opts = RootOpts::parse();
 	let config = opts.fleet_opts.build()?;
 
 	match run_command(&config, opts.command).await {
modifiedcmds/install-secrets/Cargo.tomldiffbeforeafterboth
--- a/cmds/install-secrets/Cargo.toml
+++ b/cmds/install-secrets/Cargo.toml
@@ -11,6 +11,6 @@
 nix = "0.23.1"
 serde = "1.0.130"
 serde_json = "1.0.68"
-structopt = "0.3.23"
+clap = { version = "3.1.0", features = ["derive", "env", "wrap_help", "unicode"] }
 tempfile = "3.2.0"
 z85 = "3.0.3"
modifiedcmds/install-secrets/src/main.rsdiffbeforeafterboth
--- a/cmds/install-secrets/src/main.rs
+++ b/cmds/install-secrets/src/main.rs
@@ -1,5 +1,6 @@
 use age::Decryptor;
 use anyhow::{anyhow, bail, Context, Result};
+use clap::Parser;
 use log::{error, warn};
 use nix::fcntl::{renameat2, RenameFlags};
 use nix::sys::stat::Mode;
@@ -15,10 +16,9 @@
 	os::unix::fs::DirBuilderExt,
 	path::{Path, PathBuf},
 };
-use structopt::StructOpt;
 
-#[derive(StructOpt)]
-#[structopt(author)]
+#[derive(Parser)]
+#[clap(author)]
 struct Opts {
 	data: PathBuf,
 }
@@ -132,7 +132,7 @@
 		.filter_level(log::LevelFilter::Info)
 		.init();
 
-	let opts = Opts::from_args();
+	let opts = Opts::parse();
 	let data = fs::read(&opts.data).context("failed to read secrets data")?;
 	let data_str = from_utf8(&data).context("failed to read data to string")?;
 	let data: Data = serde_json::from_str(data_str).context("failed to parse data")?;
addedflake.lockdiffbeforeafterboth
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,60 @@
+{
+  "nodes": {
+    "flake-utils": {
+      "locked": {
+        "lastModified": 1644229661,
+        "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1645034464,
+        "narHash": "sha256-kSag3x5ztMDlVsXHyviORtblKPVsfV8sGsN5f7Q48Ig=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "a6d6edf3533bb78164e8aab5fd89f59504ea9381",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nixos",
+        "ref": "staging-next",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-utils": "flake-utils",
+        "nixpkgs": "nixpkgs",
+        "rust-overlay": "rust-overlay"
+      }
+    },
+    "rust-overlay": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1644978925,
+        "narHash": "sha256-135oqknTCNLe62WpHdv18umHXxJVhzaA1SVBxxYHp/E=",
+        "owner": "oxalica",
+        "repo": "rust-overlay",
+        "rev": "e55ef9daac4ed57d7b30c649fdbc380c9c0f8e04",
+        "type": "github"
+      },
+      "original": {
+        "owner": "oxalica",
+        "repo": "rust-overlay",
+        "type": "github"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
modifiedpkgs/default.nixdiffbeforeafterboth
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -2,4 +2,5 @@
 with pkgs;
 {
   fleet-install-secrets = callPackage ./fleet-install-secrets.nix { };
+  fleet = callPackage ./fleet.nix { };
 }
addedpkgs/fleet.nixdiffbeforeafterboth
--- /dev/null
+++ b/pkgs/fleet.nix
@@ -0,0 +1,13 @@
+{ rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fleet";
+  version = "0.0.1";
+  name = "${pname}-${version}";
+
+  src = ../.;
+  cargoBuildFlags = "-p ${pname}";
+  cargoLock = {
+    lockFile = ../Cargo.lock;
+  };
+}