Skip to main content

semver_common/tools/git/auth/
github.rs

1use r_log::Logger;
2use std::{collections::HashMap, fs::File, io::Write};
3
4use crate::{Alert, run_command};
5
6/// Caches credentials in git for authenticating with Github as remote origin.
7pub fn set_remote(env: &HashMap<String, String>, logger: &Logger) -> Result<(), Alert> {
8    logger.info("Authenticating with Github");
9    let actor = env
10        .get("GITHUB_ACTOR")
11        .ok_or("GITHUB_ACTOR not in environment variables.")?;
12    let token = env
13        .get("GITHUB_TOKEN")
14        .ok_or("GITHUB_TOKEN not in environment variables.")?;
15    run_command(
16        "git",
17        ["config", "--global", "credential.helper", "store"],
18        Some(logger),
19    )?;
20    println!("Creating file...");
21    let mut github_credentials = File::create("~/.git-credentials")?;
22    println!("Writing file...");
23    github_credentials.write_all(format!("https://${}:${}@github.com", actor, token).as_bytes())?;
24    Ok(())
25}