Skip to content

ci(gh): shell checker #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

ci(gh): shell checker #12

wants to merge 1 commit into from

Conversation

sambacha
Copy link
Owner

No description provided.

@github-actions
Copy link

sh-checker report

To get the full details, please check in the job output.

shellcheck errors

'shellcheck -e SC1004' returned error 1 finding the following syntactical issues:

----------

In cast/checksum-address.sh line 10:
if [ "$ETH_FROM" != "$(seth --to-checksum-address "$ETH_FROM")" ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$ETH_FROM" != "$(seth --to-checksum-address "$ETH_FROM")" ]]; then


In forge/minify-output.sh line 8:
  if [ -f "$arg" ]; then
     ^-----------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
  if [[ -f "$arg" ]]; then


In forge/minify-output.sh line 9:
    if [ -n "$path" ]; then
       ^------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    if [[ -n "$path" ]]; then


In gas-snapshot/src/reporting/coverage-snapshot.sh line 3:
01_gas_report=$(cat .gas-snapshot)
^-- SC2282 (error): Variable names can't start with numbers, so this is interpreted as a command.
              ^------------------^ SC2046 (warning): Quote this to prevent word splitting.


In scripts/clone-and-checkout.sh line 10:
  if [ -d "$cloneDirName" ]; then
     ^--------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
  if [[ -d "$cloneDirName" ]]; then


In scripts/clone-and-checkout.sh line 11:
    (cd "$cloneDirName" && [ -z "$(git status --porcelain)" ] && git checkout "$2") || (echo Unclean "$cloneDirName" && exit 1)
                           ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
    (cd "$cloneDirName" && [[ -z "$(git status --porcelain)" ]] && git checkout "$2") || (echo Unclean "$cloneDirName" && exit 1)


In scripts/common.sh line 25:
  if [ $(($(tput colors 2>/dev/null))) -ge 8 ]; then
     ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
  if [[ $(($(tput colors 2>/dev/null))) -ge 8 ]]; then


In scripts/common.sh line 44:
if [ "$ETH_FROM" != "$(cast --to-checksum-address "$ETH_FROM")" ]; then
   ^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$ETH_FROM" != "$(cast --to-checksum-address "$ETH_FROM")" ]]; then


In scripts/common.sh line 60:
  ARGS=${@:2}
       ^----^ SC2124 (warning): Assigning an array to a string! Assign as array, or use * instead of @ to concatenate.


In scripts/common.sh line 63:
  CONTRACT_PATH=$(find ./src -name $NAME.sol)
                                   ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
  CONTRACT_PATH=$(find ./src -name "$NAME".sol)


In scripts/common.sh line 97:
  result=$(cat "$ADDRESSES_FILE" | jq -r ". + {\"$1\": \"$2\"}")
               ^---------------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.


In scripts/common.sh line 103:
  ARGS=${@:2}
       ^----^ SC2124 (warning): Assigning an array to a string! Assign as array, or use * instead of @ to concatenate.


In scripts/common.sh line 128:
    echo " \
         ^-- SC2028 (info): echo may not expand escape sequences. Use printf.


In scripts/common.sh line 141:
    echo " \
         ^-- SC2028 (info): echo may not expand escape sequences. Use printf.


In scripts/common.sh line 151:
  ARGS=${@:2}
       ^----^ SC2124 (warning): Assigning an array to a string! Assign as array, or use * instead of @ to concatenate.


In scripts/common.sh line 157:
  length=$(echo "$BYTECODE" | wc -m)
           ^----------------------^ SC2000 (style): See if you can use ${#variable} instead.


In scripts/common.sh line 158:
  echo $(($length / 2))
          ^-----^ SC2004 (style): $/${} is unnecessary on arithmetic variables.


In scripts/contract-size.sh line 5:
. $(dirname $0)/common.sh
  ^-----------^ SC2046 (warning): Quote this to prevent word splitting.
  ^---------------------^ SC1091 (info): Not following: ./common.sh was not specified as input (see shellcheck -x).
            ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
. $(dirname "$0")/common.sh


In scripts/contract-size.sh line 9:
    echo '"$contract" env variable is not set. Set it to the name of the contract you want to estimate size for.'
         ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In scripts/contract-size.sh line 15:
contract_size=$(contract_size ${contract})
                              ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
contract_size=$(contract_size "${contract}")


In scripts/contract-size.sh line 18:
echo "$((24576 - ${contract_size})) bytes left to reach the smart contract size limit of 24576 bytes."
                 ^--------------^ SC2004 (style): $/${} is unnecessary on arithmetic variables.


In scripts/dapptools/verify.sh line 142:
while [ $count -lt 5 ]; do
      ^--------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
while [[ $count -lt 5 ]]; do


In scripts/deploy.sh line 6:
. $(dirname $0)/common.sh
  ^-----------^ SC2046 (warning): Quote this to prevent word splitting.
  ^---------------------^ SC1091 (info): Not following: ./common.sh was not specified as input (see shellcheck -x).
            ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
. $(dirname "$0")/common.sh


In scripts/deploy.sh line 9:
. $(dirname $0)/helper-config.sh
  ^-----------^ SC2046 (warning): Quote this to prevent word splitting.
  ^----------------------------^ SC1091 (info): Not following: ./helper-config.sh was not specified as input (see shellcheck -x).
            ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
. $(dirname "$0")/helper-config.sh


In scripts/deploy.sh line 13:
: ${CONTRACT:=Greeter}
  ^------------------^ SC2223 (info): This default assignment may cause DoS due to globbing. Quote it.


In scripts/deploy.sh line 14:
echo "Deploying $CONTRACT to $NETWORK with arguments: $arguments"
                                                      ^--------^ SC2154 (warning): arguments is referenced but not assigned.


In scripts/deploy.sh line 15:
Addr=$(deploy $CONTRACT $arguments)
                        ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
Addr=$(deploy $CONTRACT "$arguments")


In scripts/deploy.sh line 16:
log "$CONTRACT deployed at:" $Addr
                             ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
log "$CONTRACT deployed at:" "$Addr"


In scripts/env-check.sh line 4:
cd "$(git rev-parse --show-toplevel)"
^-- SC2164 (warning): Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

Did you mean: 
cd "$(git rev-parse --show-toplevel)" || exit


In scripts/estimate-gas.sh line 5:
. $(dirname $0)/common.sh
  ^-----------^ SC2046 (warning): Quote this to prevent word splitting.
  ^---------------------^ SC1091 (info): Not following: ./common.sh was not specified as input (see shellcheck -x).
            ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
. $(dirname "$0")/common.sh


In scripts/estimate-gas.sh line 9:
    echo '"$contract" env variable is not set. Set it to the name of the contract you want to estimate gas cost for.'
         ^-- SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.


In scripts/estimate-gas.sh line 16:
estimate_gas $contract
             ^-------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
estimate_gas "$contract"


In scripts/git/add-module line 3:
[ -z "$1" -o $(echo "$1" | tr '/' '\n' | wc -l) != 2 ] &&
^-- SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
          ^-- SC2166 (warning): Prefer [ p ] || [ q ] as [ p -o q ] is not well defined.
             ^-- SC2046 (warning): Quote this to prevent word splitting.


In scripts/git/add-module line 11:
[ -n "$2" ] && DEST="$2"
^---------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
[[ -n "$2" ]] && DEST="$2"


In scripts/git/git-ssh line 3:
git remote set-url origin $(git remote show origin | grep "Fetch URL" | sed 's/ *Fetch URL: //' | sed 's/https:\/\/github.com\//[email protected]:/')
                          ^-- SC2046 (warning): Quote this to prevent word splitting.


In scripts/helper-config.sh line 11:
if [ "$NETWORK" = "rinkeby" ]; then
   ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$NETWORK" = "rinkeby" ]]; then


In scripts/helper-config.sh line 15:
elif [ "$NETWORK" = "mainnet" ]; then
     ^------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
elif [[ "$NETWORK" = "mainnet" ]]; then


In scripts/helper-config.sh line 21:
if [ "$CONTRACT" = "Greeter" ]; then
   ^-------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
if [[ "$CONTRACT" = "Greeter" ]]; then


In scripts/hevm.sh line 3:
  hevm dapp-test --rpc="${ETH_RPC_URL}" --json-file=out/dapp.sol.json --dapp-root=. --verbose 2 --match "test_gas"
  ^--^ SC2264 (error): This function unconditionally re-invokes itself. Missing 'command'?

Did you mean: 
  command hevm dapp-test --rpc="${ETH_RPC_URL}" --json-file=out/dapp.sol.json --dapp-root=. --verbose 2 --match "test_gas"


In scripts/mod/json-fix.sh line 3:
forge $cmd | tail -n +2 | tee $outputFile
      ^--^ SC2154 (warning): cmd is referenced but not assigned.
      ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
                              ^---------^ SC2154 (warning): outputFile is referenced but not assigned.
                              ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
forge "$cmd" | tail -n +2 | tee "$outputFile"


In scripts/remove-color-output.sh line 3:
forge $cmd | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | tee $outputFile
      ^--^ SC2154 (warning): cmd is referenced but not assigned.
      ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                        ^---------^ SC2154 (warning): outputFile is referenced but not assigned.
                                                                        ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
forge "$cmd" | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | tee "$outputFile"


In scripts/utils.sh line 25:
  echo "[Error] $@"
                ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.


In scripts/utils.sh line 30:
  if [ $? -ne 0 ]; then
     ^----------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Did you mean: 
  if [[ $? -ne 0 ]]; then


In scripts/utils.sh line 32:
    echo "[Error] $@"
                  ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.


In scripts/utils.sh line 38:
  cat /dev/urandom | env LC_CTYPE=C tr -dc $1 | head -c $2
      ^----------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
                                           ^-- SC2086 (info): Double quote to prevent globbing and word splitting.
                                                        ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
  cat /dev/urandom | env LC_CTYPE=C tr -dc "$1" | head -c "$2"


In scripts/utils.sh line 44:
  echo $(random [:alpha:] 1)$(random [:alnum:] 15)
       ^-------------------^ SC2046 (warning): Quote this to prevent word splitting.
                ^-------^ SC2101 (warning): Named class needs outer [], e.g. [[:digit:]].
                            ^--------------------^ SC2046 (warning): Quote this to prevent word splitting.
                                     ^-------^ SC2101 (warning): Named class needs outer [], e.g. [[:digit:]].


In scripts/utils.sh line 50:
  if [ "${logging_lvl}" == "debug" ]; then echo "[Debug] $@"; fi
     ^-----------------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
                                                         ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.

Did you mean: 
  if [[ "${logging_lvl}" == "debug" ]]; then echo "[Debug] $@"; fi


In scripts/utils.sh line 54:
  if [[ "${logging_lvl}" =~ (debug|info) ]]; then echo "[Info] $@"; fi
                                                               ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.


In scripts/utils.sh line 58:
  if [[ "${logging_lvl}" =~ (debug|info|error) ]]; then echo && echo "[Error] $@"; fi
                                                                              ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.


In scripts/utils.sh line 62:
  if [ -z ${logging_lvl} ]; then
     ^-------------------^ SC2292 (style): Prefer [[ ]] over [ ] for tests in Bash/Ksh.
          ^------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
  if [[ -z "${logging_lvl}" ]]; then


In scripts/utils.sh line 79:
  echo "[Running '$@']"
                  ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.


In scripts/utils.sh line 80:
  $@
  ^-- SC2068 (error): Double quote array expansions to avoid re-splitting elements.


In scripts/utils.sh line 81:
  echo "['$@' finished in $SECONDS seconds]"
          ^-- SC2145 (error): Argument mixes string and array. Use * or separate argument.


In src/init.sh line 10:
log_file="foundry_script_log-`date +'%Y-%m-%d_%H-%M-%S'`.txt"
                             ^-------------------------^ SC2006 (style): Use $(...) notation instead of legacy backticks `...`.

Did you mean: 
log_file="foundry_script_log-$(date +'%Y-%m-%d_%H-%M-%S').txt"


In src/init.sh line 14:
if [[ "$(basename $0)" = "install.sh"  ]]; then
                  ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
if [[ "$(basename "$0")" = "install.sh"  ]]; then


In src/init.sh line 15:
  cd "$(dirname $0)/install/"
                ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
  cd "$(dirname "$0")/install/"


In src/init.sh line 17:
  cd "$(dirname $0)"  # assume we're a test script or some such
                ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
  cd "$(dirname "$0")"  # assume we're a test script or some such


In src/init.sh line 29:
t=$(mktemp) && export -p > "$t" && set -a && . $_ENV && set +a && . "$t" && rm "$t" && unset t
                                               ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
t=$(mktemp) && export -p > "$t" && set -a && . "$_ENV" && set +a && . "$t" && rm "$t" && unset t

For more information:
  https://www.shellcheck.net/wiki/SC2068 -- Double quote array expansions to ...
  https://www.shellcheck.net/wiki/SC2145 -- Argument mixes string and array. ...
  https://www.shellcheck.net/wiki/SC2264 -- This function unconditionally re-...
----------

You can address the above issues in one of three ways:
1. Manually correct the issue in the offending shell script;
2. Disable specific issues by adding the comment:
  # shellcheck disable=NNNN
above the line that contains the issue, where NNNN is the error code;
3. Add '-e NNNN' to the SHELLCHECK_OPTS setting in your .yml action file.



shfmt errors

'shfmt -s' returned error 1 finding the following formatting issues:

----------
--- scripts/common.sh.orig
+++ scripts/common.sh
@@ -155,5 +155,5 @@
   # get the bytecode from the compiled file
   BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
   length=$(echo "$BYTECODE" | wc -m)
-  echo $(($length / 2))
+  echo $((length / 2))
 }
--- scripts/contract-size.sh.orig
+++ scripts/contract-size.sh
@@ -15,4 +15,4 @@
 contract_size=$(contract_size ${contract})
 echo "Contract Name: ${contract}"
 echo "Contract Size: ${contract_size} bytes"
-echo "$((24576 - ${contract_size})) bytes left to reach the smart contract size limit of 24576 bytes."
+echo "$((24576 - contract_size)) bytes left to reach the smart contract size limit of 24576 bytes."
--- scripts/dapptools/verify.sh.orig
+++ scripts/dapptools/verify.sh
@@ -114,7 +114,7 @@
   fi
 fi
 
-if [[ "$optimized" = "true" ]]; then
+if [[ $optimized == "true" ]]; then
   optimized=1
 else
   optimized=0
@@ -153,16 +153,16 @@
   message=$(jshon <<<"$response" -e message -u)
   count=$((count + 1))
 
-  [[ $status = 1 ]] && break
+  [[ $status == 1 ]] && break
 done
 
-[[ $status = 0 && $message = "Contract source code already verified" ]] && {
+[[ $status == 0 && $message == "Contract source code already verified" ]] && {
   echo >&2 "Contract source code already verified."
   echo >&2 "Go to $ETHERSCAN_URL/$2#code"
   exit 0
 }
 
-[[ $status = 0 ]] && {
+[[ $status == 0 ]] && {
   echo >&2 "There was an error verifying this contract."
   echo >&2 "Response: $message"
   echo >&2 "Details: $guid"
@@ -178,13 +178,13 @@
 status=$(jshon <<<"$response" -e status -u)
 result=$(jshon <<<"$response" -e result -u)
 
-[[ $status = 1 ]] && {
+[[ $status == 1 ]] && {
   echo >&2 "$result"
   echo >&2 "Go to $ETHERSCAN_URL/$2#code"
   exit 0
 }
 
-[[ $status = 0 ]] && {
+[[ $status == 0 ]] && {
   echo >&2 "Failure"
   echo >&2 "$result"
   exit 1
--- scripts/utils.sh.orig
+++ scripts/utils.sh
@@ -51,11 +51,11 @@
 }
 
 log_info() {
-  if [[ "${logging_lvl}" =~ (debug|info) ]]; then echo "[Info] $@"; fi
+  if [[ ${logging_lvl} =~ (debug|info) ]]; then echo "[Info] $@"; fi
 }
 
 log_error() {
-  if [[ "${logging_lvl}" =~ (debug|info|error) ]]; then echo && echo "[Error] $@"; fi
+  if [[ ${logging_lvl} =~ (debug|info|error) ]]; then echo && echo "[Error] $@"; fi
 }
 
 log_set_logging_lvl() {
@@ -66,7 +66,7 @@
 }
 
 logging_lvl_validate() {
-  if [[ "${logging_lvl}" =~ (debug|info|error) ]]; then
+  if [[ ${logging_lvl} =~ (debug|info|error) ]]; then
     log_debug " [Validation Passed] logging_lvl = '${logging_lvl}'"
   else
     exit_with_error " [Validation Failed] Unsupported logging level '${logging_lvl}'. Supported loggin levels are 'debug|info|error'."
--- src/init.sh.orig
+++ src/init.sh
@@ -7,14 +7,14 @@
 umask 002
 
 ## @note https://unix.stackexchange.com/a/145654/108960
-log_file="foundry_script_log-`date +'%Y-%m-%d_%H-%M-%S'`.txt"
+log_file="foundry_script_log-$(date +'%Y-%m-%d_%H-%M-%S').txt"
 exec &> >(tee -a "$log_file")
 
 # Work from /install/ for install.sh, project root otherwise
-if [[ "$(basename $0)" = "install.sh"  ]]; then
+if [[ "$(basename $0)" == "install.sh" ]]; then
   cd "$(dirname $0)/install/"
 else
-  cd "$(dirname $0)"  # assume we're a test script or some such
+  cd "$(dirname $0)" # assume we're a test script or some such
 fi
 
 ## Allow `.env` overrides using the `.env.custom` file
@@ -26,4 +26,4 @@
 
 ## Read .env for default values
 ## @see https://stackoverflow.com/a/59831605/90297
-t=$(mktemp) && export -p > "$t" && set -a && . $_ENV && set +a && . "$t" && rm "$t" && unset t
+t=$(mktemp) && export -p >"$t" && set -a && . $_ENV && set +a && . "$t" && rm "$t" && unset t
----------

You can reformat the above files to meet shfmt's requirements by typing:

  shfmt -s -w filename


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant