diff --git a/.cargo-husky/hooks/pre-commit b/.cargo-husky/hooks/pre-commit
deleted file mode 100755
index 06a5053..0000000
--- a/.cargo-husky/hooks/pre-commit
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-set -e
-
-echo "Running pre-push hook:"
-
-echo "Executing: cargo fmt"
-cargo fmt
-
-echo "Executing: make lint"
-make lint
-
-echo "Executing: cargo test"
-cargo test -- --skip prop_
diff --git a/.cargo-husky/hooks/pre-push b/.cargo-husky/hooks/pre-push
deleted file mode 100755
index 0ef71b8..0000000
--- a/.cargo-husky/hooks/pre-push
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-set -e
-
-echo "Running pre-push hook:"
-
-echo "Executing: cargo fmt --check"
-cargo fmt --check
-
-echo "Executing: make lint"
-make lint
-
-echo "Executing: cargo test"
-cargo test -- --skip prop_
diff --git a/Cargo.lock b/Cargo.lock
index c2c4c09..09acb76 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -224,12 +224,6 @@ version = "3.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
-[[package]]
-name = "cargo-husky"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad"
-
[[package]]
name = "cc"
version = "1.2.36"
@@ -714,7 +708,6 @@ dependencies = [
"assert_cmd",
"backtrace",
"base64",
- "cargo-husky",
"chacha20poly1305",
"chrono",
"clap",
diff --git a/Cargo.toml b/Cargo.toml
index 81b9620..ffbc095 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -48,7 +48,6 @@ tempfile = "3.10.1"
proptest = "1.5.0"
assert_cmd = "2.0.16"
predicates = "3.1.2"
-cargo-husky = { version = "1.5.0", default-features = false, features = ["user-hooks"] }
[[bin]]
diff --git a/README.md b/README.md
index e3b7a95..2ef9036 100644
--- a/README.md
+++ b/README.md
@@ -126,7 +126,7 @@ gman supports multiple providers. Select one as the default and then list provid
default_provider: local
providers:
- name: local
- provider: local
+ type: local
password_file: ~/.gman_password
# Optional Git sync settings for the 'local' provider
git_branch: main # Defaults to 'main'
@@ -191,7 +191,7 @@ For use across multiple systems, `gman` can sync with a remote Git repository (r
default_provider: local
providers:
- name: local
- provider: local
+ type: local
git_branch: main
git_remote_url: "git@github.com:my-user/gman-secrets.git"
git_user_name: "Your Name"
@@ -397,13 +397,13 @@ Example: two AWS Secrets Manager providers named `lab` and `prod`.
default_provider: prod
providers:
- name: lab
- provider: local
+ type: local
password_file: /home/user/.lab_gman_password
git_branch: main
git_remote_url: git@github.com:username/lab-vault.git
- name: prod
- provider: local
+ type: local
password_file: /home/user/.prod_gman_password
git_branch: main
git_remote_url: git@github.com:username/prod-vault.git
diff --git a/deployment/chocolatey/chocolateyinstall.ps1.template b/deployment/chocolatey/chocolateyinstall.ps1.template
new file mode 100644
index 0000000..c872b37
--- /dev/null
+++ b/deployment/chocolatey/chocolateyinstall.ps1.template
@@ -0,0 +1,20 @@
+$ErrorActionPreference = 'Stop';
+
+$PackageName = 'managarr'
+$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
+$url64 = 'https://github.com/Dark-Alex-17/managarr/releases/download/v$version/managarr-windows.tar.gz'
+$checksum64 = '$hash_64'
+
+$packageArgs = @{
+ packageName = $packageName
+ softwareName = $packageName
+ unzipLocation = $toolsDir
+ fileType = 'exe'
+ url = $url64
+ checksum = $checksum64
+ checksumType = 'sha256'
+
+}
+Install-ChocolateyZipPackage @packageArgs
+$File = Get-ChildItem -File -Path $env:ChocolateyInstall\lib\$packageName\tools\ -Filter *.tar
+Get-ChocolateyUnzip -fileFullPath $File.FullName -destination $env:ChocolateyInstall\lib\$packageName\tools\
diff --git a/deployment/chocolatey/managarr.nuspec.template b/deployment/chocolatey/managarr.nuspec.template
new file mode 100644
index 0000000..954bd9d
--- /dev/null
+++ b/deployment/chocolatey/managarr.nuspec.template
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ managarr
+ $version
+
+
+
+ Managarr
+ Alex Clarke
+ https://github.com/Dark-Alex-17/managarr
+ https://github.com/Dark-Alex-17/managarr/blob/main/LICENSE
+ true
+ https://github.com/Dark-Alex-17/managarr
+ https://github.com/Dark-Alex-17/managarr/blob/main/README.md
+ https://github.com/Dark-Alex-17/managarr/issues
+ cli cross-platform terminal servarr tui sonarr radarr rust
+ A TUI and CLI for managing *arr servers.
+
+ A TUI and CLI for managing *arr servers. Built with love in Rust!
+
+ **Usage**
+ To use, run `managarr` in a terminal.
+
+ For more [documentation and usage](https://github.com/Dark-Alex-17/managarr/blob/main/README.md), see the [official repo](https://github.com/Dark-Alex-17/managarr).
+
+
+ https://github.com/Dark-Alex-17/managarr/releases/tag/v$version/
+
+
+
+
+
+
+
diff --git a/deployment/chocolatey/packager.py b/deployment/chocolatey/packager.py
new file mode 100644
index 0000000..1c26f3c
--- /dev/null
+++ b/deployment/chocolatey/packager.py
@@ -0,0 +1,28 @@
+import hashlib
+import sys
+from string import Template
+
+sys.stdout.reconfigure(encoding='utf-8')
+args = sys.argv
+version = args[1].replace("v", "")
+template_file_path = args[2]
+generated_file_path = args[3]
+
+# Deployment files
+hash_64 = args[4].strip()
+
+print("Generating formula")
+print(" VERSION: %s" % version)
+print(" TEMPLATE PATH: %s" % template_file_path)
+print(" SAVING AT: %s" % generated_file_path)
+print(" HASH: %s" % hash_64)
+
+with open(template_file_path, "r", encoding="utf-8") as template_file:
+ template = Template(template_file.read())
+ substitute = template.safe_substitute(version=version, hash_64=hash_64)
+ print("\n================== Generated package file ==================\n")
+ print(substitute)
+ print("\n============================================================\n")
+
+ with open(generated_file_path, "w", encoding="utf-8") as generated_file:
+ generated_file.write(substitute)
diff --git a/deployment/homebrew/managarr.rb.template b/deployment/homebrew/managarr.rb.template
new file mode 100644
index 0000000..91c68fd
--- /dev/null
+++ b/deployment/homebrew/managarr.rb.template
@@ -0,0 +1,24 @@
+# Documentation: https://docs.brew.sh/Formula-Cookbook
+# https://rubydoc.brew.sh/Formula
+class Managarr < Formula
+ desc "A fast and simple dashboard for Kubernetes written in Rust"
+ homepage "https://github.com/Dark-Alex-17/managarr"
+ if OS.mac? and Hardware::CPU.arm?
+ url "https://github.com/Dark-Alex-17/managarr/releases/download/v$version/managarr-macos-arm64.tar.gz"
+ sha256 "$hash_mac_arm"
+ elsif OS.mac? and Hardware::CPU.intel?
+ url "https://github.com/Dark-Alex-17/managarr/releases/download/v$version/managarr-macos.tar.gz"
+ sha256 "$hash_mac"
+ else
+ url "https://github.com/Dark-Alex-17/managarr/releases/download/v$version/managarr-linux-musl.tar.gz"
+ sha256 "$hash_linux"
+ end
+ version "$version"
+ license "MIT"
+
+ def install
+ bin.install "managarr"
+ ohai "You're done! Run with \"managarr\""
+ ohai "For runtime flags, see \"managarr --help\""
+ end
+end
diff --git a/deployment/homebrew/packager.py b/deployment/homebrew/packager.py
new file mode 100644
index 0000000..e0263ff
--- /dev/null
+++ b/deployment/homebrew/packager.py
@@ -0,0 +1,31 @@
+import hashlib
+import sys
+from string import Template
+
+args = sys.argv
+version = args[1]
+template_file_path = args[2]
+generated_file_path = args[3]
+
+# Deployment files
+hash_mac = args[4].strip()
+hash_mac_arm = args[5].strip()
+hash_linux = args[6].strip()
+
+print("Generating formula")
+print(" VERSION: %s" % version)
+print(" TEMPLATE PATH: %s" % template_file_path)
+print(" SAVING AT: %s" % generated_file_path)
+print(" MAC HASH: %s" % hash_mac)
+print(" MAC ARM HASH: %s" % hash_mac_arm)
+print(" LINUX HASH: %s" % hash_linux)
+
+with open(template_file_path, "r") as template_file:
+ template = Template(template_file.read())
+ substitute = template.safe_substitute(version=version, hash_mac=hash_mac, hash_mac_arm=hash_mac_arm, hash_linux=hash_linux)
+ print("\n================== Generated package file ==================\n")
+ print(substitute)
+ print("\n============================================================\n")
+
+ with open(generated_file_path, "w") as generated_file:
+ generated_file.write(substitute)
diff --git a/src/config.rs b/src/config.rs
index 45fde61..c38384f 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -25,7 +25,7 @@ use anyhow::Result;
use log::debug;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
-use serde_with::{DisplayFromStr, skip_serializing_none};
+use serde_with::{skip_serializing_none, DisplayFromStr};
use std::borrow::Cow;
use std::path::PathBuf;
use validator::{Validate, ValidationError};
@@ -107,8 +107,8 @@ fn flags_or_files(run_config: &RunConfig) -> Result<(), ValidationError> {
/// use gman::providers::local::LocalProvider;
/// use validator::Validate;
///
-/// let provider = SupportedProvider::Local(LocalProvider);
-/// let provider_config = ProviderConfig { provider, ..Default::default() };
+/// let provider_type = SupportedProvider::Local(LocalProvider);
+/// let provider_config = ProviderConfig { provider_type, ..Default::default() };
/// provider_config.validate().unwrap();
/// ```
#[derive(Debug, Clone, Validate, Serialize, Deserialize, PartialEq, Eq)]
@@ -116,7 +116,8 @@ pub struct ProviderConfig {
#[validate(required)]
pub name: Option,
#[serde_as(as = "DisplayFromStr")]
- pub provider: SupportedProvider,
+ #[serde(rename(deserialize = "type"))]
+ pub provider_type: SupportedProvider,
pub password_file: Option,
pub git_branch: Option,
pub git_remote_url: Option,
@@ -130,7 +131,7 @@ impl Default for ProviderConfig {
fn default() -> Self {
Self {
name: Some("local".into()),
- provider: SupportedProvider::Local(LocalProvider),
+ provider_type: SupportedProvider::Local(LocalProvider),
password_file: Config::local_provider_password_file(),
git_branch: Some("main".into()),
git_remote_url: None,
@@ -146,11 +147,11 @@ impl ProviderConfig {
///
/// ```no_run
/// # use gman::config::ProviderConfig;
- /// let provider = ProviderConfig::default().extract_provider();
- /// println!("using provider: {}", provider.name());
+ /// let provider_config = ProviderConfig::default().extract_provider();
+ /// println!("using provider: {}", provider_config.name());
/// ```
pub fn extract_provider(&self) -> Box {
- match &self.provider {
+ match &self.provider_type {
SupportedProvider::Local(p) => {
debug!("Using local secret provider");
Box::new(*p)
@@ -171,8 +172,8 @@ impl ProviderConfig {
/// use gman::providers::local::LocalProvider;
/// use validator::Validate;
///
-/// let provider = SupportedProvider::Local(LocalProvider);
-/// let provider_config = ProviderConfig { provider, ..Default::default() };
+/// let provider_type = SupportedProvider::Local(LocalProvider);
+/// let provider_config = ProviderConfig { provider_type, ..Default::default() };
/// let cfg = Config{ providers: vec![provider_config], ..Default::default() };
/// cfg.validate().unwrap();
/// ```
@@ -256,7 +257,7 @@ pub fn load_config() -> Result {
config
.providers
.iter_mut()
- .filter(|p| matches!(p.provider, SupportedProvider::Local(_)))
+ .filter(|p| matches!(p.provider_type, SupportedProvider::Local(_)))
.for_each(|p| {
if p.password_file.is_none()
&& let Some(local_password_file) = Config::local_provider_password_file()
diff --git a/tests/bin/cli_tests.rs b/tests/bin/cli_tests.rs
index 5a5ad56..c5b8037 100644
--- a/tests/bin/cli_tests.rs
+++ b/tests/bin/cli_tests.rs
@@ -24,7 +24,7 @@ fn write_yaml_config(xdg_config_home: &Path, password_file: &Path, run_profile:
r#"default_provider: local
providers:
- name: local
- provider: local
+ type: local
password_file: {}
run_configs:
- name: {}
@@ -38,7 +38,7 @@ run_configs:
r#"default_provider: local
providers:
- name: local
- provider: local
+ type: local
password_file: {}
"#,
password_file.display()
diff --git a/tests/config_tests.rs b/tests/config_tests.rs
index 2290427..daefb53 100644
--- a/tests/config_tests.rs
+++ b/tests/config_tests.rs
@@ -1,8 +1,8 @@
#[cfg(test)]
mod tests {
use gman::config::{Config, ProviderConfig, RunConfig};
- use gman::providers::SupportedProvider;
use gman::providers::local::LocalProvider;
+ use gman::providers::SupportedProvider;
use pretty_assertions::assert_eq;
use validator::Validate;
@@ -165,7 +165,7 @@ mod tests {
fn test_provider_config_valid() {
let config = ProviderConfig {
name: Some("local-test".to_string()),
- provider: SupportedProvider::Local(LocalProvider),
+ provider_type: SupportedProvider::Local(LocalProvider),
password_file: None,
git_branch: None,
git_remote_url: None,
@@ -181,7 +181,7 @@ mod tests {
fn test_provider_config_invalid_email() {
let config = ProviderConfig {
name: Some("local-test".to_string()),
- provider: SupportedProvider::Local(LocalProvider),
+ provider_type: SupportedProvider::Local(LocalProvider),
password_file: None,
git_branch: None,
git_remote_url: None,
@@ -197,7 +197,7 @@ mod tests {
fn test_provider_config_missing_name() {
let config = ProviderConfig {
name: None,
- provider: SupportedProvider::Local(LocalProvider),
+ provider_type: SupportedProvider::Local(LocalProvider),
password_file: None,
git_branch: None,
git_remote_url: None,