neomake 0.1.3

Yet another task runner as make alternative, inspired by GitLab pipelines.
use std::collections::HashMap;

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Config {
    pub version: String,
    pub env: Option<HashMap<String, String>>,
    pub chains: HashMap<String, Chain>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Chain {
    pub env: Option<HashMap<String, String>>,
    pub matrix: Vec<MatrixEntry>,
    pub tasks: Vec<Task>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct MatrixEntry {
    pub workdir: Option<String>,
    pub env: Option<HashMap<String, String>>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Task {
    pub workdir: Option<String>,
    pub env: Option<HashMap<String, String>>,
    pub run: Vec<String>,
}

pub(crate) fn default_config() -> String {
    r###"version: 1.0

env:
  DEFAULT_ENV_VAR: default var
  OVERRIDE_ENV_VAR_0: old e0
  OVERRIDE_ENV_VAR_1: old e1

.cargo-build: &cargo-build
  - cargo build $CARGO_ARGS

chains:
  test:
    matrix:
      - env:
          OVERRIDE_ENV_VAR_0: new e0
    tasks:
      - env:
          OVERRIDE_ENV_VAR_1: new e1
        run:
          - printf "$DEFAULT_ENV_VAR"
          - printf "$OVERRIDE_ENV_VAR_0"
          - printf "$OVERRIDE_ENV_VAR_1"
          - printf "{{ args.test }}" # this will require an argument to be passed via '-a args.test="some-argument"'
          - unknown-command
          - printf "too far!"
"###
    .to_owned()
}