fn branch_suite_and_version_from_elasticsearch()

in yaml_test_runner/src/main.rs [126:152]


fn branch_suite_and_version_from_elasticsearch(
    url: &str,
) -> anyhow::Result<(String, TestSuite, String, semver::Version)> {
    let client = reqwest::blocking::ClientBuilder::new()
        .danger_accept_invalid_certs(true)
        .build()?;

    let suite = match std::env::var("TEST_SUITE") {
        Err(_) => panic!("Env var TEST_SUITE is not defined"),
        Ok(ref s) if s == "free" => TestSuite::Free,
        _ => TestSuite::XPack,
    };
    let response = client.get(url).send()?;
    let json: Value = response.json()?;
    let branch = json["version"]["build_hash"].as_str().unwrap().to_string();

    // any prerelease part needs to be trimmed because the semver crate only allows
    // a version with a prerelease to match against predicates, if at least one predicate
    // has a prerelease. See
    // https://github.com/steveklabnik/semver/blob/afa5fc853cb4d6d2b1329579e5528f86f3b550f9/src/version_req.rs#L319-L331
    let version = json["version"]["number"].as_str().unwrap().to_string();

    let sem_version =
        semver::Version::parse(version.trim_end_matches(|c: char| c.is_alphabetic() || c == '-'))?;

    Ok((branch, suite, version, sem_version))
}