blob: 86b7a5a7248fac6dc340c606ef8e093cd1125fe9 (
plain)
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
|
#!/bin/bash
set -euf -o pipefail
# glob variable declarations
script_dir="$(readlink -f "$(dirname "$0")")"
# ####################################################################
# read server configuration
config_name="$1"
# shellcheck disable=SC1090
. $script_dir/$config_name/config
lnt_repo_url=${lnt_repo_url-https://git.linaro.org/toolchain/llvm-lnt.git}
lnt_repo_branch=${lnt_repo_branch?}
lnt_root_dir="${lnt_root_dir-$PWD/$config_name/lntserver/}"
echo "[$config_name] server name is : ${lnt_server_name?}"
echo "[$config_name] lnt repository : ${lnt_repo_url?}"
echo "[$config_name] lnt branch : ${lnt_repo_url?}"
echo "[$config_name] local root_dir : ${lnt_root_dir}"
# shellcheck disable=SC2154
echo "[$config_name] lnt projects : ${!lnt_projects[*]}"
# ####################################################################
#
lnt_sandbox_dir="$lnt_root_dir/sandbox"
lnt_repo_dir="$lnt_root_dir/llvm-lnt"
lnt_db_dir="$lnt_root_dir/lnt-database"
lnt_schemas_dir="$script_dir/$config_name"
# ####################################################################
#
# get LLVM-LNT sources
if [ ! -d "$lnt_repo_dir" ]; then
git clone "$lnt_repo_url" "$lnt_repo_dir"
fi
git -C "$lnt_repo_dir" fetch origin "$lnt_repo_branch"
git -C "$lnt_repo_dir" checkout --force FETCH_HEAD
# ####################################################################
#
# create LNT sandbox
if [ ! -d "$lnt_sandbox_dir" ]; then
(
virtualenv "$lnt_sandbox_dir"
cd "$lnt_sandbox_dir"
# shellcheck disable=SC1091
source bin/activate
python "$lnt_repo_dir"/setup.py develop
# temporary workaround for jammy
case "$(lsb_release -sc)" in
focal)
;;
jammy)
(
set +f
sed -i 's/from collections /from collections.abc /' \
lib/python3.10/site-packages/Werkzeug-0.12.2-py3.10.egg/werkzeug/datastructures.py \
lib/python3.10/site-packages/Jinja2-2.7.2-py3.10.egg/jinja2/_compat.py \
lib/python3.10/site-packages/MarkupSafe-0.23-py3.10-*.egg/markupsafe/__init__.py
)
;;
*)
echo >&2 "distro not supported"
exit 1
;;
esac
)
fi
# shellcheck disable=SC1091
source "$lnt_sandbox_dir/bin/activate"
# ####################################################################
#
# create LNT database
generate_schema()
{
local template=${1?}
local tsname=${2?}
local outdir="$3"
cat "${lnt_schemas_dir?}/$template.yaml.in" \
| sed "s/TSNAME/$tsname/g" > "$outdir/$tsname.yaml"
}
tmp_schemas=$(mktemp -d)
for project in "${!lnt_projects[@]}"; do
generate_schema "${lnt_projects[$project]}" "$project" "$tmp_schemas"
done
if [ -d "$lnt_db_dir" ]; then
if ! diff -rq "$lnt_db_dir/schemas" "$tmp_schemas"; then
# Schemas have changed, so start from a fresh database.
rm -rf "$lnt_db_dir"
fi
fi
if [ ! -d "$lnt_db_dir" ]; then
lnt create "$lnt_db_dir" --name "$lnt_server_name" --stable-urls
lnt_secret_token="$(echo $RANDOM | md5sum | cut -d' ' -f1)"
sed -i "s/# \(api_auth_token =\).*/\1 '$lnt_secret_token'/" "$lnt_db_dir"/lnt.cfg
rsync -a --del "$tmp_schemas/" "$lnt_db_dir/schemas/"
fi
rm -rf "$tmp_schemas"
# TODO schema update not yet supported
# eventually delete everything
# or just delete the updated testsuite (not supported yet in lnt)
# ####################################################################
#
# run the LNT server
# only one server on the machine for now
pkill --echo --full "lnt runserver .* --port 80" || true
exec lnt runserver "$lnt_db_dir" --hostname 0.0.0.0 --port 80 --processes 4
# ####################################################################
# TODO
#
# - remove temporary workaround for jammy (update dependencies version)
#
# - look at github.com/llvm/llvm-lnt/blob/main/docker/docker-entrypoint.sh
#
# - also apply local LNT patches
#
# - option to restart everything from scratch ? just the db ?
#
|