Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita424d25

Browse files
authored
Install node and nvm (#968)
1 parentbeb8310 commita424d25

File tree

8 files changed

+130
-30
lines changed

8 files changed

+130
-30
lines changed

‎pgml-apps/cargo-pgml-components/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎pgml-apps/cargo-pgml-components/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name ="cargo-pgml-components"
3-
version ="0.1.7"
3+
version ="0.1.8"
44
edition ="2021"
55
authors = ["PostgresML <team@postgresml.org>"]
66
license ="MIT"

‎pgml-apps/cargo-pgml-components/src/frontend/javascript.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ use std::process::Command;
77

88
use convert_case::{Case,Casing};
99

10-
usecrate::util::{execute_command, info, unwrap_or_exit, warn};
10+
usecrate::frontend::tools::execute_with_nvm;
11+
usecrate::util::{info, unwrap_or_exit, warn};
1112

1213
/// The name of the JS file that imports all other JS files
1314
/// created in the modules.
@@ -99,7 +100,7 @@ pub fn bundle() {
99100
assemble_modules();
100101

101102
// Bundle JavaScript.
102-
unwrap_or_exit!(execute_command(
103+
unwrap_or_exit!(execute_with_nvm(
103104
Command::new(JS_COMPILER)
104105
.arg(MODULES_FILE)
105106
.arg("--file")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env bash
2+
export NVM_DIR="$HOME/.nvm"
3+
[-s"$NVM_DIR/nvm.sh" ]&&\."$NVM_DIR/nvm.sh"# This loads nvm
4+
[-s"$NVM_DIR/bash_completion" ]&&\."$NVM_DIR/bash_completion"# This loads nvm bash_completion
5+
6+
${@}

‎pgml-apps/cargo-pgml-components/src/frontend/sass.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use std::fs::{copy, read_to_string, remove_file, File};
55
use std::io::Write;
66
use std::process::Command;
77

8-
usecrate::util::{execute_command, info, unwrap_or_exit, warn};
8+
usecrate::frontend::tools::execute_with_nvm;
9+
usecrate::util::{info, unwrap_or_exit, warn};
910

1011
/// The name of the SASS file that imports all other SASS files
1112
/// created in the modules.
@@ -77,7 +78,7 @@ pub fn bundle() {
7778
cleanup_old_bundles();
7879

7980
// Build Sass.
80-
unwrap_or_exit!(execute_command(
81+
unwrap_or_exit!(execute_with_nvm(
8182
Command::new(SASS_COMPILER).arg(SASS_FILE).arg(CSS_FILE),
8283
));
8384

Lines changed: 82 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,102 @@
11
//! Tools required by us to build stuff.
22
3-
usecrate::util::{error, execute_command, unwrap_or_exit, warn};
3+
usecrate::util::{debug1, error, execute_command, unwrap_or_exit, warn};
4+
use std::fs::File;
5+
use std::io::Write;
46
use std::process::{exit,Command};
57

68
/// Required tools.
79
staticTOOLS:&[&str] =&["sass","rollup"];
10+
staticNVM_EXEC:&'staticstr ="/tmp/pgml-components-nvm.sh";
11+
staticNVM_SOURCE:&'staticstr ="https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh";
12+
staticNVM_SOURCE_DOWNLOADED:&'staticstr ="/tmp/pgml-components-nvm-source.sh";
813

914
/// Install any missing tools.
1015
pubfninstall(){
11-
ifletErr(err) =execute_command(Command::new("node").arg("--version")){
12-
error("Node is not installed. Install it with nvm or your system package manager.");
13-
debug!("{}", err);
14-
exit(1);
15-
}
16+
install_nvm_entrypoint();
17+
debug!("installed node entrypoint");
18+
install_node();
19+
debug!("installed node");
1620

1721
for toolinTOOLS{
18-
matchexecute_command(Command::new(tool).arg("--version")){
22+
matchexecute_with_nvm(Command::new(tool).arg("--version")){
1923
Ok(_) =>(),
2024
Err(err) =>{
21-
debug!("{}",err);
25+
debug1!(err);
2226
warn(&format!("installing {}", tool));
23-
unwrap_or_exit!(execute_command(
27+
unwrap_or_exit!(execute_with_nvm(
2428
Command::new("npm").arg("install").arg("-g").arg(tool)
2529
));
2630
}
2731
}
2832
}
2933
}
34+
35+
/// Execute a command making sure that nvm is available.
36+
pubfnexecute_with_nvm(command:&mutCommand) -> std::io::Result<String>{
37+
letmut cmd =Command::new(NVM_EXEC);
38+
cmd.arg(command.get_program());
39+
for argin command.get_args(){
40+
cmd.arg(arg);
41+
}
42+
execute_command(&mut cmd)
43+
}
44+
45+
/// Install the nvm entrypoint we provide into /tmp
46+
fninstall_nvm_entrypoint(){
47+
letmut file =unwrap_or_exit!(File::create(NVM_EXEC));
48+
unwrap_or_exit!(writeln!(&mut file,"{}", include_str!("nvm.sh")));
49+
drop(file);
50+
51+
unwrap_or_exit!(execute_command(
52+
Command::new("chmod").arg("+x").arg(NVM_EXEC)
53+
));
54+
}
55+
56+
/// Install node using nvm
57+
fninstall_node(){
58+
debug!("installing node");
59+
// Node is already installed.
60+
ifletOk(_) =execute_with_nvm(Command::new("node").arg("--version")){
61+
debug!("node is available");
62+
return;
63+
}
64+
65+
warn("installing node using nvm");
66+
67+
debug!("node is not available");
68+
69+
ifletErr(err) =execute_command(Command::new("nvm").arg("--version")){
70+
debug!("nvm is not available");
71+
debug1!(err);
72+
// Install Node Version Manager.
73+
ifletErr(err) =execute_command(
74+
Command::new("curl")
75+
.arg("-Ls")
76+
.arg(NVM_SOURCE)
77+
.arg("-o")
78+
.arg(NVM_SOURCE_DOWNLOADED),
79+
){
80+
debug!("curl is not available");
81+
error("couldn't not download nvm from Github, please do so manually before proceeding");
82+
debug1!(err);
83+
exit(1);
84+
}else{
85+
ifletErr(err) =execute_command(Command::new("bash").arg(NVM_SOURCE_DOWNLOADED)){
86+
error("couldn't install nvm, please do so manually before proceeding");
87+
debug1!(err);
88+
exit(1);
89+
}else{
90+
warn("installed nvm");
91+
}
92+
}
93+
}
94+
95+
ifletErr(err) =execute_with_nvm(Command::new("nvm").arg("install").arg("stable")){
96+
error("couldn't install Node, please do so manually before proceeding");
97+
debug1!(err);
98+
exit(1);
99+
}else{
100+
warn("installed node")
101+
}
102+
}

‎pgml-apps/cargo-pgml-components/src/main.rs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use clap::{Args,Parser,Subcommand};
44
use std::env::{current_dir, set_current_dir};
5-
use std::fs::{create_dir_all};
5+
use std::fs::create_dir_all;
66
use std::path::Path;
77

88
#[macro_use]
@@ -62,17 +62,23 @@ fn main() {
6262
let cli =Cli::parse();
6363

6464
match cli.subcomand{
65-
CargoSubcommands::PgmlComponents(pgml_commands) =>match pgml_commands.command{
66-
Commands::Bundle{} =>bundle(pgml_commands.project_path),
67-
Commands::Add(command) =>match command{
68-
AddCommands::Component{ name} =>crate::frontend::components::add(&name, pgml_commands.overwrite),
69-
},
70-
},
65+
CargoSubcommands::PgmlComponents(pgml_commands) =>{
66+
validate_project(pgml_commands.project_path);
67+
match pgml_commands.command{
68+
Commands::Bundle{} =>bundle(),
69+
Commands::Add(command) =>match command{
70+
AddCommands::Component{ name} =>{
71+
crate::frontend::components::add(&name, pgml_commands.overwrite)
72+
}
73+
},
74+
}
75+
}
7176
}
7277
}
7378

74-
/// Bundle SASS and JavaScript into neat bundle files.
75-
fnbundle(project_path:Option<String>){
79+
fnvalidate_project(project_path:Option<String>){
80+
debug!("validating project directory");
81+
7682
// Validate that the required project paths exist.
7783
let cwd =ifletSome(project_path) = project_path{
7884
project_path
@@ -92,9 +98,13 @@ fn bundle(project_path: Option<String>) {
9298
}
9399

94100
unwrap_or_exit!(set_current_dir(path));
101+
}
102+
103+
/// Bundle SASS and JavaScript into neat bundle files.
104+
fnbundle(){
95105
frontend::sass::bundle();
96106
frontend::javascript::bundle();
97107
frontend::components::update_modules();
98108

99-
info("Bundle complete");
109+
info("bundle complete");
100110
}

‎pgml-apps/cargo-pgml-components/src/util.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use owo_colors::OwoColorize;
22
use std::fs::File;
3-
use std::io::Write;
3+
use std::io::{ErrorKind,Write};
44
use std::path::Path;
5-
use std::process::{exit,Command};
5+
use std::process::Command;
66

77
macro_rules! unwrap_or_exit{
88
($i:expr) =>{
@@ -17,6 +17,13 @@ macro_rules! unwrap_or_exit {
1717
};
1818
}
1919

20+
macro_rules! debug1{
21+
($e:expr) =>{
22+
debug!("{}:{}:{} {}", file!(), line!(), column!(), $e);
23+
};
24+
}
25+
26+
pub(crate)use debug1;
2027
pub(crate)use unwrap_or_exit;
2128

2229
pubfninfo(value:&str){
@@ -43,12 +50,14 @@ pub fn execute_command(command: &mut Command) -> std::io::Result<String> {
4350
let stdout =String::from_utf8_lossy(&output.stderr).to_string();
4451

4552
if !output.status.success(){
46-
error!(
53+
let error =String::from_utf8_lossy(&output.stderr).to_string();
54+
debug!(
4755
"{} failed: {}",
4856
command.get_program().to_str().unwrap(),
49-
String::from_utf8_lossy(&output.stderr).to_string(),
57+
error,
5058
);
51-
exit(1);
59+
60+
returnErr(std::io::Error::new(ErrorKind::Other, error));
5261
}
5362

5463
if !stderr.is_empty(){

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp