Skip to content

Commit

Permalink
feat: Add support for quoted values in infracost_breakdown `--hook-…
Browse files Browse the repository at this point in the history
…config` (#269)
  • Loading branch information
MaxymVlasov authored Oct 27, 2021
1 parent 15cac90 commit e2604ea
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,10 +259,10 @@ Unlike most other hooks, this hook triggers once if there are any changed files
- id: infracost_breakdown
args:
- --args=--path=./env/dev
- --hook-config=.totalHourlyCost|tonumber > 0.1
- --hook-config=.totalHourlyCost|tonumber > 1
- --hook-config=.projects[].diff.totalMonthlyCost|tonumber != 10000
- --hook-config=.currency == "USD"
- --hook-config='.totalHourlyCost|tonumber > 0.1'
- --hook-config='.totalHourlyCost|tonumber > 1'
- --hook-config='.projects[].diff.totalMonthlyCost|tonumber != 10000'
- --hook-config='.currency == "USD"'
```
<!-- markdownlint-disable-next-line no-inline-html -->
<details><summary>Output</summary>
Expand Down Expand Up @@ -385,8 +385,8 @@ Example:
```yaml
- id: terraform_providers_lock
args:
- '--args=-platform=windows_amd64'
- '--args=-platform=darwin_amd64'
- --args=-platform=windows_amd64
- --args=-platform=darwin_amd64
```

4. It may happen that Terraform working directory (`.terraform`) already exists but not in the best condition (eg, not initialized modules, wrong version of Terraform, etc.). To solve this problem, you can find and delete all `.terraform` directories in your repository:
Expand Down
22 changes: 21 additions & 1 deletion infracost_breakdown.sh
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,27 @@ function infracost_breakdown_ {
# Next line removes leading spaces, just for fancy output reason.
check=$(echo "$check" | sed 's/^[[:space:]]*//')

operation="$(echo "$check" | grep -oE '[!<>=]+')"
# Drop quotes in hook args section. From:
# -h ".totalHourlyCost > 0.1"
# --hook-config='.currency == "USD"'
# To:
# -h .totalHourlyCost > 0.1
# --hook-config=.currency == "USD"
first_char=${check:0:1}
last_char=${check: -1}
if [ "$first_char" == "$last_char" ] && {
[ "$first_char" == '"' ] || [ "$first_char" == "'" ]
}; then
check="${check:1:-1}"
fi

operations=($(echo "$check" | grep -oE '[!<>=]{1,2}'))
# Get the very last operator, that is used in comparison inside `jq` query.
# From the example below we need to pick the `>` which is in between `add` and `1000`,
# but not the `!=`, which goes earlier in the `jq` expression
# [.projects[].diff.totalMonthlyCost | select (.!=null) | tonumber] | add > 1000
operation=${operations[-1]}

IFS="$operation" read -r -a jq_check <<< "$check"
real_value="$(jq "${jq_check[0]}" <<< "$RESULTS")"
compare_value="${jq_check[1]}${jq_check[2]}"
Expand Down

0 comments on commit e2604ea

Please sign in to comment.