Skip to content

Commit

Permalink
more environment variables for workspace support
Browse files Browse the repository at this point in the history
  • Loading branch information
sagiegurari committed Jul 21, 2017
1 parent 9cde7e8 commit ca052ca
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "cargo-make"
version = "0.3.32"
version = "0.3.33"
authors = ["Sagie Gur-Ari <sagiegurari@gmail.com>"]
description = "Rust task runner and build tool."
license = "Apache-2.0"
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,8 @@ In addition, cargo-make will also add few environment variables that can be help
* **CARGO_MAKE_RUST_TARGET_OS** - windows, macos, ios, linux, android, etc ... (see rust cfg feature)
* **CARGO_MAKE_RUST_TARGET_POINTER_WIDTH** - 32, 64
* **CARGO_MAKE_RUST_TARGET_VENDOR** - apple, pc, unknown
* **CARGO_MAKE_CRATE_IS_WORKSPACE** - Holds TRUE/FALSE based if this is a workspace crate or not (defined even if no Cargo.toml is found)
* **CARGO_MAKE_CRATE_WORKSPACE_MEMBERS** - Holds list of member paths (defined as empty value if no Cargo.toml is found)

The following environment variables will be set by cargo-make if Cargo.toml file exists and the relevant value is defined:

Expand Down Expand Up @@ -795,6 +797,7 @@ See [contributing guide](.github/CONTRIBUTING.md)

| Date | Version | Description |
| ----------- | ------- | ----------- |
| 2017-07-21 | v0.3.33 | Added more environment variables for workspace support |
| 2017-07-20 | v0.3.32 | Added --list-all-steps cli option |
| 2017-07-17 | v0.3.28 | workspace level ci flow |
| 2017-07-16 | v0.3.27 | cargo make ci-flow on travis now automatically runs code coverage and uploads to codecov |
Expand Down
3 changes: 3 additions & 0 deletions docs/_includes/content.md
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,8 @@ In addition, cargo-make will also add few environment variables that can be help
* **CARGO_MAKE_RUST_TARGET_OS** - windows, macos, ios, linux, android, etc ... (see rust cfg feature)
* **CARGO_MAKE_RUST_TARGET_POINTER_WIDTH** - 32, 64
* **CARGO_MAKE_RUST_TARGET_VENDOR** - apple, pc, unknown
* **CARGO_MAKE_CRATE_IS_WORKSPACE** - Holds TRUE/FALSE based if this is a workspace crate or not (defined even if no Cargo.toml is found)
* **CARGO_MAKE_CRATE_WORKSPACE_MEMBERS** - Holds list of member paths (defined as empty value if no Cargo.toml is found)

The following environment variables will be set by cargo-make if Cargo.toml file exists and the relevant value is defined:

Expand Down Expand Up @@ -764,6 +766,7 @@ See [contributing guide](https://github.com/sagiegurari/cargo-make/blob/master/.

| Date | Version | Description |
| ----------- | ------- | ----------- |
| 2017-07-21 | v0.3.33 | Added more environment variables for workspace support |
| 2017-07-20 | v0.3.32 | Added --list-all-steps cli option |
| 2017-07-17 | v0.3.28 | workspace level ci flow |
| 2017-07-16 | v0.3.27 | cargo make ci-flow on travis now automatically runs code coverage and uploads to codecov |
Expand Down
26 changes: 25 additions & 1 deletion docs/api/src/cargo_make/environment/mod.rs.html
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,18 @@
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
<span id="178">178</span>
<span id="179">179</span>
<span id="180">180</span>
<span id="181">181</span>
<span id="182">182</span>
<span id="183">183</span>
<span id="184">184</span>
<span id="185">185</span>
<span id="186">186</span>
<span id="187">187</span>
<span id="188">188</span>
<span id="189">189</span>
</pre><pre class="rust ">
<span class="doccomment">//! # env</span>
<span class="doccomment">//!</span>
Expand All @@ -237,7 +249,7 @@
<span class="kw">use</span> <span class="ident">log</span>::<span class="ident">Logger</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">env</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">path</span>::<span class="ident">PathBuf</span>;
<span class="kw">use</span> <span class="ident">types</span>::{<span class="ident">Config</span>, <span class="ident">CrateInfo</span>, <span class="ident">PackageInfo</span>};
<span class="kw">use</span> <span class="ident">types</span>::{<span class="ident">Config</span>, <span class="ident">CrateInfo</span>, <span class="ident">PackageInfo</span>, <span class="ident">Workspace</span>};

<span class="doccomment">/// Updates the env for the current execution based on the descriptor.</span>
<span class="kw">fn</span> <span class="ident">set_env</span>(
Expand Down Expand Up @@ -288,6 +300,18 @@
<span class="kw">if</span> <span class="ident">package_info</span>.<span class="ident">repository</span>.<span class="ident">is_some</span>() {
<span class="ident">env</span>::<span class="ident">set_var</span>(<span class="string">&quot;CARGO_MAKE_CRATE_REPOSITORY&quot;</span>, <span class="kw-2">&amp;</span><span class="ident">package_info</span>.<span class="ident">repository</span>.<span class="ident">unwrap</span>());
}

<span class="kw">let</span> <span class="ident">is_workspace_var_value</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">crate_info</span>.<span class="ident">workspace</span>.<span class="ident">is_none</span>() {
<span class="string">&quot;FALSE&quot;</span>
} <span class="kw">else</span> {
<span class="string">&quot;TRUE&quot;</span>
};
<span class="ident">env</span>::<span class="ident">set_var</span>(<span class="string">&quot;CARGO_MAKE_CRATE_IS_WORKSPACE&quot;</span>, <span class="ident">is_workspace_var_value</span>);

<span class="kw">let</span> <span class="ident">workspace</span> <span class="op">=</span> <span class="ident">crate_info</span>.<span class="ident">workspace</span>.<span class="ident">unwrap_or</span>(<span class="ident">Workspace</span>::<span class="ident">new</span>());
<span class="kw">let</span> <span class="ident">members</span> <span class="op">=</span> <span class="ident">workspace</span>.<span class="ident">members</span>.<span class="ident">unwrap_or</span>(<span class="macro">vec</span><span class="macro">!</span>[]);
<span class="kw">let</span> <span class="ident">members_string</span> <span class="op">=</span> <span class="ident">members</span>.<span class="ident">join</span>(<span class="string">&quot;,&quot;</span>);
<span class="ident">env</span>::<span class="ident">set_var</span>(<span class="string">&quot;CARGO_MAKE_CRATE_WORKSPACE_MEMBERS&quot;</span>, <span class="kw-2">&amp;</span><span class="ident">members_string</span>);
}

<span class="kw">fn</span> <span class="ident">setup_env_for_git_repo</span>(<span class="ident">logger</span>: <span class="kw-2">&amp;</span><span class="ident">Logger</span>) {
Expand Down
12 changes: 12 additions & 0 deletions docs/api/src/cargo_make/types.rs.html
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,12 @@
<span id="491">491</span>
<span id="492">492</span>
<span id="493">493</span>
<span id="494">494</span>
<span id="495">495</span>
<span id="496">496</span>
<span id="497">497</span>
<span id="498">498</span>
<span id="499">499</span>
</pre><pre class="rust ">
<span class="doccomment">//! # types</span>
<span class="doccomment">//!</span>
Expand Down Expand Up @@ -958,6 +964,12 @@
<span class="kw">pub</span> <span class="ident">members</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;&gt;</span>
}

<span class="kw">impl</span> <span class="ident">Workspace</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-&gt;</span> <span class="ident">Workspace</span> {
<span class="ident">Workspace</span> { <span class="ident">members</span>: <span class="prelude-val">None</span> }
}
}

<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Serialize</span>, <span class="ident">Deserialize</span>, <span class="ident">Debug</span>, <span class="ident">Clone</span>)]</span>
<span class="doccomment">/// Holds crate package information loaded from the Cargo.toml file package section.</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">PackageInfo</span> {
Expand Down
14 changes: 13 additions & 1 deletion src/environment/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use self::rustinfo::Channel;
use log::Logger;
use std::env;
use std::path::PathBuf;
use types::{Config, CrateInfo, PackageInfo};
use types::{Config, CrateInfo, PackageInfo, Workspace};

/// Updates the env for the current execution based on the descriptor.
fn set_env(
Expand Down Expand Up @@ -65,6 +65,18 @@ fn setup_env_for_crate(logger: &Logger) {
if package_info.repository.is_some() {
env::set_var("CARGO_MAKE_CRATE_REPOSITORY", &package_info.repository.unwrap());
}

let is_workspace_var_value = if crate_info.workspace.is_none() {
"FALSE"
} else {
"TRUE"
};
env::set_var("CARGO_MAKE_CRATE_IS_WORKSPACE", is_workspace_var_value);

let workspace = crate_info.workspace.unwrap_or(Workspace::new());
let members = workspace.members.unwrap_or(vec![]);
let members_string = members.join(",");
env::set_var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS", &members_string);
}

fn setup_env_for_git_repo(logger: &Logger) {
Expand Down
41 changes: 41 additions & 0 deletions src/environment/mod_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ fn setup_env_for_crate_load_toml_found() {
env::set_var("CARGO_MAKE_CRATE_DOCUMENTATION", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_HOMEPAGE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_REPOSITORY", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_IS_WORKSPACE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS", "EMPTY");

setup_env_for_crate(&logger);

Expand All @@ -76,6 +78,8 @@ fn setup_env_for_crate_load_toml_found() {
assert_eq!(env::var("CARGO_MAKE_CRATE_DOCUMENTATION").unwrap(), "https://sagiegurari.github.io/cargo-make");
assert_eq!(env::var("CARGO_MAKE_CRATE_HOMEPAGE").unwrap(), "https://sagiegurari.github.io/cargo-make");
assert_eq!(env::var("CARGO_MAKE_CRATE_REPOSITORY").unwrap(), "https://github.com/sagiegurari/cargo-make.git");
assert_eq!(env::var("CARGO_MAKE_CRATE_IS_WORKSPACE").unwrap(), "FALSE");
assert_eq!(env::var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS").unwrap(), "");
}

#[test]
Expand All @@ -90,6 +94,8 @@ fn setup_env_for_crate_load_toml_not_found_and_cwd() {
env::set_var("CARGO_MAKE_CRATE_DOCUMENTATION", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_HOMEPAGE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_REPOSITORY", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_IS_WORKSPACE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS", "EMPTY");

env::set_var("CARGO_MAKE_WORKING_DIRECTORY", "EMPTY");
assert!(env::var("CARGO_MAKE_WORKING_DIRECTORY").unwrap() == "EMPTY");
Expand All @@ -108,6 +114,8 @@ fn setup_env_for_crate_load_toml_not_found_and_cwd() {
assert_eq!(env::var("CARGO_MAKE_CRATE_DOCUMENTATION").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_HOMEPAGE").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_REPOSITORY").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_IS_WORKSPACE").unwrap(), "FALSE");
assert_eq!(env::var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS").unwrap(), "");

setup_env_for_crate(&logger);

Expand All @@ -119,6 +127,39 @@ fn setup_env_for_crate_load_toml_not_found_and_cwd() {
assert_eq!(env::var("CARGO_MAKE_CRATE_DOCUMENTATION").unwrap(), "https://sagiegurari.github.io/cargo-make");
assert_eq!(env::var("CARGO_MAKE_CRATE_HOMEPAGE").unwrap(), "https://sagiegurari.github.io/cargo-make");
assert_eq!(env::var("CARGO_MAKE_CRATE_REPOSITORY").unwrap(), "https://github.com/sagiegurari/cargo-make.git");
assert_eq!(env::var("CARGO_MAKE_CRATE_IS_WORKSPACE").unwrap(), "FALSE");
assert_eq!(env::var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS").unwrap(), "");
}

#[test]
fn setup_env_for_crate_workspace() {
let logger = log::create("error");

env::set_var("CARGO_MAKE_CRATE_NAME", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_FS_NAME", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_VERSION", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_DESCRIPTION", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_LICENSE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_DOCUMENTATION", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_HOMEPAGE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_REPOSITORY", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_IS_WORKSPACE", "EMPTY");
env::set_var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS", "EMPTY");

setup_cwd(&logger, Some("examples/workspace"));
setup_env_for_crate(&logger);
setup_cwd(&logger, Some("../.."));

assert_eq!(env::var("CARGO_MAKE_CRATE_NAME").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_FS_NAME").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_VERSION").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_DESCRIPTION").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_LICENSE").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_DOCUMENTATION").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_HOMEPAGE").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_REPOSITORY").unwrap(), "EMPTY");
assert_eq!(env::var("CARGO_MAKE_CRATE_IS_WORKSPACE").unwrap(), "TRUE");
assert_eq!(env::var("CARGO_MAKE_CRATE_WORKSPACE_MEMBERS").unwrap(), "member1,member2");
}

#[test]
Expand Down
6 changes: 6 additions & 0 deletions src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,12 @@ pub struct Workspace {
pub members: Option<Vec<String>>
}

impl Workspace {
pub fn new() -> Workspace {
Workspace { members: None }
}
}

#[derive(Serialize, Deserialize, Debug, Clone)]
/// Holds crate package information loaded from the Cargo.toml file package section.
pub struct PackageInfo {
Expand Down
7 changes: 7 additions & 0 deletions src/types_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -650,3 +650,10 @@ fn crate_info_load() {
let package = crate_info.package.unwrap();
assert_eq!(package.name.unwrap(), "cargo-make");
}

#[test]
fn workspace_new() {
let workspace = Workspace::new();

assert!(workspace.members.is_none());
}

0 comments on commit ca052ca

Please sign in to comment.