mirror of
https://github.com/atuinsh/atuin.git
synced 2024-11-25 01:34:13 +01:00
make atuin-server a standalone binary
This commit is contained in:
parent
1638cb57cb
commit
44780e4251
3
Cargo.lock
generated
3
Cargo.lock
generated
@ -100,7 +100,6 @@ dependencies = [
|
||||
"serde_json",
|
||||
"tiny-bip39",
|
||||
"tokio",
|
||||
"tracing-subscriber",
|
||||
"unicode-segmentation",
|
||||
"unicode-width",
|
||||
"whoami",
|
||||
@ -164,6 +163,7 @@ dependencies = [
|
||||
"base64 0.21.0",
|
||||
"chrono",
|
||||
"chronoutil",
|
||||
"clap",
|
||||
"config",
|
||||
"eyre",
|
||||
"fs-err",
|
||||
@ -178,6 +178,7 @@ dependencies = [
|
||||
"tower",
|
||||
"tower-http",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"uuid",
|
||||
"whoami",
|
||||
]
|
||||
|
@ -41,7 +41,7 @@ members = ["./atuin-client", "./atuin-server", "./atuin-common"]
|
||||
default = ["client", "sync", "server"]
|
||||
client = ["atuin-client"]
|
||||
sync = ["atuin-client/sync"]
|
||||
server = ["atuin-server", "tracing-subscriber"]
|
||||
server = ["atuin-server"]
|
||||
|
||||
[dependencies]
|
||||
atuin-server = { path = "atuin-server", version = "13.0.1", optional = true }
|
||||
@ -78,9 +78,3 @@ futures-util = "0.3"
|
||||
bitflags = "1.3"
|
||||
cassowary = "0.3"
|
||||
unicode-segmentation = "1.2"
|
||||
|
||||
[dependencies.tracing-subscriber]
|
||||
version = "0.3"
|
||||
default-features = false
|
||||
features = ["ansi", "fmt", "registry", "env-filter"]
|
||||
optional = true
|
||||
|
@ -16,6 +16,7 @@ chrono = { version = "0.4", features = ["serde"] }
|
||||
eyre = "0.6"
|
||||
uuid = { version = "1.2", features = ["v4"] }
|
||||
whoami = "1.1.2"
|
||||
clap = { version = "4.0.18", features = ["derive"] }
|
||||
config = { version = "0.13", default-features = false, features = ["toml"] }
|
||||
serde = { version = "1.0.145", features = ["derive"] }
|
||||
serde_json = "1.0.86"
|
||||
@ -34,8 +35,13 @@ http = "0.2"
|
||||
fs-err = "2.9"
|
||||
chronoutil = "0.2.3"
|
||||
tower = "0.4"
|
||||
tower-http = { version = "0.3", features = ["trace"] }
|
||||
tower-http = { version = "0.3.4", features = ["trace"] }
|
||||
reqwest = { version = "0.11", features = [
|
||||
"json",
|
||||
"rustls-tls-native-roots",
|
||||
], default-features = false }
|
||||
|
||||
[dependencies.tracing-subscriber]
|
||||
version = "0.3"
|
||||
default-features = false
|
||||
features = ["ansi", "fmt", "registry", "env-filter"]
|
||||
|
@ -3,9 +3,9 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
pub enum TimePeriod {
|
||||
YEAR,
|
||||
MONTH,
|
||||
DAY,
|
||||
Year,
|
||||
Month,
|
||||
Day,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
|
@ -364,7 +364,7 @@ impl Database for Postgres {
|
||||
// interpret the stored date with a different TZ
|
||||
|
||||
match period {
|
||||
TimePeriod::YEAR => {
|
||||
TimePeriod::Year => {
|
||||
let mut ret = HashMap::new();
|
||||
// First we need to work out how far back to calculate. Get the
|
||||
// oldest history item
|
||||
@ -390,7 +390,7 @@ impl Database for Postgres {
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
TimePeriod::MONTH => {
|
||||
TimePeriod::Month => {
|
||||
let mut ret = HashMap::new();
|
||||
|
||||
for month in 1..13 {
|
||||
@ -413,7 +413,7 @@ impl Database for Postgres {
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
TimePeriod::DAY => {
|
||||
TimePeriod::Day => {
|
||||
let mut ret = HashMap::new();
|
||||
|
||||
for day in 1..get_days_from_month(year as i32, month as u32) {
|
||||
|
@ -119,7 +119,7 @@ pub async fn calendar<DB: Database>(
|
||||
let db = &state.0.database;
|
||||
let focus = match focus {
|
||||
"year" => db
|
||||
.calendar(&user, TimePeriod::YEAR, *year, *month)
|
||||
.calendar(&user, TimePeriod::Year, *year, *month)
|
||||
.await
|
||||
.map_err(|_| {
|
||||
ErrorResponse::reply("failed to query calendar")
|
||||
@ -127,7 +127,7 @@ pub async fn calendar<DB: Database>(
|
||||
}),
|
||||
|
||||
"month" => db
|
||||
.calendar(&user, TimePeriod::MONTH, *year, *month)
|
||||
.calendar(&user, TimePeriod::Month, *year, *month)
|
||||
.await
|
||||
.map_err(|_| {
|
||||
ErrorResponse::reply("failed to query calendar")
|
||||
@ -135,7 +135,7 @@ pub async fn calendar<DB: Database>(
|
||||
}),
|
||||
|
||||
"day" => db
|
||||
.calendar(&user, TimePeriod::DAY, *year, *month)
|
||||
.calendar(&user, TimePeriod::Day, *year, *month)
|
||||
.await
|
||||
.map_err(|_| {
|
||||
ErrorResponse::reply("failed to query calendar")
|
||||
|
@ -3,20 +3,22 @@
|
||||
use std::net::{IpAddr, SocketAddr};
|
||||
|
||||
use axum::Server;
|
||||
use clap::Parser;
|
||||
use database::Postgres;
|
||||
use eyre::{Context, Result};
|
||||
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
|
||||
|
||||
use crate::settings::Settings;
|
||||
|
||||
pub mod auth;
|
||||
pub mod calendar;
|
||||
pub mod database;
|
||||
pub mod handlers;
|
||||
pub mod models;
|
||||
pub mod router;
|
||||
pub mod settings;
|
||||
mod auth;
|
||||
mod calendar;
|
||||
mod database;
|
||||
mod handlers;
|
||||
mod models;
|
||||
mod router;
|
||||
mod settings;
|
||||
|
||||
pub async fn launch(settings: Settings, host: String, port: u16) -> Result<()> {
|
||||
async fn launch(settings: Settings, host: String, port: u16) -> Result<()> {
|
||||
let host = host.parse::<IpAddr>()?;
|
||||
|
||||
let postgres = Postgres::new(settings.clone())
|
||||
@ -31,3 +33,41 @@ pub async fn launch(settings: Settings, host: String, port: u16) -> Result<()> {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[derive(Parser)]
|
||||
#[clap(infer_subcommands = true)]
|
||||
pub enum Cmd {
|
||||
/// Start the server
|
||||
Start {
|
||||
/// The host address to bind
|
||||
#[clap(long)]
|
||||
host: Option<String>,
|
||||
|
||||
/// The port to bind
|
||||
#[clap(long, short)]
|
||||
port: Option<u16>,
|
||||
},
|
||||
}
|
||||
|
||||
impl Cmd {
|
||||
#[tokio::main]
|
||||
pub async fn run(self) -> Result<()> {
|
||||
tracing_subscriber::registry()
|
||||
.with(fmt::layer())
|
||||
.with(EnvFilter::from_default_env())
|
||||
.init();
|
||||
|
||||
let settings = Settings::new().wrap_err("could not load server settings")?;
|
||||
|
||||
match self {
|
||||
Self::Start { host, port } => {
|
||||
let host = host
|
||||
.as_ref()
|
||||
.map_or(settings.host.clone(), std::string::ToString::to_string);
|
||||
let port = port.map_or(settings.port, |p| p);
|
||||
|
||||
launch(settings, host, port).await
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
39
atuin-server/src/main.rs
Normal file
39
atuin-server/src/main.rs
Normal file
@ -0,0 +1,39 @@
|
||||
#![warn(clippy::pedantic, clippy::nursery)]
|
||||
#![allow(clippy::use_self, clippy::missing_const_for_fn)] // not 100% reliable
|
||||
|
||||
use clap::Parser;
|
||||
use eyre::Result;
|
||||
|
||||
const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
static HELP_TEMPLATE: &str = "\
|
||||
{before-help}{name} {version}
|
||||
{author}
|
||||
{about}
|
||||
|
||||
{usage-heading}
|
||||
{usage}
|
||||
|
||||
{all-args}{after-help}";
|
||||
|
||||
/// Magical shell history
|
||||
#[derive(Parser)]
|
||||
#[command(
|
||||
author = "Ellie Huxtable <e@elm.sh>",
|
||||
version = VERSION,
|
||||
help_template(HELP_TEMPLATE),
|
||||
)]
|
||||
struct Atuin {
|
||||
#[command(subcommand)]
|
||||
atuin: atuin_server::Cmd,
|
||||
}
|
||||
|
||||
impl Atuin {
|
||||
fn run(self) -> Result<()> {
|
||||
self.atuin.run()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
Atuin::parse().run()
|
||||
}
|
@ -5,9 +5,6 @@ use eyre::Result;
|
||||
#[cfg(feature = "client")]
|
||||
mod client;
|
||||
|
||||
#[cfg(feature = "server")]
|
||||
mod server;
|
||||
|
||||
mod init;
|
||||
|
||||
mod contributors;
|
||||
@ -22,7 +19,7 @@ pub enum AtuinCmd {
|
||||
/// Start an atuin server
|
||||
#[cfg(feature = "server")]
|
||||
#[command(subcommand)]
|
||||
Server(server::Cmd),
|
||||
Server(atuin_server::Cmd),
|
||||
|
||||
/// Output shell setup
|
||||
Init(init::Cmd),
|
||||
|
@ -1,44 +0,0 @@
|
||||
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
|
||||
|
||||
use clap::Parser;
|
||||
use eyre::{Context, Result};
|
||||
|
||||
use atuin_server::{launch, settings::Settings};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[clap(infer_subcommands = true)]
|
||||
pub enum Cmd {
|
||||
/// Start the server
|
||||
Start {
|
||||
/// The host address to bind
|
||||
#[clap(long)]
|
||||
host: Option<String>,
|
||||
|
||||
/// The port to bind
|
||||
#[clap(long, short)]
|
||||
port: Option<u16>,
|
||||
},
|
||||
}
|
||||
|
||||
impl Cmd {
|
||||
#[tokio::main]
|
||||
pub async fn run(self) -> Result<()> {
|
||||
tracing_subscriber::registry()
|
||||
.with(fmt::layer())
|
||||
.with(EnvFilter::from_default_env())
|
||||
.init();
|
||||
|
||||
let settings = Settings::new().wrap_err("could not load server settings")?;
|
||||
|
||||
match self {
|
||||
Self::Start { host, port } => {
|
||||
let host = host
|
||||
.as_ref()
|
||||
.map_or(settings.host.clone(), std::string::ToString::to_string);
|
||||
let port = port.map_or(settings.port, |p| p);
|
||||
|
||||
launch(settings, host, port).await
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user