Orb version: 1.0.0
What happened:
When opening a PR with many commits (~400, in my case, due to importing another repo), the orb fails more or less silently with an exit code 141.
The underlying reason for this is that CircleCI runs /bin/bash -eo pipefail as the default shell, with which the lint script is being invoked.
Then, this command fails because it's using head, which closes the (reading end of) the pipe before git cherry returned all the data, which makes the whole pipeline fail.
This only happens for PRs with many commits, as otherwise git cherry returns before head closes the pipe.
There's a couple of different options to mitigate the issue:
- The orb could specify the
shell parameter in it's run block and set it to something like /bin/bash only. This will turn off pipefail globally.
- The script itself could turn off
pipefail with a set +o pipefail anywhere within the script, potentially even right before the offending line, and potentially also turn it on again directly afterwards with a set -o pipefail
- The script could use a different command than
head, one that doesn't close the pipe before all data is read. For example, sed could be used.
I'm happy to open a PR for any of these, but wanted to inquire as to if there's any preference for the solution!
Orb version: 1.0.0
What happened:
When opening a PR with many commits (~400, in my case, due to importing another repo), the orb fails more or less silently with an exit code 141.
The underlying reason for this is that CircleCI runs
/bin/bash -eo pipefailas the default shell, with which the lint script is being invoked.Then, this command fails because it's using
head, which closes the (reading end of) the pipe beforegit cherryreturned all the data, which makes the whole pipeline fail.This only happens for PRs with many commits, as otherwise
git cherryreturns beforeheadcloses the pipe.There's a couple of different options to mitigate the issue:
shellparameter in it'srunblock and set it to something like/bin/bashonly. This will turn offpipefailglobally.pipefailwith aset +o pipefailanywhere within the script, potentially even right before the offending line, and potentially also turn it on again directly afterwards with aset -o pipefailhead, one that doesn't close the pipe before all data is read. For example,sedcould be used.I'm happy to open a PR for any of these, but wanted to inquire as to if there's any preference for the solution!