Skip to content

Commit 4e222be

Browse files
committed
ci: Add MySQL and PostgreSQL for tests
They can be started using tests/utils/mysql.sh and tests/utils/postgresql.sh, respectively. The commands print the socket path to stdout.
1 parent 29630bd commit 4e222be

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

flake.nix

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565

6666
# Website generator.
6767
pkgs.zola
68+
69+
# Database servers for testing.
70+
pkgs.mariadb
71+
pkgs.postgresql
6872
];
6973

7074
# node-gyp wants some locales, let’s make them available through an environment variable.

tests/utils/mysql.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env bash
2+
3+
DB_DIRECTORY=$(mktemp -d)
4+
SOCKET=$(mktemp -d)/mysqld.sock
5+
6+
# Set up the server
7+
mkdir -p "$DB_DIRECTORY"
8+
chmod 750 "$DB_DIRECTORY"
9+
mysql_install_db --datadir="$DB_DIRECTORY" > /dev/stderr
10+
11+
# Start the server
12+
mysqld_safe --datadir="$DB_DIRECTORY" --socket="$SOCKET" --skip-networking --no-auto-restart > /dev/stderr
13+
14+
# Create users
15+
sleep 2 # Waiting does not seem to work.
16+
mysql --wait --socket="$SOCKET" -e "CREATE USER 'selfoss'@'localhost' IDENTIFIED BY 'password';" > /dev/stderr
17+
mysql --wait --socket="$SOCKET" -e "CREATE DATABASE selfoss;" > /dev/stderr
18+
mysql --wait --socket="$SOCKET" -e "GRANT ALL PRIVILEGES ON *.* TO 'selfoss'@'localhost';" > /dev/stderr
19+
20+
echo "$SOCKET"
21+
22+
echo 'Use `mysqladmin --socket="$SOCKET" shutdown` to stop the database server:' > /dev/stderr
23+
echo "mysqladmin --socket=\"$SOCKET\" shutdown" > /dev/stderr
24+

tests/utils/postgresql.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env bash
2+
3+
DB_DIRECTORY=$(mktemp -d)
4+
SOCKET_DIR=$(mktemp -d)
5+
6+
postgresOptions=(
7+
-k "$SOCKET_DIR"
8+
-c "listen_addresses="
9+
)
10+
11+
# Set up the server
12+
mkdir -p "$DB_DIRECTORY"
13+
chmod 750 "$DB_DIRECTORY"
14+
initdb "$DB_DIRECTORY" > /dev/stderr
15+
16+
# Start the server
17+
pg_ctl start -D "$DB_DIRECTORY" -o "${postgresOptions[*]}" > /dev/stderr # Intentionally passing options as a string
18+
19+
# Create users
20+
# Using a “template1” database since it is guaranteed to be present.
21+
psql -h "$SOCKET_DIR" -d template1 -tAc 'CREATE USER "selfoss"' > /dev/stderr
22+
psql -h "$SOCKET_DIR" -d template1 -tAc 'CREATE DATABASE "selfoss" WITH OWNER = "selfoss"' > /dev/stderr
23+
24+
echo "$SOCKET_DIR"
25+
26+
echo 'Use `pg_ctl stop -D "$(psql -h "$SOCKET_DIR" -d template1 -tAc "SHOW data_directory;")"` to stop the database server:' > /dev/stderr
27+
echo "pg_ctl stop -D \"$DB_DIRECTORY\"" > /dev/stderr

0 commit comments

Comments
 (0)