cartulary 0.3.0-alpha.1

The knowledge layer of your project — decisions, issues, docs, all in one place.
Documentation
use cartulary::infra::driven::fs::config::CURRENT_SCHEMA_VERSION;
use std::fs;

use cucumber::{given, when};
use indoc::formatdoc;

use crate::CartularyWorld;

#[given(expr = "a cartulary workspace with source {string}")]
async fn workspace_with_source(world: &mut CartularyWorld, source_name: String) {
    let dir = tempfile::TempDir::new().expect("failed to create temp dir");
    let toml = formatdoc! {r#"
        version = {CURRENT_SCHEMA_VERSION}

        [decisions]
        types = ["adr"]

        [decisions.adr]
        dir = "docs/adr"

        [issues]
        dir = "docs/issues"

        [sources.{source_name}]
        type = "gitlab"
        url = "https://gitlab.example"
        project = "g/p"
        token_env = "GITLAB_TOKEN"
    "#};
    fs::write(dir.path().join("cartulary.toml"), toml).expect("failed to write cartulary.toml");
    world.workspace = Some(dir);
}

#[when(expr = "I run {string} without GITLAB_TOKEN set")]
async fn run_command_no_token(world: &mut CartularyWorld, command: String) {
    let dir = world.workspace.as_ref().expect("workspace not initialized");
    let mut parts = command.split_whitespace();
    let bin = assert_cmd::cargo_bin!("cartu");
    let args: Vec<&str> = parts.by_ref().skip(1).collect();
    let output = std::process::Command::new(bin)
        .args(&args)
        .current_dir(dir.path())
        .env_remove("GITLAB_TOKEN")
        .output()
        .expect("failed to run cartu");
    world.last_output = Some(output);
}