Merge pull request #10 from qwjyh/setup-ci

Setup CI
Now `cargo test` should work on GHA.
This commit is contained in:
qwjyh 2024-05-04 15:04:56 +09:00 committed by GitHub
commit 6f8a71fe8d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 65 additions and 6 deletions

22
.github/workflows/rust.yml vendored Normal file
View file

@ -0,0 +1,22 @@
name: Rust
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose

View file

@ -1,15 +1,47 @@
mod integrated_test { mod integrated_test {
use std::fs::DirBuilder; use std::{
fs::{DirBuilder, File},
io::{self, BufWriter, Write},
};
use anyhow::{Ok, Result}; use anyhow::{Context, Ok, Result};
use assert_cmd::{assert::OutputAssertExt, Command}; use assert_cmd::{assert::OutputAssertExt, Command};
use dirs::home_dir;
use git2::Repository; use git2::Repository;
use log::trace; use log::trace;
use predicates::prelude::predicate; use predicates::prelude::predicate;
/// Setup global gitconfig if it doesn't exist.
///
/// # Errors
///
/// This function will return an error if it failed to get home directory.
fn setup_gitconfig() -> Result<()> {
let f = match File::create_new(
home_dir()
.context("Failed to find home directory")?
.join(".gitconfig"),
) {
io::Result::Ok(f) => f,
io::Result::Err(_err) => return Ok(()),
};
let mut buf = BufWriter::new(f);
buf.write_all(
r#"
[user]
email = "test@example.com"
name = "testuser"
"#
.as_bytes(),
)?;
Ok(())
}
#[test] #[test]
fn single_device() -> Result<()> { fn single_device() -> Result<()> {
let config_dir = assert_fs::TempDir::new()?; let config_dir = assert_fs::TempDir::new()?;
setup_gitconfig()?;
// init // init
let mut cmd = Command::cargo_bin("xdbm")?; let mut cmd = Command::cargo_bin("xdbm")?;
cmd.arg("-c") cmd.arg("-c")
@ -103,6 +135,7 @@ mod integrated_test {
fn two_devices_with_same_name() -> Result<()> { fn two_devices_with_same_name() -> Result<()> {
// 1st device // 1st device
let config_dir_1 = assert_fs::TempDir::new()?; let config_dir_1 = assert_fs::TempDir::new()?;
setup_gitconfig()?;
let mut cmd1 = Command::cargo_bin("xdbm")?; let mut cmd1 = Command::cargo_bin("xdbm")?;
cmd1.arg("-c") cmd1.arg("-c")
.arg(config_dir_1.path()) .arg(config_dir_1.path())
@ -118,15 +151,17 @@ mod integrated_test {
let upstream_name = "remote"; let upstream_name = "remote";
let mut repo_1_remote = let mut repo_1_remote =
repo_1.remote(upstream_name, bare_repo_dir.path().to_str().unwrap())?; repo_1.remote(upstream_name, bare_repo_dir.path().to_str().unwrap())?;
repo_1_remote.push(&["refs/heads/main"], None)?; repo_1_remote.push(&[repo_1.head().unwrap().name().unwrap()], None)?;
trace!("bare repo {:?}", bare_repo_dir.display()); trace!("bare repo {:?}", bare_repo_dir.display());
println!("{:?}", bare_repo_dir.read_dir()?); println!("{:?}", bare_repo_dir.read_dir()?);
// set up upstream branch // set up upstream branch
let (mut repo_1_branch, _branch_type) = repo_1.branches(None)?.next().unwrap()?; let (mut repo_1_branch, _branch_type) = repo_1.branches(None)?.next().unwrap()?;
repo_1_branch.set_upstream(Some(format!("{}/{}", upstream_name, "main").as_str()))?; println!("head {}", repo_1.head().unwrap().name().unwrap());
repo_1_branch.set_upstream(Some(format!("{}/{}", upstream_name, repo_1_branch.name().unwrap().unwrap()).as_str()))?;
// 2nd device // 2nd device
let config_dir_2 = assert_fs::TempDir::new()?; let config_dir_2 = assert_fs::TempDir::new()?;
setup_gitconfig()?;
let mut cmd2 = Command::cargo_bin("xdbm")?; let mut cmd2 = Command::cargo_bin("xdbm")?;
cmd2.arg("-c") cmd2.arg("-c")
.arg(config_dir_2.path()) .arg(config_dir_2.path())
@ -142,6 +177,7 @@ mod integrated_test {
fn directory_without_parent() -> Result<()> { fn directory_without_parent() -> Result<()> {
// 1st device // 1st device
let config_dir_1 = assert_fs::TempDir::new()?; let config_dir_1 = assert_fs::TempDir::new()?;
setup_gitconfig()?;
let mut cmd1 = Command::cargo_bin("xdbm")?; let mut cmd1 = Command::cargo_bin("xdbm")?;
cmd1.arg("-c") cmd1.arg("-c")
.arg(config_dir_1.path()) .arg(config_dir_1.path())
@ -174,6 +210,7 @@ mod integrated_test {
fn two_devices() -> Result<()> { fn two_devices() -> Result<()> {
// 1st device // 1st device
let config_dir_1 = assert_fs::TempDir::new()?; let config_dir_1 = assert_fs::TempDir::new()?;
setup_gitconfig()?;
let mut cmd1 = Command::cargo_bin("xdbm")?; let mut cmd1 = Command::cargo_bin("xdbm")?;
cmd1.arg("-c") cmd1.arg("-c")
.arg(config_dir_1.path()) .arg(config_dir_1.path())
@ -189,12 +226,12 @@ mod integrated_test {
let upstream_name = "remote"; let upstream_name = "remote";
let mut repo_1_remote = let mut repo_1_remote =
repo_1.remote(upstream_name, bare_repo_dir.path().to_str().unwrap())?; repo_1.remote(upstream_name, bare_repo_dir.path().to_str().unwrap())?;
repo_1_remote.push(&["refs/heads/main"], None)?; repo_1_remote.push(&[repo_1.head().unwrap().name().unwrap()], None)?;
trace!("bare repo {:?}", bare_repo_dir.display()); trace!("bare repo {:?}", bare_repo_dir.display());
println!("{:?}", bare_repo_dir.read_dir()?); println!("{:?}", bare_repo_dir.read_dir()?);
// set up upstream branch // set up upstream branch
let (mut repo_1_branch, _branch_type) = repo_1.branches(None)?.next().unwrap()?; let (mut repo_1_branch, _branch_type) = repo_1.branches(None)?.next().unwrap()?;
repo_1_branch.set_upstream(Some(format!("{}/{}", upstream_name, "main").as_str()))?; repo_1_branch.set_upstream(Some(format!("{}/{}", upstream_name, repo_1_branch.name().unwrap().unwrap()).as_str()))?;
// 2nd device // 2nd device
let config_dir_2 = assert_fs::TempDir::new()?; let config_dir_2 = assert_fs::TempDir::new()?;