diff --git a/.gitignore b/.gitignore index 2feec03c1..4cb8939f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ ansible/inventory ansible/passwords/ +build/ +.idea/ diff --git a/docker/dev/deploy.sh b/docker/dev/deploy.sh index 4784a7427..64d815ade 100755 --- a/docker/dev/deploy.sh +++ b/docker/dev/deploy.sh @@ -6,10 +6,11 @@ new_tag="$1" git tag $new_tag # Setting the version on the front end -pushd ../../ui/ -node set_version.js -git add src/version.ts -popd +echo "export let version: string = '$(git describe --tags --long)';" > "ui/src/version.ts" +git add "ui/src/version.ts" +# Setting the version on the backend +echo "pub const VERSION: &'static str = \"$(git describe --tags --long)\";" > "server/src/version.rs" +git add "server/src/version.rs" # Changing the docker-compose prod sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../prod/docker-compose.yml diff --git a/server/src/lib.rs b/server/src/lib.rs index 162d95786..b5c26762f 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -27,6 +27,8 @@ pub mod apub; pub mod db; pub mod schema; pub mod websocket; +pub mod nodeinfo; +pub mod version; use chrono::{DateTime, NaiveDateTime, Utc}; use dotenv::dotenv; diff --git a/server/src/main.rs b/server/src/main.rs index 392b0bbb9..f930f2eda 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -5,13 +5,12 @@ extern crate diesel_migrations; use actix::prelude::*; use actix_files::NamedFile; use actix_web::*; -use actix_web::web::Json; use actix_web_actors::ws; use lemmy_server::db::establish_connection; use lemmy_server::websocket::server::*; use std::env; use std::time::{Duration, Instant}; -use serde::Serialize; +use lemmy_server::nodeinfo; embed_migrations!(); @@ -199,7 +198,7 @@ fn main() { .service(web::resource("/").to(index)) // static resources .service(actix_files::Files::new("/static", front_end_dir())) - .route("/nodeinfo/2.0.json", web::get().to(node_info)) + .route("/nodeinfo/2.0.json", web::get().to(nodeinfo::node_info)) }) .bind("0.0.0.0:8536") .unwrap() @@ -209,56 +208,6 @@ fn main() { let _ = sys.run(); } -#[derive(Serialize)] -struct Software { - name: String, - version: String, -} - -#[derive(Serialize)] -struct Usage { - users: Users, - localPosts: i32, - localComments: i32, -} - -#[derive(Serialize)] -struct Users { - total: i32, -} - -#[derive(Serialize)] -struct NodeInfo { - version: String, - software: Software, - protocols: [String; 0], - usage: Usage, - openRegistrations: bool, -} - -fn node_info() -> Result> { - // TODO: get info from database - // TODO: need to get lemmy version from somewhere else - let conn = establish_connection(); - let userCount = User_::count(conn) - let json = Json(NodeInfo { - version: "2.0".to_string(), - software: Software { - name: "lemmy".to_string(), - version: "0.1".to_string() - }, - protocols: [], // TODO: activitypub once that is implemented - usage: Usage { - users: Users { - total: 123, - }, - localPosts: 123, - localComments: 123, - }, - openRegistrations: true }); - return Ok(json); -} - fn index() -> Result { Ok(NamedFile::open(front_end_dir() + "/index.html")?) } diff --git a/server/src/nodeinfo.rs b/server/src/nodeinfo.rs new file mode 100644 index 000000000..6790c0422 --- /dev/null +++ b/server/src/nodeinfo.rs @@ -0,0 +1,60 @@ +use actix_web::web::Json; +use serde::Serialize; +use crate::db::establish_connection; +use crate::db::community_view::SiteView; +use actix_web::*; +use failure::Error; +use crate::version; + +#[derive(Serialize)] +pub struct Software { + name: String, + version: String, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Usage { + users: Users, + local_posts: i64, + local_comments: i64, +} + +#[derive(Serialize)] +pub struct Users { + total: i64, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub struct NodeInfo { + version: String, + software: Software, + protocols: [String; 0], + usage: Usage, + open_registrations: bool, +} + +pub fn node_info() -> Result, Error> { + let conn = establish_connection(); + let site_view = match SiteView::read(&conn) { + Ok(site_view) => site_view, + Err(_e) => return Err(_e)?, + }; + let json = Json(NodeInfo { + version: "2.0".to_string(), + software: Software { + name: "lemmy".to_string(), + version: version::VERSION.to_string(), + }, + protocols: [], // TODO: put 'activitypub' once that is implemented + usage: Usage { + users: Users { + total: site_view.number_of_users, + }, + local_posts: site_view.number_of_posts, + local_comments: site_view.number_of_comments, + }, + open_registrations: true }); + return Ok(json); +} \ No newline at end of file diff --git a/server/src/version.rs b/server/src/version.rs new file mode 100644 index 000000000..fe1bacb56 --- /dev/null +++ b/server/src/version.rs @@ -0,0 +1 @@ +pub const VERSION: &'static str = "v0.4.0-6-gd767e94"; diff --git a/ui/set_version.js b/ui/set_version.js deleted file mode 100755 index 218930852..000000000 --- a/ui/set_version.js +++ /dev/null @@ -1,11 +0,0 @@ -const fs = require('fs'); - -exports.setVersion = function() { - let revision = require('child_process') - .execSync('git describe --tags --long') - .toString().trim(); - let line = `export let version: string = "${revision}";`; - fs.writeFileSync("./src/version.ts", line); -} - -this.setVersion()