143 lines
8.7 KiB
YAML
143 lines
8.7 KiB
YAML
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
name: Auto trigger teamcity
|
|
|
|
on:
|
|
issue_comment:
|
|
types: [created, edited]
|
|
pull_request_review_comment:
|
|
types: [created, edited]
|
|
|
|
env:
|
|
PULL_REQUEST_NUM: $(echo "${{ github.event.issue.pull_request.url }}" | awk -F/ '{print $NF}')
|
|
LATEST_COMMIT: $(curl -H "Authorization:Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/${{ github.repository }}/pulls/$(echo '${{ github.event.issue.pull_request.url }}' | awk -F/ '{print $NF}')" > pr_details.json && jq -r '.head.sha' pr_details.json)
|
|
TEAMCITY_URL: '-H \"Content-Type:text/plain\" -H \"Accept: application/json\" -u OneMoreChance:OneMoreChance http://43.132.222.7:8111'
|
|
|
|
jobs:
|
|
run_teamcity_pipeline:
|
|
if: (contains(github.event.comment.body, 'buildall') || contains(github.event.comment.body, 'p0') || contains(github.event.comment.body, 'nereids_p0') || contains(github.event.comment.body, 'p1') || contains(github.event.comment.body, 'feut') || contains(github.event.comment.body, 'beut') || contains(github.event.comment.body, 'compile') || contains(github.event.comment.body, 'clickbench') || contains(github.event.comment.body, 'arm') || contains(github.event.comment.body, 'external') || contains(github.event.comment.body, 'just_for_test')) && contains(github.event.comment.body, 'run') && !contains(github.event.comment.body, 'Thanks for your contribution')
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
ISSUE_COMMENT: ${{ github.event.comment.body }}
|
|
|
|
steps:
|
|
- name: Run pipeline by teamcity restful
|
|
run: |
|
|
if [ "_xx""${{ github.event.issue.pull_request.url }}" != "_xx" ]; then
|
|
echo "Comment was made on pull request: $(echo ${{ github.event.issue.pull_request.url }} | awk -F/ '{print $NF}')"
|
|
else
|
|
echo "Comment was made on an issue, not a pull request."
|
|
fi
|
|
comment="${{ env.ISSUE_COMMENT }}"
|
|
pull_request_num=${{ env.PULL_REQUEST_NUM }}
|
|
encoded_string=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "${comment}")
|
|
comment_message="${comment}"
|
|
latest_commit_id="${{ env.LATEST_COMMIT }}"
|
|
teamcity_url="${{ env.TEAMCITY_URL }}"
|
|
trigger_pipelines=""
|
|
same_build_sign="false"
|
|
echo "pull_request_num : ${pull_request_num}"
|
|
echo "encoded_string : ${encoded_string}"
|
|
echo "latest_commit_id : ${{ env.LATEST_COMMIT }}"
|
|
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "buildall" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_Doris_FeUt Doris_DorisBeUt_BeUt Doris_DorisCompile_Compile Doris_Benchmark_Clickbench Doris_ArmPipeline_P0Regression ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && ( "${comment_message}" =~ "p0" || "${comment_message}" =~ "external" ) && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_DorisRegression_P0Regression ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "nereids_p0" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_DorisRegression_NereidsP0Regression ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "p1" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_DorisRegression_P1Regression ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "feut" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_Doris_FeUt ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "beut" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_DorisBeUt_BeUt ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "compile" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_DorisCompile_Compile ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "clickbench" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_Benchmark_Clickbench ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "arm" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_ArmPipeline_P0Regression ${trigger_pipelines}"
|
|
fi
|
|
if [[ "${comment_message}" =~ "run" && "${comment_message}" =~ "just_for_test" && ! "${comment_message}" =~ "Thanks for your contribution" ]]; then
|
|
trigger_pipelines="Doris_DorisRegression_ExternalRegression ${trigger_pipelines}"
|
|
fi
|
|
|
|
if [ -z "${trigger_pipelines}" ];then
|
|
echo "Just a general comment that doesn't match any pipeline rules"
|
|
fi
|
|
|
|
echo "need run pipelines: ${trigger_pipelines}"
|
|
|
|
for pipeline in ${trigger_pipelines}
|
|
do
|
|
echo "-----------------------------------------------------------------"
|
|
running_builds_command="curl -s -X GET ${teamcity_url}/app/rest/builds\?locator\=buildType\:${pipeline}\,branch:pull/${pull_request_num}\,running:true"
|
|
echo "${running_builds_command}"
|
|
running_builds_list=$(eval "${running_builds_command}" > running_builds.json && jq -r '.build[].id' running_builds.json)
|
|
echo "running_builds_list : ${running_builds_list}"
|
|
|
|
queue_builds_command="curl -s -X GET ${teamcity_url}/app/rest/buildQueue\?locator\=buildType\:${pipeline}"
|
|
echo "${queue_builds_command}"
|
|
eval "${queue_builds_command}" > queue_builds.json
|
|
queue_builds_list=$(cat queue_builds.json | jq ".build[] | select(.branchName == \"pull/${pull_request_num}\") | .id" )
|
|
echo "queue builds list: ${queue_builds_list}"
|
|
|
|
merged_list=("${running_builds_list[@]} ${queue_builds_list[@]}")
|
|
echo "merged_list : ${merged_list}"
|
|
|
|
for build in ${merged_list}; do
|
|
running_commit_command="curl -s -X GET ${teamcity_url}/app/rest/builds/${build}"
|
|
echo "${running_commit_command}"
|
|
eval "${running_commit_command}" > build_commit_info.json
|
|
running_commit_id=$(jq -r '.revisions.revision[0].version' build_commit_info.json)
|
|
running_env_commit_id=$(cat build_commit_info.json | jq ".properties.property[] | select(.name == \"env.latest_commit_id\") | .value")
|
|
|
|
if [[ "_"${latest_commit_id} == "_"${running_commit_id} || _"\"${latest_commit_id}\"" == "_"${running_env_commit_id} ]];then
|
|
echo "the same pr_commit build already exist, this build ${build} is running or in queue!"
|
|
same_build_sign="true"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "_""${same_build_sign}" == "_false" ];then
|
|
sleep 10s
|
|
echo "there is no running build or queue build, so trigger a new !"
|
|
execute_command="curl -s -X POST ${teamcity_url}/httpAuth/action.html\?add2Queue\=${pipeline}\&branchName\=pull/${pull_request_num}\&name=env.latest_pr_comment\&value=${encoded_string}\&name=env.latest_commit_id\&value=${latest_commit_id}"
|
|
echo "${execute_command}"
|
|
eval "${execute_command}"
|
|
echo "-----------------------------------------------------------------"
|
|
else
|
|
echo "there is same pr commit task in queue,so skip trigger !"
|
|
echo "-----------------------------------------------------------------"
|
|
fi
|
|
done
|
|
|
|
|