Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a2bb73b62 | ||
|
|
ec98d30b31 | ||
|
|
e099995f42 |
Generated
+1
-1
@@ -2472,7 +2472,7 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xboctploy"
|
||||
name = "xboct-deploy"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
|
||||
+6
-2
@@ -1,10 +1,10 @@
|
||||
[package]
|
||||
name = "xboctploy"
|
||||
name = "xboct-deploy"
|
||||
version = "0.1.0"
|
||||
description = "Lightweight CLI to deploy hobby projects from a local PC to a VPS over SSH"
|
||||
license = "MIT"
|
||||
readme = "README.md"
|
||||
repository = "https://xboct-git.duckdns.org/Ku6epXBOCTuK/xboctploy"
|
||||
repository = "https://xboct-git.duckdns.org/Ku6epXBOCTuK/xboct-deploy"
|
||||
keywords = ["deploy", "ssh", "sftp", "vps", "cli"]
|
||||
categories = ["command-line-utilities", "development-tools"]
|
||||
rust-version = "1.88"
|
||||
@@ -28,3 +28,7 @@ ssh2-config = "0.7.2"
|
||||
tokio = { version = "1.53.1", features = ["rt", "time", "io-util"] }
|
||||
toml = "1.1.4"
|
||||
walkdir = "2.5.0"
|
||||
|
||||
[[bin]]
|
||||
name = "xd"
|
||||
path = "src/main.rs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# xboctploy
|
||||
# xboct-deploy
|
||||
|
||||
Легковесная CLI-утилита на Rust для централизованного деплоя хобби-проектов
|
||||
(Node.js, Rust) с локального ПК на слабую VPS по SSH.
|
||||
@@ -19,12 +19,12 @@ cargo install --path .
|
||||
## Быстрый старт
|
||||
|
||||
```sh
|
||||
xboctploy --list # показать проекты из конфига
|
||||
xboctploy --list-servers # показать серверы из конфига
|
||||
xboctploy --pick # интерактивно выбрать проект (нечёткий поиск)
|
||||
xboctploy --dry-run demo # напечатать план деплоя без выполнения
|
||||
xboctploy demo # задеплоить проект demo
|
||||
xboctploy --this # задеплоить проект текущей папки (глобальный конфиг)
|
||||
xboct-deploy --list # показать проекты из конфига
|
||||
xboct-deploy --list-servers # показать серверы из конфига
|
||||
xboct-deploy --pick # интерактивно выбрать проект (нечёткий поиск)
|
||||
xboct-deploy --dry-run demo # напечатать план деплоя без выполнения
|
||||
xboct-deploy demo # задеплоить проект demo
|
||||
xboct-deploy --this # задеплоить проект текущей папки (глобальный конфиг)
|
||||
```
|
||||
|
||||
Вывод:
|
||||
@@ -43,7 +43,7 @@ Deploy successful! (total 2.3s)
|
||||
|
||||
1. `--config PATH`, если указан явно;
|
||||
2. `./deploy.toml` в текущей папке — удобно держать рядом с проектом и в тестах;
|
||||
3. глобальный `~/.config/xboctploy/deploy.toml` — запуск «из любой папки».
|
||||
3. глобальный `~/.config/xboct-deploy/deploy.toml` — запуск «из любой папки».
|
||||
|
||||
`--this` деплоит проект, чей `workdir` совпадает с текущей папкой; конфиг
|
||||
ищется по обычной цепочке, так что временный локальный `./deploy.toml`
|
||||
|
||||
+5
-4
@@ -4,11 +4,12 @@ use clap::{ArgGroup, Parser};
|
||||
|
||||
/// Deploy hobby projects from a local PC to a VPS over SSH.
|
||||
#[derive(Debug, Parser)]
|
||||
#[command(name = "xboctploy", version, about)]
|
||||
#[command(name = "xboct-deploy", version, about)]
|
||||
#[command(arg_required_else_help = true)]
|
||||
#[command(group = ArgGroup::new("target").required(true).args(["project", "list", "list_servers", "pick", "this"]))]
|
||||
pub struct Cli {
|
||||
/// Project name from deploy.toml
|
||||
#[arg(short, long)]
|
||||
pub project: Option<String>,
|
||||
/// Explicit path to the config file
|
||||
#[arg(long, value_name = "PATH")]
|
||||
@@ -17,15 +18,15 @@ pub struct Cli {
|
||||
#[arg(long)]
|
||||
pub dry_run: bool,
|
||||
/// List configured projects and exit
|
||||
#[arg(long)]
|
||||
#[arg(short, long)]
|
||||
pub list: bool,
|
||||
/// List configured servers and exit
|
||||
#[arg(long)]
|
||||
pub list_servers: bool,
|
||||
/// Interactively pick a project to deploy (fuzzy search)
|
||||
#[arg(long)]
|
||||
#[arg(short, long)]
|
||||
pub pick: bool,
|
||||
/// Deploy the project whose workdir matches the current folder (global config)
|
||||
#[arg(long)]
|
||||
#[arg(short, long)]
|
||||
pub this: bool,
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ use anyhow::{Context, Result, bail};
|
||||
use serde::Deserialize;
|
||||
|
||||
pub const CONFIG_FILE_NAME: &str = "deploy.toml";
|
||||
pub const GLOBAL_DIR: &str = "xboctploy";
|
||||
pub const GLOBAL_DIR: &str = "xboct-deploy";
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
@@ -423,7 +423,7 @@ commands = []
|
||||
|
||||
fn tmpdir(tag: &str) -> PathBuf {
|
||||
let dir =
|
||||
std::env::temp_dir().join(format!("xboctploy-tests-{}-{tag}", std::process::id()));
|
||||
std::env::temp_dir().join(format!("xboct-deploy-tests-{}-{tag}", std::process::id()));
|
||||
let _ = fs::remove_dir_all(&dir);
|
||||
fs::create_dir_all(&dir).unwrap();
|
||||
dir
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ mod tests {
|
||||
|
||||
fn tmpdir(tag: &str) -> PathBuf {
|
||||
let dir =
|
||||
std::env::temp_dir().join(format!("xboctploy-local-{}-{tag}", std::process::id()));
|
||||
std::env::temp_dir().join(format!("xboct-deploy-local-{}-{tag}", std::process::id()));
|
||||
let _ = fs::remove_dir_all(&dir);
|
||||
fs::create_dir_all(&dir).unwrap();
|
||||
dir
|
||||
|
||||
Reference in New Issue
Block a user