Skip to content
use std::{error::Error, process::Command};

use super::new;

pub fn run(command: &[String]) -> Result<(), Box<dyn Error>> {
    let (program, args) = command
        .split_first()
        .ok_or("ino exec requires a command to run")?;
    let info = new::version_info()?;
    let semver = info.semver.to_string();

    let status = Command::new(program)
        .args(args)
        .env("INO_VERSION", &semver)
        .env("INO_SEMVER", &semver)
        .env("INO_AUTOINCREMENT", info.autoincrement.to_string())
        .env("INO_COMMIT_DATE", &info.commit_date)
        .env("INO_COMMIT_HASH", &info.commit_hash)
        .env("VERSION", &semver)
        .env("VERSION_SEMVER", &semver)
        .env("VERSION_AUTOINCREMENT", info.autoincrement.to_string())
        .env("VERSION_COMMIT_DATE", &info.commit_date)
        .env("VERSION_COMMIT_HASH", &info.commit_hash)
        .status()?;

    if !status.success() {
        std::process::exit(status.code().unwrap_or(1));
    }
    Ok(())
}