-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathsr-run-ci-build.sh
More file actions
executable file
·159 lines (128 loc) · 7.01 KB
/
sr-run-ci-build.sh
File metadata and controls
executable file
·159 lines (128 loc) · 7.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/usr/bin/env bash
set -e # fail on errors
#set -x # echo commands run
export toolset_branch=$1
export server_type=$2
export tags_list=$3
export ubuntu_version=${ubuntu_version_name:-"focal"}
export ros_release=${ros_release_name:-"noetic"}
export docker_image=${docker_image_name:-"shadowrobot/build-tools:$ubuntu_version-$ros_release"}
export docker_user=${docker_user_name:-"user"}
export docker_user_home=${docker_user_home_dir:-"/home/user"}
# Do not install all libraries for docker container CI servers
if [ "semaphore_docker" != $server_type ] && [ "local" != $server_type ] && [ "travis" != $server_type ]; then
export build_tools_folder="$HOME/sr-build-tools"
sudo apt-get update
sudo apt-get install -y python3-dev libxml2-dev libxslt-dev python3-pip lcov wget git libssl-dev libffi-dev libyaml-dev
sudo pip3 install --upgrade pip setuptools==51.1.1 gcovr
if [ "$ubuntu_version" != "jammy" ]
then
sudo pip3 install PyYAML==5.4.1 --ignore-installed
else
sudo pip3 install "PyYAML>=5.4.1" --ignore-installed
fi
git config --global user.email "build.tools@example.com"
git config --global user.name "Build Tools"
# Clean up sr-build-tools and clone it with depth 1
rm -rf $build_tools_folder
git clone --depth 1 https://github.com/shadow-robot/sr-build-tools.git -b "$toolset_branch" $build_tools_folder
cd $build_tools_folder/ansible
sudo pip3 install -r data/$ubuntu_version/requirements.txt
fi
export extra_variables="codecov_secure=$CODECOV_TOKEN github_login=$GITHUB_LOGIN github_password=$GITHUB_PASSWORD ros_release=$ros_release ubuntu_version_name=$ubuntu_version "
case $server_type in
"travis") echo "Travis CI server"
sudo docker pull $docker_image
export extra_variables="$extra_variables travis_repo_dir=/host$TRAVIS_BUILD_DIR travis_is_pull_request=$TRAVIS_PULL_REQUEST"
sudo docker run -w "$docker_user_home/sr-build-tools/ansible" -v $TRAVIS_BUILD_DIR:/host$TRAVIS_BUILD_DIR $docker_image bash -c "git pull && git checkout $toolset_branch && sudo PYTHONUNBUFFERED=1 ansible-playbook -v -i \"localhost,\" -c local docker_site.yml --tags \"travis,$tags_list\" -e \"$extra_variables\" "
;;
"shippable") echo "Shippable server"
export extra_variables="$extra_variables shippable_repo_dir=$SHIPPABLE_BUILD_DIR shippable_is_pull_request=$PULL_REQUEST"
sudo PYTHONUNBUFFERED=1 ansible-playbook -v -i "localhost," -c local docker_site.yml --tags "shippable,$tags_list" -e "$extra_variables"
;;
"semaphore") echo "Semaphore server"
mkdir -p ~/workspace/src
sudo apt-get remove mongodb-* -y
sudo apt-get remove rabbitmq-* -y
sudo apt-get remove redis-* -y
sudo apt-get remove mysql-* -y
sudo apt-get remove cassandra-* -y
export extra_variables="$extra_variables semaphore_repo_dir=$SEMAPHORE_PROJECT_DIR semaphore_is_pull_request=$PULL_REQUEST_NUMBER"
sudo PYTHONUNBUFFERED=1 ansible-playbook -v -i "localhost," -c local docker_site.yml --tags "semaphore,$tags_list" -e "$extra_variables"
;;
"semaphore_docker") echo "Semaphore server with Docker support"
sudo docker pull $docker_image
export extra_variables="$extra_variables semaphore_repo_dir=/host$SEMAPHORE_PROJECT_DIR semaphore_is_pull_request=$PULL_REQUEST_NUMBER"
sudo docker run -w "$docker_user_home/sr-build-tools/ansible" -v /:/host:rw $docker_image bash -c "git pull && git checkout $toolset_branch && sudo PYTHONUNBUFFERED=1 ansible-playbook -v -i \"localhost,\" -c local docker_site.yml --tags \"semaphore,$tags_list\" -e \"$extra_variables\" "
;;
"circle") echo "Circle CI server"
export circle_test_dir=$CIRCLE_WORKING_DIRECTORY/test_results
export circle_code_coverage_dir=$CIRCLE_WORKING_DIRECTORY/code_coverage_results
mkdir -p $circle_test_dir
mkdir -p $circle_code_coverage_dir
export extra_variables="$extra_variables circle_repo_dir=$CIRCLE_WORKING_DIRECTORY circle_is_pull_request=$CIRCLE_PULL_REQUEST circle_test_dir=$circle_test_dir circle_code_coverage_dir=$circle_code_coverage_dir"
sudo PYTHONUNBUFFERED=1 ansible-playbook -v -i "localhost," -c local docker_site.yml --tags "circle,$tags_list" -e "$extra_variables"
;;
"docker_hub") echo "Docker Hub"
PYTHONUNBUFFERED=1 ansible-playbook -vvv -i "localhost," -c local docker_site.yml --tags "docker_hub,$tags_list" -e "ros_release=$ros_release ubuntu_version_name=$ubuntu_version"
;;
"local") echo "Local run"
export local_repo_dir=$4
if [ -z "$unit_tests_result_dir" ]
then
export unit_tests_dir="$docker_user_home/workspace/test_results"
else
export unit_tests_dir="/host/"$unit_tests_result_dir
fi
if [ -z "$coverage_tests_result_dir" ]
then
export coverage_tests_dir="$docker_user_home/workspace/coverage_results"
else
export coverage_tests_dir="/host/"$coverage_tests_result_dir
fi
if [ -z "$benchmarking_result_dir" ]
then
export benchmarking_dir="$docker_user_home/workspace/benchmarking_results"
else
export benchmarking_dir="/host/"$benchmarking_result_dir
fi
docker pull $docker_image
# Remove untagged Docker images which do not have containers associated with them
export untagged_images_list="$(sudo docker images -q --filter 'dangling=true')"
for untagged_image_name in $untagged_images_list; do
export images_used_by_containers="$(sudo docker ps -a | tail -n +2 | tr -s ' ' | cut -d' ' -f2 | paste -d' ' -s)"
if [[ $images_used_by_containers != *"$untagged_image_name"* ]]; then
echo "Removing unused and untagged Docker image $untagged_image_name"
sudo docker rmi -f $untagged_image_name
fi
done
export extra_variables="$extra_variables local_repo_dir=/host$local_repo_dir local_test_dir=$unit_tests_dir local_code_coverage_dir=$coverage_tests_dir"
export extra_variables="$extra_variables local_benchmarking_dir=$benchmarking_dir"
docker run -w "$docker_user_home/sr-build-tools/ansible" -e LOCAL_USER_ID=$(id -u) $docker_flags --rm -v $HOME:/host:rw $docker_image bash -c "git pull && git checkout $toolset_branch && git pull && PYTHONUNBUFFERED=1 ansible-playbook -v -i \"localhost,\" -c local docker_site.yml --tags \"local,$tags_list\" -e \"$extra_variables\" "
;;
"local-docker") echo "Using Docker Image from Docker Hub"
export local_repo=$4
if [ -z "$unit_tests_result_dir" ]
then
export unit_tests_dir="/home/user/unit_tests"
else
export unit_tests_dir=$unit_tests_result_dir
fi
if [ -z "$coverage_tests_result_dir" ]
then
export coverage_tests_dir="/home/user/code_coverage"
else
export coverage_tests_dir=$coverage_tests_result_dir
fi
if [ -z "$benchmarking_result_dir" ]
then
export benchmarking_dir="/home/user/benchmarking_results"
else
export benchmarking_dir=$benchmarking_result_dir
fi
export extra_variables="$extra_variables local_repo_dir=$local_repo local_test_dir=$unit_tests_dir local_code_coverage_dir=$coverage_tests_dir local_benchmarking_dir=$benchmarking_dir"
git pull && git checkout $toolset_branch && git pull && sudo PYTHONUNBUFFERED=1 ansible-playbook -v -i "localhost," -c local docker_site.yml --tags "local,$tags_list" -e "$extra_variables"
;;
*) echo "Not supported server type $server_type"
;;
esac