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

Start local dev automation#1050

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
levkk merged 4 commits intomasterfromlevkk-local-dev
Oct 3, 2023
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletionpackages/cargo-pgml-components/Cargo.lock
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

2 changes: 1 addition & 1 deletionpackages/cargo-pgml-components/Cargo.toml
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
[package]
name ="cargo-pgml-components"
version ="0.1.17"
version ="0.1.18-alpha.1"
edition ="2021"
authors = ["PostgresML <team@postgresml.org>"]
license ="MIT"
Expand Down
9 changes: 1 addition & 8 deletionspackages/cargo-pgml-components/src/frontend/tools.rs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,7 @@ pub fn install() {
}

for plugininROLLUP_PLUGINS{
ifexecute_with_nvm(
Command::new("npm")
.arg("list")
.arg("-g")
.arg(plugin)
)
.is_err()
{
ifexecute_with_nvm(Command::new("npm").arg("list").arg("-g").arg(plugin)).is_err(){
warn(&format!("installing rollup plugin {}", plugin));
unwrap_or_exit!(execute_with_nvm(
Command::new("npm").arg("install").arg("-g").arg(plugin)
Expand Down
256 changes: 256 additions & 0 deletionspackages/cargo-pgml-components/src/local_dev.rs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,256 @@
//! So special, it deserves its own file.
//!
//! Code to handle the setup of our pretty complex local development
//! environment.
usecrate::util::{execute_command, info, ok_or_error, print, psql_output, unwrap_or_exit, warn};
use std::process::Command;

#[cfg(target_os ="macos")]
staticPG_INSTALL:&str ="
Install PostgreSQL with brew:\n
\tbrew install postgresql@15
";

#[cfg(target_os ="linux")]
staticPG_INSTALL:&str ="
Install PostgreSQL with Aptitude:\n
\tsudo apt install postgresql
";

#[cfg(target_os ="macos")]
staticBUILD_ESSENTIAL:&str ="
Install build tools with Aptitude:\n
\txcode-select --install
";

#[cfg(target_os ="linux")]
staticBUILD_ESSENTIAL:&str ="
Install build tools with Aptitude:\n
\tsudo apt install build-essential
";

#[cfg(target_os ="macos")]
staticPG_PG_STAT_STATEMENTS:&str ="
To install pg_stat_statements into your database:
1. Create the extension in PostgreSQL:\n
\tpsql -d postgres -c 'CREATE EXTENSION pg_stat_statements'
2. Add pg_stat_statements into your shared_preload_libraries:\n
\tpsql -c 'ALTER SYSTEM SET shared_preload_libraries TO pgml,pg_stat_statements'
3. Restart PostgreSQL:\n
\tbrew service restart postgresql@15
";

#[cfg(target_os ="linux")]
staticPG_PG_STAT_STATEMENTS:&str ="
To install pg_stat_statements into your database:
1. Create the extension in PostgreSQL:\n
\tpsql -d postgres -c 'CREATE EXTENSION pg_stat_statements'
2. Add pg_stat_statements into your shared_preload_libraries:\n
\tpsql -c 'ALTER SYSTEM SET shared_preload_libraries TO pgml,pg_stat_statements'
3. Restart PostgreSQL:\n
\tsudo service postgresql restart
";

#[cfg(target_os ="macos")]
staticPG_PGVECTOR:&str ="Install pgvector into your PostgreSQL database:\n
\tgit clone --branch v0.5.0 https://github.com/pgvector/pgvector &&\\
\tcd pgvector &&\\
\techo\"trusted = true\" >> vector.control &&\\
\tmake &&\\
\tmake install
";

#[cfg(target_os ="linux")]
staticPG_PGVECTOR:&str ="Install pgvector into your PostgreSQL database:\n
\tgit clone --branch v0.5.0 https://github.com/pgvector/pgvector &&\\
\tcd pgvector &&\\
\techo\"trusted = true\" >> vector.control &&\\
\tmake &&\\
\tsudo make install
";

#[cfg(target_os ="macos")]
staticPG_PGML:&str ="To install PostgresML into your PostgreSQL database,
follow the instructions on:
\thttps://postgresml.org/docs/guides/setup/v2/installation
";

#[cfg(target_os ="linux")]
staticPG_PGML:&str ="To install PostgresML
into your PostgreSQL database:
1. Add your Aptitude repository into your sources:
\techo\"deb [trusted=yes] https://apt.postgresml.org $(lsb_release -cs) main\" |\\
\tsudo tee -a /etc/apt/sources.list
2. Update Aptitude:
\tsudo apt update
3. Install PostgresML:
\tsudo apt install postgresml-14
";

fnpostgres_running() ->String{
let whoami =unwrap_or_exit!(execute_command(&mutCommand::new("whoami")));

let running =format!(
"
Could not connect to PostgreSQL database 'postgres' with psql.\n
Is PostgreSQL running and accepting connections?
"
);

#[cfg(target_os ="macos")]
let start =format!(
"
To start PostgreSQL, run:\n
\tbrew service start postgresql@15
"
);

#[cfg(target_os ="linux")]
let start =format!(
"
To start PostgreSQL, run:\n
\tsudo service postgresql start
"
);

let user =format!(
"
If PostgreSQL is already running, your current UNIX user is
not allowed to connect to the 'postgres' database with psql
using a UNIX socket.
To make sure your user is allowed to connect:
1. Create the role:\n
\tcreaterole --superuser --login {whoami}
2. Create the user's database:\n
\t createdb {whoami}
"
);

running +&start +&user
}

fndependencies() -> anyhow::Result<()>{
ok_or_error!(
"checking for psql",
{ execute_command(Command::new("which").arg("psql")).is_ok()},
PG_INSTALL
);

ok_or_error!(
"checking for build tools",
{ execute_command(Command::new("which").arg("gcc")).is_ok()},
BUILD_ESSENTIAL
);

ok_or_error!(
"checking for PostgreSQL connectivity",
{
ifletErr(err) = psql_output("SELECT version()"){
error!("{}", err);
false
} else{
true
}
},
postgres_running()
);

ok_or_error!(
"checking for pgvector PostgreSQL extension",
{
let output = psql_output(
"
SELECT
name
FROM
pg_available_extensions
WHERE name = 'vector'
",
)?;
output.contains("vector")
},
PG_PGVECTOR
);

ok_or_error!(
"checking for pgml PostgreSQL extension",
{
let output_installed = psql_output(
"
SELECT
name
FROM
pg_available_extensions
WHERE name = 'pgml'
",
)?;

let output_shared = psql_output("SHOW shared_preload_libraries")?;

output_installed.contains("pgml") && output_shared.contains("pgml")
},
PG_PGML
);

ok_or_error!(
"checking for pg_stat_statements PostgreSQL extension",
{
let output_installed = psql_output("SHOW shared_preload_libraries")?;
let output_running = psql_output("SELECT * FROM pg_stat_statements LIMIT 1");
output_installed.contains("pg_stat_statements") && output_running.is_ok()
},
PG_PG_STAT_STATEMENTS
);

print("checking for dashboard database...");
let output =psql_output(
"SELECT datname FROM pg_database WHERE datname = 'pgml_dashboard_development'",
)?;
if !output.contains("pgml_dashboard_development"){
warn("missing");
print("creating pgml_dashboard_development database...");
unwrap_or_exit!(execute_command(
Command::new("createdb").arg("pgml_dashboard_development")
));
info("ok");
print("creating vector extension in pgml_dashboard_development...");
unwrap_or_exit!(execute_command(
Command::new("psql")
.arg("-c")
.arg("CREATE EXTENSION IF NOT EXISTS vector")
.arg("pgml_dashboard_development")
));
info("ok");
print("creating pgml extension in pgml_dashboard_development...");
unwrap_or_exit!(execute_command(
Command::new("psql")
.arg("-c")
.arg("CREATE EXTENSION IF NOT EXISTS pgml")
.arg("pgml_dashboard_development")
));
info("ok");
}else{
info("ok");
}

info("all dependencies are installed and working");

Ok(())
}

pubfnsetup(){
unwrap_or_exit!(dependencies())
}
5 changes: 5 additions & 0 deletionspackages/cargo-pgml-components/src/main.rs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,6 +11,7 @@ extern crate log;
mod backend;
mod config;
mod frontend;
mod local_dev;
mod util;

use config::Config;
Expand DownExpand Up@@ -62,6 +63,9 @@ enum Commands {
/// Add new elements to the project.
#[command(subcommand)]
Add(AddCommands),

/// Setup local dev.
LocalDev{},
}

#[derive(Subcommand,Debug)]
Expand All@@ -85,6 +89,7 @@ fn main() {
crate::frontend::components::add(&Path::new(&name), pgml_commands.overwrite)
}
},
Commands::LocalDev{} => local_dev::setup(),
}
}
}
Expand Down
40 changes: 35 additions & 5 deletionspackages/cargo-pgml-components/src/util.rs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -48,18 +48,17 @@ pub fn execute_command(command: &mut Command) -> std::io::Result<String> {
}
};

let stderr =String::from_utf8_lossy(&output.stderr).to_string();
let stdout =String::from_utf8_lossy(&output.stderr).to_string();
let stderr =unwrap_or_exit!(String::from_utf8(output.stderr)).to_string();
let stdout =unwrap_or_exit!(String::from_utf8(output.stdout)).to_string();

if !output.status.success(){
let error =String::from_utf8_lossy(&output.stderr).to_string();
debug!(
"{} failed: {}",
command.get_program().to_str().unwrap(),
error,
stderr,
);

returnErr(std::io::Error::new(ErrorKind::Other,error));
returnErr(std::io::Error::new(ErrorKind::Other,stderr));
}

if !stderr.is_empty(){
Expand DownExpand Up@@ -95,3 +94,34 @@ pub fn compare_strings(string1: &str, string2: &str) -> bool {
// TODO: faster string comparison method needed.
string1.trim() == string2.trim()
}

pubfnpsql_output(query:&str) -> std::io::Result<String>{
letmut cmd =Command::new("psql");
cmd.arg("-c").arg(query).arg("-t").arg("-d").arg("postgres");

let output =execute_command(&mut cmd)?;
Ok(output.trim().to_string())
}

pubfnprint(s:&str){
print!("{}", s);
let _ = std::io::stdout().flush();
}

macro_rules! ok_or_error{
($what:expr, $expr:block, $howto:expr) =>{{
use std::io::Write;
print!("{}...", $what);
let _ = std::io::stdout().flush();

if $expr{
crate::util::info("ok");
} else{
crate::util::error("error");
println!("{}", $howto);
std::process::exit(1);
}
}};
}

pub(crate)use ok_or_error;

[8]ページ先頭

©2009-2025 Movatter.jp