mirror of
https://codeberg.org/icewind/haze.git
synced 2026-06-03 09:04:12 +02:00
default to max supported php version
This commit is contained in:
parent
009264443f
commit
86a68339b4
5 changed files with 122 additions and 49 deletions
84
src/cloud.rs
84
src/cloud.rs
|
|
@ -1,4 +1,4 @@
|
|||
use crate::config::{HazeConfig, HazeVolumeConfig, Preset};
|
||||
use crate::config::{HazeConfig, HazeVolumeConfig};
|
||||
use crate::database::Database;
|
||||
use crate::exec::{exec, exec_io, exec_tty, ExitCode};
|
||||
use crate::mapping::{default_mappings, Mapping};
|
||||
|
|
@ -9,7 +9,7 @@ use bollard::container::{ListContainersOptions, RemoveContainerOptions, UpdateCo
|
|||
use bollard::models::ContainerState;
|
||||
use bollard::network::CreateNetworkOptions;
|
||||
use bollard::Docker;
|
||||
use camino::Utf8PathBuf;
|
||||
use camino::{Utf8Path, Utf8PathBuf};
|
||||
use flate2::read::GzDecoder;
|
||||
use futures_util::future::try_join_all;
|
||||
use miette::{IntoDiagnostic, Report, Result, WrapErr};
|
||||
|
|
@ -18,6 +18,7 @@ use serde_json::Value;
|
|||
use std::collections::HashMap;
|
||||
use std::fmt::Display;
|
||||
use std::fs;
|
||||
use std::fs::read_to_string;
|
||||
use std::io::{stdout, Cursor, Read, Stdout, Write};
|
||||
use std::iter::Peekable;
|
||||
use std::net::IpAddr;
|
||||
|
|
@ -29,7 +30,26 @@ use tokio::fs::remove_dir_all;
|
|||
use tokio::task::spawn;
|
||||
use tokio::time::sleep;
|
||||
|
||||
#[derive(Clone, Default, Debug, Eq, PartialEq)]
|
||||
fn get_max_php_version(base_path: &Utf8Path) -> Option<PhpVersion> {
|
||||
let version_check_code = read_to_string(base_path.join("lib/versioncheck.php")).ok()?;
|
||||
let start = version_check_code.find("PHP_VERSION_ID >= ")?;
|
||||
let code_part = &version_check_code[start + "PHP_VERSION_ID >= ".len()..];
|
||||
let end = code_part.find(")")?;
|
||||
let version_code = &code_part[0..end];
|
||||
let mut major: u8 = version_code.get(0..1)?.parse().ok()?;
|
||||
let mut minor: u8 = version_code.get(1..3)?.parse().ok()?;
|
||||
|
||||
if minor > 0 {
|
||||
minor -= 1;
|
||||
} else {
|
||||
major -= 1;
|
||||
minor = PhpVersion::max_minor(major);
|
||||
}
|
||||
|
||||
PhpVersion::from_number(major, minor)
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, Default)]
|
||||
pub struct CloudOptions {
|
||||
pub name: Option<String>,
|
||||
pub db: Database,
|
||||
|
|
@ -39,7 +59,19 @@ pub struct CloudOptions {
|
|||
}
|
||||
|
||||
impl CloudOptions {
|
||||
pub fn parse<I, S>(presets: &[Preset], args: &mut Peekable<I>) -> Result<CloudOptions>
|
||||
pub fn new(config: &HazeConfig) -> Self {
|
||||
let php = get_max_php_version(&config.sources_root).unwrap_or_default();
|
||||
|
||||
CloudOptions {
|
||||
name: None,
|
||||
php,
|
||||
db: Database::default(),
|
||||
services: vec![],
|
||||
app_packages: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse<I, S>(config: &HazeConfig, args: &mut Peekable<I>) -> Result<CloudOptions>
|
||||
where
|
||||
S: AsRef<str> + Into<String> + Display,
|
||||
I: Iterator<Item = S>,
|
||||
|
|
@ -57,7 +89,7 @@ impl CloudOptions {
|
|||
} else if let Ok(php_option) = PhpVersion::from_str(option.as_ref()) {
|
||||
php = Some(php_option);
|
||||
let _ = args.next();
|
||||
} else if let Some(service) = Service::from_type(presets, option.as_ref()) {
|
||||
} else if let Some(service) = Service::from_type(&config.preset, option.as_ref()) {
|
||||
services.extend_from_slice(&service);
|
||||
let _ = args.next();
|
||||
} else if option.as_ref().ends_with(".tar.gz") {
|
||||
|
|
@ -74,7 +106,9 @@ impl CloudOptions {
|
|||
Ok(CloudOptions {
|
||||
name,
|
||||
db: db.unwrap_or_default(),
|
||||
php: php.unwrap_or_default(),
|
||||
php: php
|
||||
.or_else(|| get_max_php_version(&config.sources_root))
|
||||
.unwrap_or_default(),
|
||||
services,
|
||||
app_packages: app_package,
|
||||
})
|
||||
|
|
@ -87,14 +121,16 @@ fn test_option_parse() {
|
|||
use crate::service::PresetService;
|
||||
use crate::service::{Ldap, LdapAdmin};
|
||||
|
||||
let config = HazeConfig::default();
|
||||
|
||||
let mut args = vec![].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse::<_, &str>(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse::<_, &str>(&config, &mut args).unwrap(),
|
||||
CloudOptions::default()
|
||||
);
|
||||
let mut args = vec!["mariadb"].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
db: Database::MariaDB,
|
||||
..Default::default()
|
||||
|
|
@ -102,14 +138,14 @@ fn test_option_parse() {
|
|||
);
|
||||
let mut args = vec!["rest"].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
..Default::default()
|
||||
}
|
||||
);
|
||||
let mut args = vec!["7"].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
php: PhpVersion::Php74,
|
||||
..Default::default()
|
||||
|
|
@ -117,7 +153,7 @@ fn test_option_parse() {
|
|||
);
|
||||
let mut args = vec!["7", "pgsql", "rest"].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
php: PhpVersion::Php74,
|
||||
db: Database::Postgres,
|
||||
|
|
@ -126,7 +162,7 @@ fn test_option_parse() {
|
|||
);
|
||||
let mut args = vec!["7", "ldap", "pgsql"].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
php: PhpVersion::Php74,
|
||||
db: Database::Postgres,
|
||||
|
|
@ -136,7 +172,7 @@ fn test_option_parse() {
|
|||
);
|
||||
let mut args = vec!["7", "pgsql", "ldap"].into_iter().peekable();
|
||||
assert_eq!(
|
||||
CloudOptions::parse(&[], &mut args).unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
php: PhpVersion::Php74,
|
||||
db: Database::Postgres,
|
||||
|
|
@ -147,17 +183,19 @@ fn test_option_parse() {
|
|||
let mut args = vec!["7", "pgsql", "ldap", "mypreset"]
|
||||
.into_iter()
|
||||
.peekable();
|
||||
|
||||
let config = HazeConfig {
|
||||
preset: vec![Preset {
|
||||
name: "mypreset".to_string(),
|
||||
commands: Vec::new(),
|
||||
apps: Vec::new(),
|
||||
config: HashMap::default(),
|
||||
}],
|
||||
..HazeConfig::default()
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
CloudOptions::parse(
|
||||
&[Preset {
|
||||
name: "mypreset".to_string(),
|
||||
commands: Vec::new(),
|
||||
apps: Vec::new(),
|
||||
config: HashMap::default(),
|
||||
}],
|
||||
&mut args
|
||||
)
|
||||
.unwrap(),
|
||||
CloudOptions::parse(&config, &mut args).unwrap(),
|
||||
CloudOptions {
|
||||
php: PhpVersion::Php74,
|
||||
db: Database::Postgres,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue