Include version info in builds
This commit is contained in:
		
							parent
							
								
									d26ff4a7cb
								
							
						
					
					
						commit
						a53c8a0a63
					
				
					 8 changed files with 110 additions and 21 deletions
				
			
		
							
								
								
									
										1
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							|  | @ -1969,6 +1969,7 @@ dependencies = [ | ||||||
|  "sled", |  "sled", | ||||||
|  "structopt", |  "structopt", | ||||||
|  "thiserror", |  "thiserror", | ||||||
|  |  "toml", | ||||||
|  "tracing", |  "tracing", | ||||||
|  "tracing-actix-web", |  "tracing-actix-web", | ||||||
|  "tracing-error", |  "tracing-error", | ||||||
|  |  | ||||||
|  | @ -73,6 +73,7 @@ branch = "asonix/tracing-error-work-around" | ||||||
| anyhow = "1.0" | anyhow = "1.0" | ||||||
| dotenv = "0.15.0" | dotenv = "0.15.0" | ||||||
| ructe = { version = "0.13.0", features = ["sass", "mime03"] } | ructe = { version = "0.13.0", features = ["sass", "mime03"] } | ||||||
|  | toml = "0.5.8" | ||||||
| 
 | 
 | ||||||
| [profile.dev.package.rsa] | [profile.dev.package.rsa] | ||||||
| opt-level = 3 | opt-level = 3 | ||||||
|  |  | ||||||
							
								
								
									
										44
									
								
								src/build.rs
									
										
									
									
									
								
							
							
						
						
									
										44
									
								
								src/build.rs
									
										
									
									
									
								
							|  | @ -1,8 +1,52 @@ | ||||||
| use ructe::Ructe; | use ructe::Ructe; | ||||||
|  | use std::{fs::File, io::Read, path::Path, process::Command}; | ||||||
|  | 
 | ||||||
|  | fn git_info() { | ||||||
|  |     if let Ok(output) = Command::new("git").args(["rev-parse", "HEAD"]).output() { | ||||||
|  |         if output.status.success() { | ||||||
|  |             let git_hash = String::from_utf8_lossy(&output.stdout); | ||||||
|  |             println!("cargo:rustc-env=GIT_HASH={}", git_hash); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if let Ok(output) = Command::new("git") | ||||||
|  |         .args(["rev-parse", "--abbrev-ref", "HEAD"]) | ||||||
|  |         .output() | ||||||
|  |     { | ||||||
|  |         if output.status.success() { | ||||||
|  |             let git_branch = String::from_utf8_lossy(&output.stdout); | ||||||
|  |             println!("cargo:rustc-env=GIT_BRANCH={}", git_branch); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn version_info() -> Result<(), anyhow::Error> { | ||||||
|  |     let cargo_toml = Path::new(&std::env::var("CARGO_MANIFEST_DIR")?).join("Cargo.toml"); | ||||||
|  | 
 | ||||||
|  |     let mut file = File::open(&cargo_toml)?; | ||||||
|  | 
 | ||||||
|  |     let mut cargo_data = String::new(); | ||||||
|  |     file.read_to_string(&mut cargo_data)?; | ||||||
|  | 
 | ||||||
|  |     let data: toml::Value = toml::from_str(&cargo_data)?; | ||||||
|  | 
 | ||||||
|  |     if let Some(version) = data["package"]["version"].as_str() { | ||||||
|  |         println!("cargo:rustc-env=PKG_VERSION={}", version); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if let Some(name) = data["package"]["name"].as_str() { | ||||||
|  |         println!("cargo:rustc-env=PKG_NAME={}", name); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| fn main() -> Result<(), anyhow::Error> { | fn main() -> Result<(), anyhow::Error> { | ||||||
|     dotenv::dotenv().ok(); |     dotenv::dotenv().ok(); | ||||||
| 
 | 
 | ||||||
|  |     git_info(); | ||||||
|  |     version_info()?; | ||||||
|  | 
 | ||||||
|     let mut ructe = Ructe::from_env()?; |     let mut ructe = Ructe::from_env()?; | ||||||
|     let mut statics = ructe.statics()?; |     let mut statics = ructe.statics()?; | ||||||
|     statics.add_sass_file("scss/index.scss")?; |     statics.add_sass_file("scss/index.scss")?; | ||||||
|  |  | ||||||
|  | @ -144,12 +144,49 @@ impl Config { | ||||||
|         format!("relay@{}", self.hostname) |         format!("relay@{}", self.hostname) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub(crate) fn software_name(&self) -> String { |     pub(crate) fn software_name() -> &'static str { | ||||||
|         "AodeRelay".to_owned() |         "AodeRelay" | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub(crate) fn software_version(&self) -> String { |     pub(crate) fn software_version() -> String { | ||||||
|         "v0.3.0-main".to_owned() |         if let Some(git) = Self::git_version() { | ||||||
|  |             return format!("v{}-{}", Self::version(), git); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         format!("v{}", Self::version()) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn git_version() -> Option<String> { | ||||||
|  |         let branch = Self::git_branch()?; | ||||||
|  |         let hash = Self::git_hash()?; | ||||||
|  | 
 | ||||||
|  |         Some(format!("{}-{}", branch, hash)) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn name() -> &'static str { | ||||||
|  |         env!("PKG_NAME") | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn version() -> &'static str { | ||||||
|  |         env!("PKG_VERSION") | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn git_branch() -> Option<&'static str> { | ||||||
|  |         option_env!("GIT_BRANCH") | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn git_hash() -> Option<&'static str> { | ||||||
|  |         option_env!("GIT_HASH") | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub(crate) fn user_agent(&self) -> String { | ||||||
|  |         format!( | ||||||
|  |             "{} ({}/{}; +{})", | ||||||
|  |             Self::software_name(), | ||||||
|  |             Self::name(), | ||||||
|  |             Self::software_version(), | ||||||
|  |             self.generate_url(UrlKind::Index), | ||||||
|  |         ) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub(crate) fn source_code(&self) -> &Url { |     pub(crate) fn source_code(&self) -> &Url { | ||||||
|  |  | ||||||
|  | @ -48,12 +48,7 @@ impl State { | ||||||
|         Requests::new( |         Requests::new( | ||||||
|             self.config.generate_url(UrlKind::MainKey).to_string(), |             self.config.generate_url(UrlKind::MainKey).to_string(), | ||||||
|             self.private_key.clone(), |             self.private_key.clone(), | ||||||
|             format!( |             self.config.user_agent(), | ||||||
|                 "Actix Web 4.0.0-beta.9 ({}/{}; +{})", |  | ||||||
|                 self.config.software_name(), |  | ||||||
|                 self.config.software_version(), |  | ||||||
|                 self.config.generate_url(UrlKind::Index), |  | ||||||
|             ), |  | ||||||
|             self.breakers.clone(), |             self.breakers.clone(), | ||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								src/main.rs
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								src/main.rs
									
										
									
									
									
								
							|  | @ -1,3 +1,4 @@ | ||||||
|  | use activitystreams::url::Url; | ||||||
| use actix_web::{web, App, HttpServer}; | use actix_web::{web, App, HttpServer}; | ||||||
| use opentelemetry::{sdk::Resource, KeyValue}; | use opentelemetry::{sdk::Resource, KeyValue}; | ||||||
| use opentelemetry_otlp::WithExportConfig; | use opentelemetry_otlp::WithExportConfig; | ||||||
|  | @ -27,12 +28,10 @@ use self::{ | ||||||
|     routes::{actor, inbox, index, nodeinfo, nodeinfo_meta, statics}, |     routes::{actor, inbox, index, nodeinfo, nodeinfo_meta, statics}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #[actix_rt::main] | fn init_subscriber( | ||||||
| async fn main() -> Result<(), anyhow::Error> { |     software_name: &'static str, | ||||||
|     dotenv::dotenv().ok(); |     opentelemetry_url: Option<&Url>, | ||||||
| 
 | ) -> Result<(), anyhow::Error> { | ||||||
|     let config = Config::build()?; |  | ||||||
| 
 |  | ||||||
|     LogTracer::init()?; |     LogTracer::init()?; | ||||||
| 
 | 
 | ||||||
|     let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")); |     let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")); | ||||||
|  | @ -46,12 +45,12 @@ async fn main() -> Result<(), anyhow::Error> { | ||||||
|         .with(ErrorLayer::default()) |         .with(ErrorLayer::default()) | ||||||
|         .with(format_layer); |         .with(format_layer); | ||||||
| 
 | 
 | ||||||
|     if let Some(url) = config.opentelemetry_url() { |     if let Some(url) = opentelemetry_url { | ||||||
|         let tracer = |         let tracer = | ||||||
|             opentelemetry_otlp::new_pipeline() |             opentelemetry_otlp::new_pipeline() | ||||||
|                 .tracing() |                 .tracing() | ||||||
|                 .with_trace_config(opentelemetry::sdk::trace::config().with_resource( |                 .with_trace_config(opentelemetry::sdk::trace::config().with_resource( | ||||||
|                     Resource::new(vec![KeyValue::new("service.name", config.software_name())]), |                     Resource::new(vec![KeyValue::new("service.name", software_name)]), | ||||||
|                 )) |                 )) | ||||||
|                 .with_exporter( |                 .with_exporter( | ||||||
|                     opentelemetry_otlp::new_exporter() |                     opentelemetry_otlp::new_exporter() | ||||||
|  | @ -68,6 +67,17 @@ async fn main() -> Result<(), anyhow::Error> { | ||||||
|         tracing::subscriber::set_global_default(subscriber)?; |         tracing::subscriber::set_global_default(subscriber)?; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[actix_rt::main] | ||||||
|  | async fn main() -> Result<(), anyhow::Error> { | ||||||
|  |     dotenv::dotenv().ok(); | ||||||
|  | 
 | ||||||
|  |     let config = Config::build()?; | ||||||
|  | 
 | ||||||
|  |     init_subscriber(Config::software_name(), config.opentelemetry_url())?; | ||||||
|  | 
 | ||||||
|     let db = Db::build(&config)?; |     let db = Db::build(&config)?; | ||||||
| 
 | 
 | ||||||
|     let args = Args::new(); |     let args = Args::new(); | ||||||
|  | @ -133,6 +143,7 @@ async fn main() -> Result<(), anyhow::Error> { | ||||||
|     .bind(bind_address)? |     .bind(bind_address)? | ||||||
|     .run() |     .run() | ||||||
|     .await?; |     .await?; | ||||||
|  | 
 | ||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,8 +31,8 @@ pub(crate) async fn route( | ||||||
|     web::Json(NodeInfo { |     web::Json(NodeInfo { | ||||||
|         version: NodeInfoVersion, |         version: NodeInfoVersion, | ||||||
|         software: Software { |         software: Software { | ||||||
|             name: config.software_name().to_lowercase(), |             name: Config::software_name().to_lowercase(), | ||||||
|             version: config.software_version(), |             version: Config::software_version(), | ||||||
|         }, |         }, | ||||||
|         protocols: vec![Protocol::ActivityPub], |         protocols: vec![Protocol::ActivityPub], | ||||||
|         services: Services { |         services: Services { | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ | ||||||
|     <body> |     <body> | ||||||
|         <header> |         <header> | ||||||
|             <div class="header-text"> |             <div class="header-text"> | ||||||
|                 <h1>@config.software_name()<span class="smaller">@config.software_version()</span></h1> |                 <h1>@Config::software_name()<span class="smaller">@Config::software_version()</span></h1> | ||||||
|                 <p>on @config.hostname()</p> |                 <p>on @config.hostname()</p> | ||||||
|             </div> |             </div> | ||||||
|         </header> |         </header> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue