1
1
#! /bin/sh
2
2
3
- # Functions to annotate the Github actions logs
4
- alias trace_on=' set -x'
5
- alias trace_off=' { set +x; } 2>/dev/null'
6
-
7
- section_start_internal () {
8
- echo " ::group::$1 "
9
- trace_on
10
- }
11
-
12
- section_end_internal () {
13
- echo " ::endgroup::"
14
- trace_on
15
- }
16
-
17
- alias section_start=' trace_off ; section_start_internal '
18
- alias section_end=' trace_off ; section_end_internal '
3
+ . .github/jobs/ci_settings.sh
19
4
20
5
export version=" $1 "
6
+ db=${2:- install}
7
+ phpversion=" ${3:- 8.1} "
8
+ # If this script is called from unit-tests.sh, we use the test environment
9
+ export APP_ENV=" ${4:- prod} "
21
10
22
- set -eux
11
+ # In the test environment, we need to use a different database
12
+ [ " $APP_ENV " = " prod" ] && DATABASE_NAME=domjudge || DATABASE_NAME=domjudge_test
23
13
24
- section_start " Update packages"
25
- sudo apt update
26
- section_end
14
+ MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:- root}
27
15
28
- section_start " Install needed packages"
29
- sudo apt install -y acl zip unzip nginx php php-fpm php-gd \
30
- php-cli php-intl php-mbstring php-mysql php-curl php-json \
31
- php-xml php-zip ntp make sudo debootstrap \
32
- libcgroup-dev lsof php-cli php-curl php-json php-xml \
33
- php-zip procps gcc g++ default-jre-headless \
34
- default-jdk-headless ghc fp-compiler autoconf automake bats \
35
- python3-sphinx python3-sphinx-rtd-theme rst2pdf fontconfig \
36
- python3-yaml latexmk curl
37
- section_end
16
+ set -eux
38
17
39
- PHPVERSION=$( php -r ' echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION."\n";' )
40
- export PHPVERSION
18
+ if [ -z " $phpversion " ]; then
19
+ phpversion=$( php -r ' echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION."\n";' )
20
+ fi
41
21
42
- section_start " Install composer"
43
- php -r " copy('https://getcomposer.org/installer', 'composer-setup.php');"
44
- HASH=" $( wget -q -O - https://composer.github.io/installer.sig) "
45
- php -r " if (hash_file('SHA384', 'composer-setup.php') === '$HASH ') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
46
- sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
47
- section_end
22
+ show_phpinfo " $phpversion "
48
23
49
24
section_start " Run composer"
50
25
export APP_ENV=" dev"
51
- composer install --no-scripts
26
+ cd webapp
27
+ composer install --no-scripts | tee " $ARTIFACTS " /composer_out.txt
28
+ cd ..
52
29
section_end
53
30
54
31
section_start " Set simple admin password"
@@ -58,59 +35,127 @@ section_end
58
35
59
36
section_start " Install domserver"
60
37
make configure
61
- ./configure --with-baseurl=' https://localhost/domjudge/' --enable-doc-build=no --prefix=" /opt/domjudge"
38
+ if [ " $version " = " all" ]; then
39
+ # Note that we use http instead of https here as python requests doesn't
40
+ # like our self-signed cert. We should fix this separately.
41
+ ./configure \
42
+ --with-baseurl=' http://localhost/domjudge/' \
43
+ --with-domjudge-user=domjudge \
44
+ --with-judgehost-chrootdir=/chroot/domjudge | tee " $ARTIFACTS " /configure.txt
45
+ make build-scripts domserver judgehost docs
46
+ make install-domserver install-judgehost install-docs
47
+ else
48
+ ./configure \
49
+ --with-baseurl=' https://localhost/domjudge/' \
50
+ --with-domjudge-user=root \
51
+ --enable-doc-build=no \
52
+ --enable-judgehost-build=no | tee " $ARTIFACTS " /configure.txt
53
+ make domserver
54
+ make install-domserver
55
+ rm -rf /opt/domjudge/domserver/webapp/public/doc
56
+ cp -r doc /opt/domjudge/domserver/webapp/public/
57
+ find /opt/domjudge/domserver -name DOMjudgelogo.pdf
58
+ fi
59
+ section_end
62
60
63
- make domserver
64
- sudo make install-domserver
61
+ section_start " SQL settings"
62
+ cat > ~ /.my.cnf << EOF
63
+ [client]
64
+ host=sqlserver
65
+ user=root
66
+ password=${MYSQL_ROOT_PASSWORD}
67
+ EOF
68
+ cat ~ /.my.cnf
69
+
70
+ mysql_root " CREATE DATABASE IF NOT EXISTS \` $DATABASE_NAME \` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
71
+ mysql_root " CREATE USER IF NOT EXISTS \` domjudge\` @'%' IDENTIFIED BY 'domjudge';"
72
+ mysql_root " GRANT SELECT, INSERT, UPDATE, DELETE ON \` $DATABASE_NAME \` .* TO 'domjudge'@'%';"
73
+ mysql_root " FLUSH PRIVILEGES;"
74
+
75
+ # Show some MySQL debugging
76
+ mysql_root " show databases"
77
+ mysql_root " SELECT CURRENT_USER();"
78
+ mysql_root " SELECT USER();"
79
+ mysql_root " SELECT user,host FROM mysql.user"
80
+ mysql_root " SET GLOBAL max_allowed_packet=1073741824"
81
+ mysql_root " SHOW GLOBAL STATUS LIKE 'Connection_errors_%'"
82
+ mysql_root " SHOW VARIABLES LIKE '%_timeout'"
83
+ echo " unused:sqlserver:$DATABASE_NAME :domjudge:domjudge:3306" > /opt/domjudge/domserver/etc/dbpasswords.secret
84
+ mysql_user " SELECT CURRENT_USER();"
85
+ mysql_user " SELECT USER();"
65
86
section_end
66
87
67
- section_start " Explicit start mysql + install DB"
68
- sudo /etc/init.d/mysql start
88
+ if [ " ${db} " = " install" ]; then
89
+ section_start " Install DOMjudge database"
90
+ /opt/domjudge/domserver/bin/dj_setup_database -uroot -p${MYSQL_ROOT_PASSWORD} bare-install
91
+ section_end
92
+ elif [ " ${db} " = " upgrade" ]; then
93
+ section_start " Upgrade DOMjudge database"
94
+ /opt/domjudge/domserver/bin/dj_setup_database -uroot -p${MYSQL_ROOT_PASSWORD} upgrade
95
+ section_end
96
+ fi
97
+
98
+ section_start " Show PHP config"
99
+ php -v | tee -a " $ARTIFACTS " /php.txt
100
+ php -m | tee -a " $ARTIFACTS " /php.txt
101
+ section_end
69
102
70
- /opt/domjudge/domserver/bin/dj_setup_database -uroot -proot bare-install
103
+ section_start " Show general config"
104
+ printenv | tee -a " $ARTIFACTS " /environment.txt
105
+ cp /etc/os-release " $ARTIFACTS " /os-release.txt
106
+ cp /proc/cmdline " $ARTIFACTS " /cmdline.txt
71
107
section_end
72
108
73
109
section_start " Setup webserver"
74
- sudo cp /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/$PHPVERSION /fpm/pool.d/domjudge.conf
110
+ cp /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/" $phpversion " /fpm/pool.d/domjudge.conf
75
111
76
- sudo rm -f /etc/nginx/sites-enabled/*
77
- sudo cp /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge
112
+ rm -f /etc/nginx/sites-enabled/*
113
+ cp /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge
78
114
79
115
openssl req -nodes -new -x509 -keyout /tmp/server.key -out /tmp/server.crt -subj " /C=NL/ST=Noord-Holland/L=Amsterdam/O=TestingForPR/CN=localhost"
80
- sudo cp /tmp/server.crt /usr/local/share/ca-certificates/
81
- sudo update-ca-certificates
116
+ cp /tmp/server.crt /usr/local/share/ca-certificates/
117
+ update-ca-certificates
82
118
# shellcheck disable=SC2002
83
- cat " $( pwd) /.github/jobs/data/nginx_extra" | sudo tee -a /etc/nginx/sites-enabled/domjudge
84
- sudo nginx -t
119
+ cat " $( pwd) /.github/jobs/data/nginx_extra" | tee -a /etc/nginx/sites-enabled/domjudge
120
+ nginx -t
85
121
section_end
86
122
87
123
section_start " Show webserver is up"
88
- for service in nginx php${PHPVERSION } -fpm; do
89
- sudo systemctl restart $service
90
- sudo systemctl status $service
124
+ for service in nginx php${phpversion } -fpm; do
125
+ service " $service " restart
126
+ service " $service " status
91
127
done
92
128
section_end
93
129
94
- section_start " Install the example data"
95
- /opt/domjudge/domserver/bin/dj_setup_database -uroot -proot install-examples
96
- section_end
130
+ if [ " ${db} " = " install" ]; then
131
+ section_start " Install the example data"
132
+ if [ " $version " = " unit" ]; then
133
+ # Make sure admin has no team associated so we will not insert submissions during unit tests.
134
+ mysql_root " UPDATE user SET teamid=null WHERE userid=1;" $DATABASE_NAME
135
+ fi
136
+ /opt/domjudge/domserver/bin/dj_setup_database -uroot -p${MYSQL_ROOT_PASSWORD} install-examples | tee -a " $ARTIFACTS /mysql.txt"
137
+ section_end
138
+ fi
97
139
98
140
section_start " Setup user"
99
141
# We're using the admin user in all possible roles
100
- echo " DELETE FROM userrole WHERE userid=1;" | mysql -uroot -proot domjudge
142
+ mysql_root " DELETE FROM userrole WHERE userid=1;" $DATABASE_NAME
101
143
if [ " $version " = " team" ]; then
102
144
# Add team to admin user
103
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 3);" | mysql -uroot -proot domjudge
104
- echo " UPDATE user SET teamid = 1 WHERE userid = 1;" | mysql -uroot -proot domjudge
145
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 3);" $DATABASE_NAME
146
+ mysql_root " UPDATE user SET teamid = 1 WHERE userid = 1;" $DATABASE_NAME
105
147
elif [ " $version " = " jury" ]; then
106
148
# Add jury to admin user
107
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 2);" | mysql -uroot -proot domjudge
149
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 2);" $DATABASE_NAME
108
150
elif [ " $version " = " balloon" ]; then
109
151
# Add balloon to admin user
110
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 4);" | mysql -uroot -proot domjudge
152
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 4);" $DATABASE_NAME
111
153
elif [ " $version " = " admin" ]; then
112
154
# Add admin to admin user
113
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 1);" | mysql -uroot -proot domjudge
155
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 1);" $DATABASE_NAME
156
+ elif [ " $version " = " all" ] || [ " $version " = " unit" ]; then
157
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 1);" $DATABASE_NAME
158
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 3);" $DATABASE_NAME
159
+ mysql_root " UPDATE user SET teamid = 1 WHERE userid = 1;" $DATABASE_NAME
114
160
fi
115
161
section_end
116
-
0 commit comments