From c565ae43c570d1f6bee101fb2716a9b2f8a0d734 Mon Sep 17 00:00:00 2001 From: mikatong Date: Thu, 10 Nov 2022 17:31:07 +0800 Subject: [PATCH 1/4] fix e2e --- .github/workflows/e2e-tests.yml | 10 +++++++++ GNUmakefile | 3 +++ scripts/changelog-test.sh | 40 +++++++++++++++++++++++++++++++++ scripts/delta-test.sh | 18 +++++---------- 4 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 scripts/changelog-test.sh diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index d93147ff49..7918c44245 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -51,6 +51,16 @@ jobs: # Runs a set of commands using the runners shell - name: e2e tests run: | + if [ -f ".changelog/${{ github.event.pull_request.number }}.txt" ]; then + make changelogtest + + if [ $? -ne 0 ]; then + printf "COMMIT FAILED\n"s + exit 1 + fi + exit 0 + fi + make deltatest if [ $? -ne 0 ]; then printf "COMMIT FAILED\n" diff --git a/GNUmakefile b/GNUmakefile index 45bbe4f11f..66fc7d5ead 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -32,6 +32,9 @@ fmtcheck: deltatest: @sh -c "'$(CURDIR)/scripts/delta-test.sh'" +changelogtest: + @sh -c "'$(CURDIR)/scripts/changelog-test.sh'" + lint: @echo "==> Checking source code against linters..." @GOGC=30 GOPACKAGESPRINTGOLISTERRORS=1 golangci-lint run --timeout=30m ./$(PKG_NAME) diff --git a/scripts/changelog-test.sh b/scripts/changelog-test.sh new file mode 100644 index 0000000000..07daa687f6 --- /dev/null +++ b/scripts/changelog-test.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +range_sha=${BASE_SHA} +echo $(git diff --name-status ${range_sha} | awk '{print $2}') +#service files +update_service_functions="" +service_files=`git diff --name-status ${range_sha} | awk '{print $2}' | grep "^tencentcloud/service*"` +if [ $service_files ] ; then + update_service_functions=`echo $service_files | xargs git diff ${range_sha} | grep "@@" | grep "func" | awk -F ")" '{print $2}' | awk -F "(" '{print $1}' | tr -d ' '` +fi +echo "update_service_functions: $update_service_functions" +need_test_files="" +for update_service_function in $update_service_functions; do + tmp_files=`grep -r --with-filename $update_service_function ./tencentcloud | awk -F ":" '{print $1}' | grep -v "service_tencent*" | awk -F "/" '{print $3}' | sort | uniq | egrep "^resource_tc_|^data_source_tc" | awk -F "." '{print $1}' | awk '/_test$/{print "tencentcloud/"$0".go"} !/_test$/{print "tencentcloud/"$0"_test.go"}'` + need_test_files="$need_test_files $tmp_files" +done +echo "need_test_files: $need_test_files" + +# resource&&data_source files +update_sources=`git diff --name-status ${range_sha}| awk '{print $2}' | egrep "^tencentcloud/resource_tc|^tencentcloud/data_source" | egrep -v "_test.go" | awk -F "." '{print $1"_test.go"}'` +echo "update_sources: $update_sources" +# test files +delta_test_files=`git diff --name-status ${range_sha} | egrep "_test\.go$" | awk '{print $2}'` +echo "delta_test_files: $delta_test_files" +# all test files +delta_test_files="$delta_test_files $need_test_files $update_sources" +delta_test_files=`echo $delta_test_files | xargs -n1 | sort | uniq` +echo "all delta_test_files: $delta_test_files" +for delta_test_file in ${delta_test_files}; do + test_casts=`egrep "func TestAcc.+\(" ${delta_test_file} | awk -F "(" '{print $1}' | awk '{print $2}' | grep -v "NeedFix"` + echo "[$delta_test_file] \n$test_casts" + for test_cast in ${test_casts}; do + go_test_cmd="go test -v -run ${test_cast} -timeout=0 ./tencentcloud/" + $go_test_cmd + if [ $? -ne 0 ]; then + printf "[GO TEST FILED] ${go_test_cmd}" + exit 1 + fi + done +done diff --git a/scripts/delta-test.sh b/scripts/delta-test.sh index 5af2cf3fcc..fdc6de33c8 100755 --- a/scripts/delta-test.sh +++ b/scripts/delta-test.sh @@ -1,20 +1,12 @@ #!/bin/bash -range_sha=${BASE_SHA} pr_id=${PR_ID} -update_source_count=`git diff --name-status ${range_sha}| awk '{print $2}' | egrep "^tencentcloud/resource_tc|^tencentcloud/data_source" | egrep -v "_test.go" | wc -l` -if [ $update_source_count -eq 0 ]; then - printf "No source change, skip delta-test!" - exit 0 -fi - -if [ ! -f ".changelog/${pr_id}.txt" ]; then - printf "Not find changelog file!" - exit 1 -fi -source_names=`cat .changelog/${pr_id}.txt| grep -E "^(resource|datasource)\/(\w+)" | awk -F ":" '{print $1}' | sort | uniq` - +new_resources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-resource\n)\w+" | awk '{print "resource/"$0}'` +new_data_sources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-data-source\n)\w+" | awk '{print "datasource/"$0}'` +source_names=`cat .changelog/${pr_id}.txt| grep -E "^(resource|datasource)\/(\w+)" | awk -F ":" '{print $1}'` +source_names="$source_names $new_resources $new_data_sources" +source_names=`echo $source_names | xargs -n1 | sort | uniq` test_files="" for source_name in $source_names; do name=${source_name#*/} From 7cdb7e4f6d1e908325304684f578add5f9af004c Mon Sep 17 00:00:00 2001 From: mikatong Date: Fri, 11 Nov 2022 14:58:30 +0800 Subject: [PATCH 2/4] support delta and changelog test --- .github/workflows/e2e-tests.yml | 12 +----- GNUmakefile | 3 ++ scripts/changelog-test.sh | 74 +++++++++++++++++---------------- scripts/delta-test.sh | 74 ++++++++++++++++----------------- scripts/dispacher-test.sh | 19 +++++++++ 5 files changed, 97 insertions(+), 85 deletions(-) mode change 100644 => 100755 scripts/changelog-test.sh mode change 100755 => 100644 scripts/delta-test.sh create mode 100644 scripts/dispacher-test.sh diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 7918c44245..1787688156 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -51,17 +51,7 @@ jobs: # Runs a set of commands using the runners shell - name: e2e tests run: | - if [ -f ".changelog/${{ github.event.pull_request.number }}.txt" ]; then - make changelogtest - - if [ $? -ne 0 ]; then - printf "COMMIT FAILED\n"s - exit 1 - fi - exit 0 - fi - - make deltatest + make dispachertest if [ $? -ne 0 ]; then printf "COMMIT FAILED\n" exit 1 diff --git a/GNUmakefile b/GNUmakefile index 66fc7d5ead..53262e3cdc 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -35,6 +35,9 @@ deltatest: changelogtest: @sh -c "'$(CURDIR)/scripts/changelog-test.sh'" +dispachertest: + @sh -c "'$(CURDIR)/scripts/dispacher-test.sh'" + lint: @echo "==> Checking source code against linters..." @GOGC=30 GOPACKAGESPRINTGOLISTERRORS=1 golangci-lint run --timeout=30m ./$(PKG_NAME) diff --git a/scripts/changelog-test.sh b/scripts/changelog-test.sh old mode 100644 new mode 100755 index 07daa687f6..fdc6de33c8 --- a/scripts/changelog-test.sh +++ b/scripts/changelog-test.sh @@ -1,40 +1,44 @@ #!/bin/bash -range_sha=${BASE_SHA} -echo $(git diff --name-status ${range_sha} | awk '{print $2}') -#service files -update_service_functions="" -service_files=`git diff --name-status ${range_sha} | awk '{print $2}' | grep "^tencentcloud/service*"` -if [ $service_files ] ; then - update_service_functions=`echo $service_files | xargs git diff ${range_sha} | grep "@@" | grep "func" | awk -F ")" '{print $2}' | awk -F "(" '{print $1}' | tr -d ' '` -fi -echo "update_service_functions: $update_service_functions" -need_test_files="" -for update_service_function in $update_service_functions; do - tmp_files=`grep -r --with-filename $update_service_function ./tencentcloud | awk -F ":" '{print $1}' | grep -v "service_tencent*" | awk -F "/" '{print $3}' | sort | uniq | egrep "^resource_tc_|^data_source_tc" | awk -F "." '{print $1}' | awk '/_test$/{print "tencentcloud/"$0".go"} !/_test$/{print "tencentcloud/"$0"_test.go"}'` - need_test_files="$need_test_files $tmp_files" +pr_id=${PR_ID} + +new_resources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-resource\n)\w+" | awk '{print "resource/"$0}'` +new_data_sources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-data-source\n)\w+" | awk '{print "datasource/"$0}'` +source_names=`cat .changelog/${pr_id}.txt| grep -E "^(resource|datasource)\/(\w+)" | awk -F ":" '{print $1}'` +source_names="$source_names $new_resources $new_data_sources" +source_names=`echo $source_names | xargs -n1 | sort | uniq` +test_files="" +for source_name in $source_names; do + name=${source_name#*/} + type=${source_name%/*} + if [ $type == "datasource" ]; then + type=dataSource + fi + # echo $source_name $type $name + function_name=$(cat tencentcloud/provider.go | grep "\"${name}\"" | grep "${type}") + function_name=${function_name#*:} + function_name=$(echo $(echo ${function_name%,*})) + + test_file=$(grep -r "func $function_name \*schema\.Resource" tencentcloud) + test_file=${test_file#*/} + test_file=${test_file%:*} + test_files="$test_files $test_file" done -echo "need_test_files: $need_test_files" +echo "test files:" $test_files + +for test_file in $test_files; do + test_case_type=${test_file%_tc*} + test_case_name=${test_file#*tc_} + test_case_name=${test_case_name%.*} -# resource&&data_source files -update_sources=`git diff --name-status ${range_sha}| awk '{print $2}' | egrep "^tencentcloud/resource_tc|^tencentcloud/data_source" | egrep -v "_test.go" | awk -F "." '{print $1"_test.go"}'` -echo "update_sources: $update_sources" -# test files -delta_test_files=`git diff --name-status ${range_sha} | egrep "_test\.go$" | awk '{print $2}'` -echo "delta_test_files: $delta_test_files" -# all test files -delta_test_files="$delta_test_files $need_test_files $update_sources" -delta_test_files=`echo $delta_test_files | xargs -n1 | sort | uniq` -echo "all delta_test_files: $delta_test_files" -for delta_test_file in ${delta_test_files}; do - test_casts=`egrep "func TestAcc.+\(" ${delta_test_file} | awk -F "(" '{print $1}' | awk '{print $2}' | grep -v "NeedFix"` - echo "[$delta_test_file] \n$test_casts" - for test_cast in ${test_casts}; do - go_test_cmd="go test -v -run ${test_cast} -timeout=0 ./tencentcloud/" - $go_test_cmd - if [ $? -ne 0 ]; then - printf "[GO TEST FILED] ${go_test_cmd}" - exit 1 - fi - done + test_case_type=`echo $test_case_type | sed -r 's/(^|_)(\w)/\U\2/g'` + test_case_name=`echo $test_case_name | sed -r 's/(^|_)(\w)/\U\2/g'` + + go_test_cmd="go test -v -run TestAccTencentCloud${test_case_name}${test_case_type} -timeout=0 ./tencentcloud/" + echo $go_test_cmd + $go_test_cmd + if [ $? -ne 0 ]; then + printf "[GO TEST FILED] ${go_test_cmd}" + exit 1 + fi done diff --git a/scripts/delta-test.sh b/scripts/delta-test.sh old mode 100755 new mode 100644 index fdc6de33c8..07daa687f6 --- a/scripts/delta-test.sh +++ b/scripts/delta-test.sh @@ -1,44 +1,40 @@ #!/bin/bash -pr_id=${PR_ID} - -new_resources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-resource\n)\w+" | awk '{print "resource/"$0}'` -new_data_sources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-data-source\n)\w+" | awk '{print "datasource/"$0}'` -source_names=`cat .changelog/${pr_id}.txt| grep -E "^(resource|datasource)\/(\w+)" | awk -F ":" '{print $1}'` -source_names="$source_names $new_resources $new_data_sources" -source_names=`echo $source_names | xargs -n1 | sort | uniq` -test_files="" -for source_name in $source_names; do - name=${source_name#*/} - type=${source_name%/*} - if [ $type == "datasource" ]; then - type=dataSource - fi - # echo $source_name $type $name - function_name=$(cat tencentcloud/provider.go | grep "\"${name}\"" | grep "${type}") - function_name=${function_name#*:} - function_name=$(echo $(echo ${function_name%,*})) - - test_file=$(grep -r "func $function_name \*schema\.Resource" tencentcloud) - test_file=${test_file#*/} - test_file=${test_file%:*} - test_files="$test_files $test_file" +range_sha=${BASE_SHA} +echo $(git diff --name-status ${range_sha} | awk '{print $2}') +#service files +update_service_functions="" +service_files=`git diff --name-status ${range_sha} | awk '{print $2}' | grep "^tencentcloud/service*"` +if [ $service_files ] ; then + update_service_functions=`echo $service_files | xargs git diff ${range_sha} | grep "@@" | grep "func" | awk -F ")" '{print $2}' | awk -F "(" '{print $1}' | tr -d ' '` +fi +echo "update_service_functions: $update_service_functions" +need_test_files="" +for update_service_function in $update_service_functions; do + tmp_files=`grep -r --with-filename $update_service_function ./tencentcloud | awk -F ":" '{print $1}' | grep -v "service_tencent*" | awk -F "/" '{print $3}' | sort | uniq | egrep "^resource_tc_|^data_source_tc" | awk -F "." '{print $1}' | awk '/_test$/{print "tencentcloud/"$0".go"} !/_test$/{print "tencentcloud/"$0"_test.go"}'` + need_test_files="$need_test_files $tmp_files" done -echo "test files:" $test_files - -for test_file in $test_files; do - test_case_type=${test_file%_tc*} - test_case_name=${test_file#*tc_} - test_case_name=${test_case_name%.*} +echo "need_test_files: $need_test_files" - test_case_type=`echo $test_case_type | sed -r 's/(^|_)(\w)/\U\2/g'` - test_case_name=`echo $test_case_name | sed -r 's/(^|_)(\w)/\U\2/g'` - - go_test_cmd="go test -v -run TestAccTencentCloud${test_case_name}${test_case_type} -timeout=0 ./tencentcloud/" - echo $go_test_cmd - $go_test_cmd - if [ $? -ne 0 ]; then - printf "[GO TEST FILED] ${go_test_cmd}" - exit 1 - fi +# resource&&data_source files +update_sources=`git diff --name-status ${range_sha}| awk '{print $2}' | egrep "^tencentcloud/resource_tc|^tencentcloud/data_source" | egrep -v "_test.go" | awk -F "." '{print $1"_test.go"}'` +echo "update_sources: $update_sources" +# test files +delta_test_files=`git diff --name-status ${range_sha} | egrep "_test\.go$" | awk '{print $2}'` +echo "delta_test_files: $delta_test_files" +# all test files +delta_test_files="$delta_test_files $need_test_files $update_sources" +delta_test_files=`echo $delta_test_files | xargs -n1 | sort | uniq` +echo "all delta_test_files: $delta_test_files" +for delta_test_file in ${delta_test_files}; do + test_casts=`egrep "func TestAcc.+\(" ${delta_test_file} | awk -F "(" '{print $1}' | awk '{print $2}' | grep -v "NeedFix"` + echo "[$delta_test_file] \n$test_casts" + for test_cast in ${test_casts}; do + go_test_cmd="go test -v -run ${test_cast} -timeout=0 ./tencentcloud/" + $go_test_cmd + if [ $? -ne 0 ]; then + printf "[GO TEST FILED] ${go_test_cmd}" + exit 1 + fi + done done diff --git a/scripts/dispacher-test.sh b/scripts/dispacher-test.sh new file mode 100644 index 0000000000..22bb276563 --- /dev/null +++ b/scripts/dispacher-test.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +pr_id=${PR_ID} + +if [ -f ".changelog/${pr_id}.txt" ]; then + make changelogtest + + if [ $? -ne 0 ]; then + printf "COMMIT FAILED\n"s + exit 1 + fi + exit 0 +fi + +make deltatest +if [ $? -ne 0 ]; then + printf "COMMIT FAILED\n" + exit 1 +fi \ No newline at end of file From 7eae3f238497c14c0f94ec46e9710269f9532f8a Mon Sep 17 00:00:00 2001 From: mikatong Date: Fri, 11 Nov 2022 15:14:17 +0800 Subject: [PATCH 3/4] chmod +x for e2e test files --- scripts/delta-test.sh | 0 scripts/dispacher-test.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/delta-test.sh mode change 100644 => 100755 scripts/dispacher-test.sh diff --git a/scripts/delta-test.sh b/scripts/delta-test.sh old mode 100644 new mode 100755 diff --git a/scripts/dispacher-test.sh b/scripts/dispacher-test.sh old mode 100644 new mode 100755 From fe5c63fbad3f1b6ba7649f980dc2b49ca65193e9 Mon Sep 17 00:00:00 2001 From: mikatong Date: Fri, 11 Nov 2022 18:58:21 +0800 Subject: [PATCH 4/4] update --- scripts/changelog-test.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/changelog-test.sh b/scripts/changelog-test.sh index fdc6de33c8..c5774718b9 100755 --- a/scripts/changelog-test.sh +++ b/scripts/changelog-test.sh @@ -2,9 +2,12 @@ pr_id=${PR_ID} -new_resources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-resource\n)\w+" | awk '{print "resource/"$0}'` -new_data_sources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-data-source\n)\w+" | awk '{print "datasource/"$0}'` +new_resources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-resource\n)\w+\n" | awk '{print "resource/"$1}'` +echo new_resources: $new_resources +new_data_sources=`cat .changelog/${pr_id}.txt| grep -Poz "(?<=release-note:new-data-source\n)\w+\n" | awk '{print "datasource/"$1}'` +echo new_data_sources: $new_data_sources source_names=`cat .changelog/${pr_id}.txt| grep -E "^(resource|datasource)\/(\w+)" | awk -F ":" '{print $1}'` +echo source_names: $source_names source_names="$source_names $new_resources $new_data_sources" source_names=`echo $source_names | xargs -n1 | sort | uniq` test_files=""