From 975587e9d2b5f1a85082ab7bf89e4c22dc0e9e62 Mon Sep 17 00:00:00 2001 From: Quentin Manfroi Date: Tue, 17 Jul 2018 11:50:42 +0200 Subject: [PATCH] MON-259 improve readme generator --- scripts/01_update_output.sh | 17 +++----- scripts/02_update_readme.sh | 83 ++++++++++++++++++++++++------------- scripts/auto_update.sh | 2 +- scripts/utils.sh | 28 +++++++++++++ 4 files changed, 90 insertions(+), 40 deletions(-) create mode 100755 scripts/utils.sh diff --git a/scripts/01_update_output.sh b/scripts/01_update_output.sh index ff96107..ccef054 100755 --- a/scripts/01_update_output.sh +++ b/scripts/01_update_output.sh @@ -1,18 +1,13 @@ #!/bin/bash -set -xeo pipefail +set -xueo pipefail -script_dir=$(dirname $0) -if [[ "$script_dir" == "." ]]; then - cd .. -else - cd "$(dirname $script_dir)" -fi +source "$(dirname $0)/utils.sh" +goto_root -for file in $(find . -path ./incubator -prune -o -name 'monitors-*.tf' -print); do - cd $(dirname $file) - echo $file +for path in $(find . -path ./incubator -prune -o -name 'monitors-*.tf' -print); do + cd $(dirname $path) > outputs.tf - for monitor in $(grep 'resource "datadog_monitor"' $(basename $file) | awk '{print $3}' | tr -d '"' ); do + for monitor in $(grep 'resource "datadog_monitor"' $(basename $path) | awk '{print $3}' | tr -d '"' ); do echo $monitor cat <> outputs.tf output "${monitor}_id" { diff --git a/scripts/02_update_readme.sh b/scripts/02_update_readme.sh index fcd333b..a58c109 100755 --- a/scripts/02_update_readme.sh +++ b/scripts/02_update_readme.sh @@ -1,45 +1,72 @@ #!/bin/bash -set -xeo pipefail +set -xueo pipefail -script_dir=$(dirname $0) -if [[ "$script_dir" == "." ]]; then - cd .. -else - cd "$(dirname $script_dir)" -fi +source "$(dirname $0)/utils.sh" +goto_root sed -i '/### Monitors summary ###/q' README.md echo >> README.md -for dir in $(find -mindepth 1 \( -path ./incubator -o -path ./scripts -o -path ./testing -o -path ./.git \) -prune -o -type d -print | sort); do - count=$(echo ${dir} | tr -cd '/' | wc -c) - for i in $(seq 1 $((${count}-1))); do +for path in $(find -mindepth 1 \( -path './incubator' -o -path './scripts' -o -path './testing' -o -path '*/\.*' \) -prune -o -type d -print | sort); do + directories=($(list_dirs $path)) + for i in $(seq 1 $((${#directories[@]}-1))); do echo -en "\t" >> README.md done - echo -en "- [$(basename ${dir})](https://bitbucket.org/morea/terraform.feature.datadog/src/master/" >> README.md - for i in $(seq 2 $((${count}+1))); do - echo -en "$(echo ${dir} | cut -d'/' -f ${i})/" >> README.md + echo -en "- [$(basename ${path})](https://bitbucket.org/morea/terraform.feature.datadog/src/master/" >> README.md + for directory in "${directories[@]}"; do + echo -en "${directory}/" >> README.md done echo ")" >> README.md done PATTERN_DOC="Related documentation" -for dir in $(find -mindepth 2 -name README.md); do - cd $(dirname $dir) - pwd - cp README.md README.md.bak - sed -i '/Inputs/,$d' README.md - terraform-docs md ./ | tail -n +2 >> README.md - sed -i 's/## Inputs/Inputs/g' README.md - sed -i '/Inputs/a ------' README.md - sed -i 's/## Outputs/Outputs/g' README.md - sed -i '/Outputs/a -------' README.md - if ! grep "${PATTERN_DOC}" README.md.bak; then - echo "Error: missing documentation section in README" - exit 1 +for path in $(find . -path ./incubator -prune -o -name 'monitors-*.tf' -print); do + cd $(dirname $path) + EXIST=0 + if [ -f README.md ]; then + mv README.md README.md.bak + EXIST=1 + fi + module=$(list_dirs $(dirname ${path})) + module_space=${module^^} + module_dash=${module//[ ]/-} + module_slash=${module//[ ]/\/} + cat < README.md +# ${module_space} DataDog monitors + +## How to use this module + +\`\`\` +module "datadog-monitors-${module_dash}" { + source = "git::ssh://git@bitbucket.org/morea/terraform.feature.datadog.git//${module_slash}?ref={revision}" + + environment = "\${var.environment}" + message = "\${module.datadog-message-alerting.alerting-message}" +} + +\`\`\` + +## Purpose + +Creates DataDog monitors with the following checks : + +EOF + SAVEIFS=$IFS + IFS=$(echo -en "\n\b") + for match in $(grep name $(basename ${path})); do + echo "- $(get_name "${match}")" >> README.md + done + IFS=$SAVEIFS + terraform-docs md ./ >> README.md + if [[ $EXIST -eq 0 ]]; then + cat <> README.md +## ${PATTERN_DOC} + +EOF + else + grep -Pzo --color=never ".*${PATTERN_DOC}(.*\n)*" README.md.bak | head -n -1 >> README.md + rm README.md.bak fi - grep -Pzo --color=never ".*${PATTERN_DOC}(.*\n)*" README.md.bak | head -n -1 >> README.md dos2unix README.md - rm README.md.bak cd - >> /dev/null done diff --git a/scripts/auto_update.sh b/scripts/auto_update.sh index c22bb77..cb911e1 100755 --- a/scripts/auto_update.sh +++ b/scripts/auto_update.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -xeo pipefail +set -xueo pipefail cd $(dirname $0) for script in [0-9][0-9]_*.sh; do diff --git a/scripts/utils.sh b/scripts/utils.sh new file mode 100755 index 0000000..7ef9924 --- /dev/null +++ b/scripts/utils.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +function goto_root { + script_dir=$(dirname $0) + if [[ "$script_dir" == "." ]]; then + cd .. + else + cd "$(dirname $script_dir)" + fi +} + +function list_dirs { + echo ${1} | awk -F '/' '{$1=""; print $0}' | cut -c 2- +} + +function get_name { + regex='^[[:space:]]+name[[:space:]]+=[[:space:]]+"\[.*\][[:space:]]+(.*)"$' + if [[ "${1}" =~ ${regex} ]]; then + name="${BASH_REMATCH[1]}" + else + return 42 + fi + if [[ "${name}" =~ ^(.*)[[:space:]]\{\{#is_alert\}\}.*$ ]]; then + echo "${BASH_REMATCH[1]}" + else + echo $name + fi +}