Skip to content

Commit 524889f

Browse files
committed
Add support for overriding shell to execute CUSTOM_INIT_SCRIPT with
1 parent 18182eb commit 524889f

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1515
- Added a CI workflow to lint the code base
1616
- Added a CI workflow to check for spelling errors
1717
- Added support for `ARDUINO_CI_UNIT_TEST_EXTRA_COMPILER_FLAGS` environment variable.
18+
- Added support for overriding the shell used to execute `CUSTOM_INIT_SCRIPT`
19+
by setting `CUSTOM_INIT_SCRIPT_SHELL` (defaults to `/bin/sh`).
1820

1921
### Changed
2022
- We now compile a shared library to be used for each test.

REFERENCE.md

+5-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,11 @@ This allows a file (or glob) pattern to be executed in your tests directory, cre
4646

4747
### `CUSTOM_INIT_SCRIPT` environment variable
4848

49-
If set, testing will execute (using `/bin/sh`) the script referred to by this
50-
variable -- relative to the current working directory (i.e. the root directory
51-
of the library). The script will _run_ in the Arduino Libraries directory
49+
If set, testing will execute the script referred to by this variable -- relative
50+
to the current working directory (i.e. the root directory of the library). By
51+
default the script will be executed using `/bin/sh` but you can override by
52+
setting `CUSTOM_INIT_SCRIPT_SHELL` (e.g to `powershell`, `/usr/bin/perl` etc).
53+
The script will _run_ in the Arduino Libraries directory
5254
(changing to the Libraries directory, running the script, and returning to the
5355
individual library root afterward). This enables use cases like the GitHub
5456
action to install custom library versions (i.e. a version of a library that

exe/arduino_ci.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ def self.parse(options)
6060
puts "Additionally, the following environment variables control the script:"
6161
puts " - #{VAR_CUSTOM_INIT_SCRIPT} - if set, this script will be run from the Arduino/libraries directory"
6262
puts " prior to any automated library installation or testing (e.g. to install unofficial libraries)"
63+
puts " - #{VAR_CUSTOM_INIT_SCRIPT_SHELL} - if set, this will override the"
64+
puts " default shell (/bin/sh) used to execute #{VAR_CUSTOM_INIT_SCRIPT} with."
6365
puts " - #{VAR_USE_SUBDIR} - if set, the script will install the library from this subdirectory of the cwd"
6466
puts " - #{VAR_EXPECT_EXAMPLES} - if set, testing will fail if no example sketches are present"
6567
puts " - #{VAR_EXPECT_UNITTESTS} - if set, testing will fail if no unit tests are present"
@@ -322,16 +324,17 @@ def get_annotated_compilers(config, cpp_library)
322324
# In this case, the user provided script would fetch a git repo or some other method.
323325
def perform_custom_initialization()
324326
script_path = ENV[VAR_CUSTOM_INIT_SCRIPT]
327+
script_shell = ENV[VAR_CUSTOM_INIT_SCRIPT + "_SHELL"] || "/bin/sh"
325328
inform("Environment variable #{VAR_CUSTOM_INIT_SCRIPT}") { "'#{script_path}'" }
326329
return if script_path.nil?
327330
return if script_path.empty?
328331

329332
script_pathname = Pathname.getwd + script_path
330333
assure("Script at #{VAR_CUSTOM_INIT_SCRIPT} exists") { script_pathname.exist? }
331334

332-
assure_multiline("Running #{script_pathname} with sh in libraries working dir") do
335+
assure_multiline("Running #{script_pathname} with #{script_shell} in libraries working dir") do
333336
Dir.chdir(@backend.lib_dir) do
334-
IO.popen(["/bin/sh", script_pathname.to_s], err: [:child, :out]) do |io|
337+
IO.popen([script_shell, script_pathname.to_s], err: [:child, :out]) do |io|
335338
io.each_line { |line| puts " #{line}" }
336339
end
337340
end

0 commit comments

Comments
 (0)