diff options
Diffstat (limited to 'xtask')
-rw-r--r-- | xtask/src/dist.rs | 79 | ||||
-rw-r--r-- | xtask/src/lib.rs | 42 | ||||
-rw-r--r-- | xtask/src/main.rs | 5 |
3 files changed, 84 insertions, 42 deletions
diff --git a/xtask/src/dist.rs b/xtask/src/dist.rs new file mode 100644 index 000000000..cdd3db21c --- /dev/null +++ b/xtask/src/dist.rs | |||
@@ -0,0 +1,79 @@ | |||
1 | use std::path::PathBuf; | ||
2 | |||
3 | use anyhow::Result; | ||
4 | |||
5 | use crate::{ | ||
6 | not_bash::{fs2, pushd, pwd, rm_rf, run}, | ||
7 | project_root, | ||
8 | }; | ||
9 | |||
10 | pub fn run_dist(nightly: bool) -> Result<()> { | ||
11 | let dist = project_root().join("dist"); | ||
12 | rm_rf(&dist)?; | ||
13 | fs2::create_dir_all(&dist)?; | ||
14 | |||
15 | if cfg!(target_os = "linux") { | ||
16 | dist_client(nightly)?; | ||
17 | } | ||
18 | dist_server()?; | ||
19 | Ok(()) | ||
20 | } | ||
21 | |||
22 | fn dist_client(nightly: bool) -> Result<()> { | ||
23 | let _d = pushd("./editors/code"); | ||
24 | |||
25 | let package_json_path = pwd().join("package.json"); | ||
26 | let original_package_json = fs2::read_to_string(&package_json_path)?; | ||
27 | let _restore = | ||
28 | Restore { path: package_json_path.clone(), contents: original_package_json.clone() }; | ||
29 | |||
30 | let mut package_json = original_package_json.replace(r#""enableProposedApi": true,"#, r#""#); | ||
31 | |||
32 | if nightly { | ||
33 | package_json = package_json | ||
34 | .replace(r#""name": "rust-analyzer""#, r#""name": "rust-analyzer-nightly""#) | ||
35 | .replace( | ||
36 | r#""displayName": "rust-analyzer""#, | ||
37 | r#""displayName": "rust-analyzer nightly""#, | ||
38 | ); | ||
39 | } | ||
40 | fs2::write(package_json_path, package_json)?; | ||
41 | |||
42 | run!("npx vsce package -o ../../dist/rust-analyzer.vsix")?; | ||
43 | Ok(()) | ||
44 | } | ||
45 | |||
46 | fn dist_server() -> Result<()> { | ||
47 | if cfg!(target_os = "linux") { | ||
48 | std::env::set_var("CC", "clang"); | ||
49 | run!("cargo build --package rust-analyzer --bin rust-analyzer --release --target x86_64-unknown-linux-musl")?; | ||
50 | run!("strip ./target/x86_64-unknown-linux-musl/release/rust-analyzer")?; | ||
51 | } else { | ||
52 | run!("cargo build --package rust-analyzer --bin rust-analyzer --release")?; | ||
53 | } | ||
54 | |||
55 | let (src, dst) = if cfg!(target_os = "linux") { | ||
56 | ("./target/x86_64-unknown-linux-musl/release/rust-analyzer", "./dist/rust-analyzer-linux") | ||
57 | } else if cfg!(target_os = "windows") { | ||
58 | ("/target/release/rust-analyzer.exe", "./dist/rust-analyzer-windows.exe") | ||
59 | } else if cfg!(target_os = "macos") { | ||
60 | ("/target/release/rust-analyzer", "./dist/rust-analyzer-mac") | ||
61 | } else { | ||
62 | panic!("Unsupported OS") | ||
63 | }; | ||
64 | |||
65 | fs2::copy(src, dst)?; | ||
66 | |||
67 | Ok(()) | ||
68 | } | ||
69 | |||
70 | struct Restore { | ||
71 | path: PathBuf, | ||
72 | contents: String, | ||
73 | } | ||
74 | |||
75 | impl Drop for Restore { | ||
76 | fn drop(&mut self) { | ||
77 | fs2::write(&self.path, &self.contents).unwrap(); | ||
78 | } | ||
79 | } | ||
diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs index 23f85b579..014b61b37 100644 --- a/xtask/src/lib.rs +++ b/xtask/src/lib.rs | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | pub mod not_bash; | 5 | pub mod not_bash; |
6 | pub mod install; | 6 | pub mod install; |
7 | pub mod dist; | ||
7 | pub mod pre_commit; | 8 | pub mod pre_commit; |
8 | 9 | ||
9 | pub mod codegen; | 10 | pub mod codegen; |
@@ -19,7 +20,7 @@ use std::{ | |||
19 | 20 | ||
20 | use crate::{ | 21 | use crate::{ |
21 | codegen::Mode, | 22 | codegen::Mode, |
22 | not_bash::{fs2, pushd, pwd, rm_rf, run}, | 23 | not_bash::{fs2, pushd, rm_rf, run}, |
23 | }; | 24 | }; |
24 | 25 | ||
25 | pub use anyhow::Result; | 26 | pub use anyhow::Result; |
@@ -205,42 +206,3 @@ Release: release:{}[] | |||
205 | fn is_release_tag(tag: &str) -> bool { | 206 | fn is_release_tag(tag: &str) -> bool { |
206 | tag.len() == "2020-02-24".len() && tag.starts_with(|c: char| c.is_ascii_digit()) | 207 | tag.len() == "2020-02-24".len() && tag.starts_with(|c: char| c.is_ascii_digit()) |
207 | } | 208 | } |
208 | |||
209 | pub fn run_dist(nightly: bool) -> Result<()> { | ||
210 | let dist = project_root().join("dist"); | ||
211 | rm_rf(&dist)?; | ||
212 | fs2::create_dir_all(&dist)?; | ||
213 | |||
214 | let _d = pushd("./editors/code"); | ||
215 | |||
216 | let package_json_path = pwd().join("package.json"); | ||
217 | let original_package_json = fs2::read_to_string(&package_json_path)?; | ||
218 | let _restore = | ||
219 | Restore { path: package_json_path.clone(), contents: original_package_json.clone() }; | ||
220 | |||
221 | let mut package_json = original_package_json.replace(r#""enableProposedApi": true,"#, r#""#); | ||
222 | |||
223 | if nightly { | ||
224 | package_json = package_json | ||
225 | .replace(r#""name": "rust-analyzer""#, r#""name": "rust-analyzer-nightly""#) | ||
226 | .replace( | ||
227 | r#""displayName": "rust-analyzer""#, | ||
228 | r#""displayName": "rust-analyzer nightly""#, | ||
229 | ); | ||
230 | } | ||
231 | fs2::write(package_json_path, package_json)?; | ||
232 | |||
233 | run!("npx vsce package -o {}/rust-analyzer.vsix", dist.display())?; | ||
234 | Ok(()) | ||
235 | } | ||
236 | |||
237 | struct Restore { | ||
238 | path: PathBuf, | ||
239 | contents: String, | ||
240 | } | ||
241 | |||
242 | impl Drop for Restore { | ||
243 | fn drop(&mut self) { | ||
244 | fs2::write(&self.path, &self.contents).unwrap(); | ||
245 | } | ||
246 | } | ||
diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 17a2f1c68..7c8ea9001 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs | |||
@@ -13,10 +13,11 @@ use std::env; | |||
13 | use pico_args::Arguments; | 13 | use pico_args::Arguments; |
14 | use xtask::{ | 14 | use xtask::{ |
15 | codegen::{self, Mode}, | 15 | codegen::{self, Mode}, |
16 | dist::run_dist, | ||
16 | install::{ClientOpt, InstallCmd, ServerOpt}, | 17 | install::{ClientOpt, InstallCmd, ServerOpt}, |
17 | not_bash::pushd, | 18 | not_bash::pushd, |
18 | pre_commit, project_root, run_clippy, run_dist, run_fuzzer, run_pre_cache, run_release, | 19 | pre_commit, project_root, run_clippy, run_fuzzer, run_pre_cache, run_release, run_rustfmt, |
19 | run_rustfmt, Result, | 20 | Result, |
20 | }; | 21 | }; |
21 | 22 | ||
22 | fn main() -> Result<()> { | 23 | fn main() -> Result<()> { |