From 35850967ef84ede079f0308357bc7d362fbfde08 Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Thu, 1 Dec 2022 19:16:40 +0000 Subject: [PATCH] Have rebar3.cmd work on a Windows CMD shell (#151) * Provide a working rebar.cmd for system that need it (Windows on non-PowerShell) * Add tests for recent changes If the "run" were to fail the job would too * Check if Rust can find it --- .github/workflows/windows.yml | 11 ++++++++ dist/install-rebar3.ps1 | 4 ++- src/install-rebar3.ps1 | 4 ++- test-projects/rust_rebar3_cmd/.gitignore | 2 ++ test-projects/rust_rebar3_cmd/Cargo.lock | 7 +++++ test-projects/rust_rebar3_cmd/Cargo.toml | 8 ++++++ test-projects/rust_rebar3_cmd/src/main.rs | 32 +++++++++++++++++++++++ 7 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 test-projects/rust_rebar3_cmd/.gitignore create mode 100644 test-projects/rust_rebar3_cmd/Cargo.lock create mode 100644 test-projects/rust_rebar3_cmd/Cargo.toml create mode 100644 test-projects/rust_rebar3_cmd/src/main.rs diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 0b7ddfe..65475a9 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -70,6 +70,17 @@ jobs: if: ${{matrix.combo.gleam-version}} - name: rebar3 version (action) run: echo "rebar3 ${{steps.setup-beam.outputs.rebar3-version}}" + - name: Run rebar3 and rebar3.cmd + run: | + # Should not fail + rebar3 version + rebar3.cmd version + if: ${{matrix.combo.rebar3-version}} + - name: rebar3 from Rust + run: | + cd test-projects/rust_rebar3_cmd + cargo test -- --nocapture + if: ${{matrix.combo.rebar3-version}} - name: mix version and help (CLI) run: | mix -v diff --git a/dist/install-rebar3.ps1 b/dist/install-rebar3.ps1 index 2c246e2..6660119 100644 --- a/dist/install-rebar3.ps1 +++ b/dist/install-rebar3.ps1 @@ -7,6 +7,7 @@ Set-Location ${Env:RUNNER_TEMP} $FILE_INPUT="rebar3" $FILE_OUTPUT="rebar3" $FILE_OUTPUT_PS1="rebar3.ps1" +$FILE_OUTPUT_CMD="rebar3.cmd" $DIR_FOR_BIN=".setup-beam/rebar3" $ProgressPreference="SilentlyContinue" @@ -22,8 +23,9 @@ $ProgressPreference="Continue" New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin" Write-Output "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append -type ${FILE_OUTPUT_PS1} +Write-Output "@echo off`r`nescript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} %*" | Out-File -FilePath "${FILE_OUTPUT_CMD}" -Encoding utf8 -Append Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin" +Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin" Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows" & "${DIR_FOR_BIN}/bin/rebar3" "version" | Write-Output diff --git a/src/install-rebar3.ps1 b/src/install-rebar3.ps1 index 2c246e2..6660119 100644 --- a/src/install-rebar3.ps1 +++ b/src/install-rebar3.ps1 @@ -7,6 +7,7 @@ Set-Location ${Env:RUNNER_TEMP} $FILE_INPUT="rebar3" $FILE_OUTPUT="rebar3" $FILE_OUTPUT_PS1="rebar3.ps1" +$FILE_OUTPUT_CMD="rebar3.cmd" $DIR_FOR_BIN=".setup-beam/rebar3" $ProgressPreference="SilentlyContinue" @@ -22,8 +23,9 @@ $ProgressPreference="Continue" New-Item "${DIR_FOR_BIN}/bin" -ItemType Directory | Out-Null Move-Item "${FILE_OUTPUT}" "${DIR_FOR_BIN}/bin" Write-Output "& escript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} `${args}" | Out-File -FilePath "${FILE_OUTPUT_PS1}" -Encoding utf8 -Append -type ${FILE_OUTPUT_PS1} +Write-Output "@echo off`r`nescript.exe ${PWD}/${DIR_FOR_BIN}/bin/${FILE_OUTPUT} %*" | Out-File -FilePath "${FILE_OUTPUT_CMD}" -Encoding utf8 -Append Move-Item "${FILE_OUTPUT_PS1}" "${DIR_FOR_BIN}/bin" +Move-Item "${FILE_OUTPUT_CMD}" "${DIR_FOR_BIN}/bin" Write-Output "Installed rebar3 version${REBAR3_NIGHTLY} follows" & "${DIR_FOR_BIN}/bin/rebar3" "version" | Write-Output diff --git a/test-projects/rust_rebar3_cmd/.gitignore b/test-projects/rust_rebar3_cmd/.gitignore new file mode 100644 index 0000000..7f1d6b9 --- /dev/null +++ b/test-projects/rust_rebar3_cmd/.gitignore @@ -0,0 +1,2 @@ +/target/ +main diff --git a/test-projects/rust_rebar3_cmd/Cargo.lock b/test-projects/rust_rebar3_cmd/Cargo.lock new file mode 100644 index 0000000..ecd43ed --- /dev/null +++ b/test-projects/rust_rebar3_cmd/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "rust_rebar3_cmd" +version = "0.1.0" diff --git a/test-projects/rust_rebar3_cmd/Cargo.toml b/test-projects/rust_rebar3_cmd/Cargo.toml new file mode 100644 index 0000000..913dcf1 --- /dev/null +++ b/test-projects/rust_rebar3_cmd/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "rust_rebar3_cmd" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/test-projects/rust_rebar3_cmd/src/main.rs b/test-projects/rust_rebar3_cmd/src/main.rs new file mode 100644 index 0000000..77b4e8d --- /dev/null +++ b/test-projects/rust_rebar3_cmd/src/main.rs @@ -0,0 +1,32 @@ +use std::env; +use std::process; +use std::string; + +// an example function... +fn main() { + let key = "PATH"; + match env::var(key) { + Ok(val) => println!("{key}: {val:?}"), + Err(e) => println!("couldn't interpret {key}: {e}"), + } +} + +#[allow(dead_code)] +fn rebar3_cmd_version() -> Result { + println!("going for rebar3.cmd"); + let output = process::Command::new("rebar3.cmd") + .arg("version") + .output() + .expect("error"); + return String::from_utf8(output.stdout); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + rebar3_cmd_version().unwrap(); + } +}