Skip to content

Commit eace76b

Browse files
authored
Merge pull request #4460 from badlop/arm_runner
Use ARM native runner and parallelization in workflows to reduce perceived run time
2 parents ca03a97 + ad48768 commit eace76b

File tree

17 files changed

+1179
-527
lines changed

17 files changed

+1179
-527
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
name: 'Manage Database'
2+
3+
inputs:
4+
for:
5+
default: ""
6+
description: 'One or more databases to manage:
7+
mysql, pgsql, redis, mssql'
8+
9+
do:
10+
default: ""
11+
description: 'One or more tasks to do:
12+
install, start, user, create, drop, dump'
13+
14+
dump-suffix:
15+
default: ""
16+
description: 'Suffix to append to the dump file name'
17+
18+
mssql-schema:
19+
default: ""
20+
description: 'SQL schema for the MSSQL database:
21+
singlehost or multihost'
22+
23+
runs:
24+
using: "composite"
25+
steps:
26+
27+
############################################################# Install #####
28+
29+
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'install')
30+
shell: sh
31+
run: |
32+
sudo sed -i 's/yes/no/g' /etc/initramfs-tools/update-initramfs.conf
33+
sudo rm -f /var/lib/man-db/auto-update || echo ok
34+
sudo apt-get -q -y install postgresql
35+
36+
- if: contains(inputs.for, 'redis') && contains(inputs.do, 'install')
37+
shell: sh
38+
run: |
39+
sudo sed -i 's/yes/no/g' /etc/initramfs-tools/update-initramfs.conf
40+
sudo rm -f /var/lib/man-db/auto-update || echo ok
41+
sudo apt-get -q -y install redis-server
42+
43+
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
44+
uses: awalsh128/cache-apt-pkgs-action@latest
45+
with:
46+
packages: tdsodbc
47+
48+
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
49+
shell: sh
50+
run: |
51+
docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=ejabberd_Test1" \
52+
-v $(pwd)/test/docker/db/mssql/initdb/initdb_mssql.sql:/initdb_mssql.sql:ro \
53+
-v $(pwd)/sql/mssql.sql:/mssql.sql:ro \
54+
-v $(pwd)/sql/mssql.new.sql:/mssql.new.sql:ro \
55+
-p 1433:1433 --name ejabberd-mssql \
56+
"mcr.microsoft.com/mssql/server:2019-latest"
57+
sleep 10
58+
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd \
59+
-C -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
60+
61+
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
62+
&& inputs.mssql-schema == 'singlehost'
63+
shell: sh
64+
run: |
65+
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd \
66+
-C -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test \
67+
-i /mssql.sql
68+
69+
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
70+
&& inputs.mssql-schema == 'multihost'
71+
shell: sh
72+
run: |
73+
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd \
74+
-C -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test \
75+
-i /mssql.new.sql
76+
77+
############################################################### Start #####
78+
79+
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'start')
80+
shell: sh
81+
run: |
82+
sudo systemctl start mysql.service
83+
84+
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'start')
85+
shell: sh
86+
run: |
87+
sudo systemctl start postgresql.service
88+
pg_isready
89+
90+
################################################################ User #####
91+
92+
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'user')
93+
shell: sh
94+
run: |
95+
mysql -u root -proot -e "CREATE USER 'ejabberd_test'@'localhost'
96+
IDENTIFIED BY 'ejabberd_test';"
97+
98+
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'user')
99+
shell: sh
100+
run: |
101+
sudo -u postgres psql -c "CREATE USER ejabberd_test
102+
WITH PASSWORD 'ejabberd_test';"
103+
104+
################################################################ Dump #####
105+
106+
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'dump')
107+
shell: sh
108+
run: |
109+
sudo mysqldump -u root -proot ejabberd_test \
110+
> mysql-${{ inputs.dump-suffix }}.sql
111+
112+
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'dump')
113+
shell: sh
114+
run: |
115+
sudo -u postgres pg_dump ejabberd_test \
116+
> pgsql-${{ inputs.dump-suffix }}.sql
117+
118+
################################################################ Drop #####
119+
120+
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'drop')
121+
shell: sh
122+
run: |
123+
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
124+
125+
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'drop')
126+
shell: sh
127+
run: |
128+
sudo -u postgres psql -c "DROP DATABASE ejabberd_test;"
129+
130+
############################################################## Create #####
131+
132+
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'create')
133+
shell: sh
134+
run: |
135+
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
136+
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
137+
TO 'ejabberd_test'@'localhost';"
138+
139+
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'create')
140+
shell: sh
141+
run: |
142+
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
143+
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
144+
ON DATABASE ejabberd_test TO ejabberd_test;"
145+
sudo -u postgres psql -c "GRANT ALL ON SCHEMA public TO ejabberd_test;"
146+
sudo -u postgres psql -c "ALTER DATABASE ejabberd_test
147+
OWNER TO ejabberd_test;"
148+
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
149+
TABLES IN SCHEMA public
150+
TO ejabberd_test;"
151+
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
152+
SEQUENCES IN SCHEMA public
153+
TO ejabberd_test;"
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
name: 'Manage ejabberd'
2+
3+
inputs:
4+
for:
5+
default: ""
6+
description: 'Release method, one of:
7+
prod, dev, install, run, deb'
8+
do:
9+
default: ""
10+
description: 'One or more tasks to perform:
11+
deploy, no_acme, no_tls,
12+
start, register, update_sql, stop,
13+
logs, check'
14+
username:
15+
default: "user1"
16+
description: 'Username part of the account JID'
17+
host:
18+
default: "localhost"
19+
description: 'Host part of the account JID'
20+
tool:
21+
default: "rebar3"
22+
description: 'Build tool to use:
23+
rebar or rebar3 (only relevant to make rebar2)'
24+
rel_name_vsn:
25+
default: ""
26+
description: 'Base name of installer files'
27+
28+
runs:
29+
using: "composite"
30+
steps:
31+
32+
- name: Path Definitions
33+
id: path
34+
shell: bash
35+
run: |
36+
case ${{ inputs.for }} in
37+
'prod')
38+
BASE="_build/prod/rel/ejabberd"
39+
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
40+
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
41+
echo "ectl=$BASE/bin/ejabberdctl" >> $GITHUB_OUTPUT
42+
;;
43+
'dev')
44+
BASE="_build/dev/rel/ejabberd"
45+
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
46+
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
47+
echo "ectl=$BASE/bin/ejabberdctl" >> $GITHUB_OUTPUT
48+
;;
49+
'install')
50+
BASE="/tmp/ejabberd"
51+
echo "conf=$BASE/etc/ejabberd" >> $GITHUB_OUTPUT
52+
echo "logs=$BASE/var/log/ejabberd" >> $GITHUB_OUTPUT
53+
echo "ectl=$BASE/sbin/ejabberdctl" >> $GITHUB_OUTPUT
54+
;;
55+
'deb')
56+
BASE="/opt/ejabberd"
57+
echo "base=$BASE" >> $GITHUB_OUTPUT
58+
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
59+
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
60+
echo "ectl=sudo /opt/${{ inputs.rel_name_vsn }}/bin/ejabberdctl" >> $GITHUB_OUTPUT
61+
;;
62+
'run')
63+
BASE="$HOME/opt/ejabberd"
64+
echo "base=$BASE" >> $GITHUB_OUTPUT
65+
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
66+
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
67+
echo "ectl=$HOME/opt/${{ inputs.rel_name_vsn }}/bin/ejabberdctl" >> $GITHUB_OUTPUT
68+
;;
69+
esac
70+
71+
############################################################## Deploy #####
72+
73+
- if: contains(inputs.do, 'deploy') &&
74+
inputs.for == 'prod' && inputs.tool == 'rebar'
75+
shell: sh
76+
run: |
77+
mkdir -p _build/prod && ln -s `pwd`/rel/ _build/prod/rel
78+
79+
- if: contains(inputs.do, 'deploy') &&
80+
inputs.for == 'dev' && inputs.tool == 'rebar'
81+
shell: sh
82+
run: |
83+
mkdir -p _build/dev && ln -s `pwd`/rel/ _build/dev/rel
84+
85+
- if: contains(inputs.do, 'deploy') &&
86+
(inputs.for == 'prod' ||
87+
inputs.for == 'dev' ||
88+
inputs.for == 'install')
89+
shell: sh
90+
run: |
91+
make ${{ inputs.for }}
92+
93+
- if: contains(inputs.do, 'deploy') &&
94+
inputs.for == 'deb'
95+
shell: sh
96+
run: |
97+
sudo dpkg -i $(ls -1 *.deb)
98+
99+
- if: contains(inputs.do, 'deploy') &&
100+
inputs.for == 'run'
101+
shell: sh
102+
run: |
103+
./$(ls -1 *.run)
104+
105+
################################################################ ACME #####
106+
107+
- if: contains(inputs.do, 'no_acme')
108+
shell: sh
109+
run: |
110+
sed -i 's/loglevel/acme:\n auto: false\nloglevel/g' \
111+
${{ steps.path.outputs.conf }}/ejabberd.yml
112+
113+
################################################################# TLS #####
114+
115+
- if: contains(inputs.do, 'no_tls') &&
116+
inputs.for == 'dev'
117+
shell: sh
118+
run: |
119+
sed -i 's/starttls_required: true/starttls_required: false/g' \
120+
${{ steps.path.outputs.conf }}/ejabberd.yml
121+
122+
############################################################### Start #####
123+
124+
- if: contains(inputs.do, 'start')
125+
shell: sh
126+
run: |
127+
${{ steps.path.outputs.ectl }} start
128+
${{ steps.path.outputs.ectl }} started
129+
130+
############################################################ Register #####
131+
132+
- if: contains(inputs.do, 'register')
133+
shell: sh
134+
run: |
135+
${{ steps.path.outputs.ectl }} \
136+
register ${{ inputs.username }} ${{ inputs.host }} s0mePass
137+
${{ steps.path.outputs.ectl }} \
138+
registered_users ${{ inputs.host }} >> registered.log
139+
grep -q '${{ inputs.username }}' registered.log
140+
141+
########################################################### UpdateSQL #####
142+
143+
- if: contains(inputs.do, 'update_sql')
144+
shell: sh
145+
run: |
146+
${{ steps.path.outputs.ectl }} \
147+
update_sql
148+
149+
################################################################ Stop #####
150+
151+
- if: contains(inputs.do, 'stop')
152+
shell: sh
153+
run: |
154+
${{ steps.path.outputs.ectl }} stop
155+
${{ steps.path.outputs.ectl }} stopped
156+
157+
################################################################ Logs #####
158+
159+
- if: contains(inputs.do, 'logs')
160+
shell: sh
161+
run: |
162+
SUDO=sudo
163+
[ "${{ inputs.for }}" = "deb" ] || SUDO=""
164+
echo "::group::View ejabberd.log"
165+
$SUDO cat ${{ steps.path.outputs.logs }}/ejabberd.log
166+
echo "::endgroup::"
167+
echo "::group::View error.log"
168+
$SUDO cat ${{ steps.path.outputs.logs }}/error.log
169+
echo "::endgroup::"
170+
171+
############################################################### Check #####
172+
173+
- if: contains(inputs.do, 'check')
174+
shell: sh
175+
run: |
176+
grep -q 'is started' ${{ steps.path.outputs.logs }}/ejabberd.log
177+
grep -q 'is stopped' ${{ steps.path.outputs.logs }}/ejabberd.log
178+
test $(find ${{ steps.path.outputs.logs }}/ -empty -name error.log)

0 commit comments

Comments
 (0)