diff --git a/Cargo.lock b/Cargo.lock index 96c7fc4..08e6d22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -925,6 +925,15 @@ dependencies = [ "serde", ] +[[package]] +name = "built" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" +dependencies = [ + "git2", +] + [[package]] name = "bumpalo" version = "3.17.0" @@ -958,6 +967,8 @@ version = "1.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" dependencies = [ + "jobserver", + "libc", "shlex", ] @@ -1371,6 +1382,7 @@ dependencies = [ "azalea", "bevy_app", "bevy_log", + "built", "clap", "console-subscriber", "futures", @@ -1600,6 +1612,19 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "git2" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fda788993cc341f69012feba8bf45c0ba4f3291fcc08e214b4d5a7332d88aff" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glob" version = "0.3.2" @@ -2038,6 +2063,15 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.77" @@ -2063,6 +2097,18 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +[[package]] +name = "libgit2-sys" +version = "0.18.0+1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1a117465e7e1597e8febea8bb0c410f1c7fb93b1e1cddf34363f8390367ffec" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + [[package]] name = "libloading" version = "0.8.6" @@ -2079,6 +2125,18 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +[[package]] +name = "libz-sys" +version = "1.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -3639,6 +3697,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index 123e7ff..585ebf4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ name = "errornowatcher" version = "0.2.0" edition = "2024" +build = "build.rs" [profile.dev] opt-level = 1 @@ -14,12 +15,15 @@ codegen-units = 1 lto = true strip = true +[build-dependencies] +built = { version = "0", features = ["git2"] } + [dependencies] anyhow = "1" azalea = { git = "https://github.com/azalea-rs/azalea.git" } bevy_app = "0" bevy_log = "0" -clap = { version = "4", features = ["derive"] } +clap = { version = "4", features = ["derive", "string"] } console-subscriber = { version = "0", optional = true } futures = "0" futures-locks = "0" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..fa809bf --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + built::write_built_file().unwrap(); +} diff --git a/src/arguments.rs b/src/arguments.rs index 626f85e..06498f7 100644 --- a/src/arguments.rs +++ b/src/arguments.rs @@ -1,8 +1,10 @@ +use crate::build_info; use clap::Parser; use std::{net::SocketAddr, path::PathBuf}; /// A Minecraft utility bot #[derive(Parser)] +#[command(version = build_info::version_formatted())] pub struct Arguments { /// Path to main Lua file #[arg(short, long)] diff --git a/src/build_info.rs b/src/build_info.rs new file mode 100644 index 0000000..b7da405 --- /dev/null +++ b/src/build_info.rs @@ -0,0 +1,11 @@ +pub mod built { + include!(concat!(env!("OUT_DIR"), "/built.rs")); +} + +pub fn version_formatted() -> String { + format!( + "v{} ({})", + env!("CARGO_PKG_VERSION"), + built::GIT_COMMIT_HASH_SHORT.unwrap_or("unknown commit") + ) +} diff --git a/src/lua/block.rs b/src/lua/block.rs index 12ba1ea..cda10e5 100644 --- a/src/lua/block.rs +++ b/src/lua/block.rs @@ -4,7 +4,7 @@ use azalea::blocks::{ }; use mlua::{Function, Lua, Result, Table}; -pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> { +pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { globals.set( "get_block_from_state", lua.create_function(get_block_from_state)?, diff --git a/src/lua/events.rs b/src/lua/events.rs index d7da17f..658b772 100644 --- a/src/lua/events.rs +++ b/src/lua/events.rs @@ -3,7 +3,7 @@ use futures::executor::block_on; use mlua::{Function, Lua, Result, Table}; use std::time::{SystemTime, UNIX_EPOCH}; -pub fn register_functions(lua: &Lua, globals: &Table, event_listeners: ListenerMap) -> Result<()> { +pub fn register_globals(lua: &Lua, globals: &Table, event_listeners: ListenerMap) -> Result<()> { let m = event_listeners.clone(); globals.set( "add_listener", diff --git a/src/lua/logging.rs b/src/lua/logging.rs index ed073a4..b3def5a 100644 --- a/src/lua/logging.rs +++ b/src/lua/logging.rs @@ -1,7 +1,7 @@ use log::{debug, error, info, trace, warn}; use mlua::{Lua, Result, Table}; -pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> { +pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { globals.set( "error", lua.create_function(|_, message: String| { diff --git a/src/lua/mod.rs b/src/lua/mod.rs index 16e3221..094c2e5 100644 --- a/src/lua/mod.rs +++ b/src/lua/mod.rs @@ -9,7 +9,7 @@ pub mod player; pub mod system; pub mod vec3; -use crate::ListenerMap; +use crate::{ListenerMap, build_info::built}; use mlua::{Lua, Table}; use std::{io, time::Duration}; @@ -24,11 +24,15 @@ pub enum Error { ReadFile(io::Error), } -pub fn register_functions( +pub fn register_globals( lua: &Lua, globals: &Table, event_listeners: ListenerMap, ) -> mlua::Result<()> { + globals.set("CARGO_PKG_VERSION", env!("CARGO_PKG_VERSION"))?; + globals.set("GIT_COMMIT_HASH", built::GIT_COMMIT_HASH)?; + globals.set("GIT_COMMIT_HASH_SHORT", built::GIT_COMMIT_HASH_SHORT)?; + globals.set( "sleep", lua.create_async_function(async |_, duration: u64| { @@ -37,11 +41,11 @@ pub fn register_functions( })?, )?; - block::register_functions(lua, globals)?; - events::register_functions(lua, globals, event_listeners)?; - logging::register_functions(lua, globals)?; - nochatreports::register_functions(lua, globals)?; - system::register_functions(lua, globals) + block::register_globals(lua, globals)?; + events::register_globals(lua, globals, event_listeners)?; + logging::register_globals(lua, globals)?; + nochatreports::register_globals(lua, globals)?; + system::register_globals(lua, globals) } pub fn reload(lua: &Lua, sender: Option) -> Result<(), Error> { diff --git a/src/lua/nochatreports/mod.rs b/src/lua/nochatreports/mod.rs index e95049a..1cb7ba7 100644 --- a/src/lua/nochatreports/mod.rs +++ b/src/lua/nochatreports/mod.rs @@ -10,7 +10,7 @@ use ncr::{ utils::{prepend_header, trim_header}, }; -pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> { +pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { globals.set( "ncr_aes_key_from_passphrase", lua.create_function(|_, passphrase: Vec| { diff --git a/src/lua/system.rs b/src/lua/system.rs index 29e3d89..dac544f 100644 --- a/src/lua/system.rs +++ b/src/lua/system.rs @@ -6,7 +6,7 @@ use std::{ thread, }; -pub fn register_functions(lua: &Lua, globals: &Table) -> Result<()> { +pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> { globals.set( "system", lua.create_function(|_, (command, args): (String, Option>)| { diff --git a/src/main.rs b/src/main.rs index d2b5da3..7d58bd5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,14 @@ #![feature(let_chains)] mod arguments; +mod build_info; mod commands; mod events; mod http; mod lua; mod particle; +use arguments::Arguments; use azalea::{ DefaultBotPlugins, DefaultPlugins, brigadier::prelude::CommandDispatcher, prelude::*, }; @@ -46,14 +48,14 @@ async fn main() -> anyhow::Result<()> { #[cfg(feature = "console-subscriber")] console_subscriber::init(); - let args = arguments::Arguments::parse(); + let args = Arguments::parse(); let script_path = args.script.unwrap_or(PathBuf::from(DEFAULT_SCRIPT_PATH)); let event_listeners = Arc::new(RwLock::new(HashMap::new())); let lua = unsafe { Lua::unsafe_new() }; let globals = lua.globals(); globals.set("script_path", &*script_path)?; - lua::register_functions(&lua, &globals, event_listeners.clone())?; + lua::register_globals(&lua, &globals, event_listeners.clone())?; lua.load( read_to_string(script_path) .expect(&(DEFAULT_SCRIPT_PATH.to_owned() + " should be in current directory")),