WUT_Computer_Science/Programming/BD2/monorepo/create_database.sh
Krzysztof kuhy Rudnicki 50263f075a Add pre-commit and fix everything it found
`pre-commit run --all-files` is green. The config only carries hooks whose
subject is already clean, so it stays green at every commit -- file-length,
ruff/mypy and dependency-freshness are listed as blocked, each on its own
cleanup, and the file-REWRITING hooks (trailing-whitespace, end-of-file-fixer)
are held back for their own reviewed commit.

Turning it on found four real things:

1. A committed private key: ERSMS-project/nginx/ssl/nginx.key. It is a
   self-signed CN=localhost cert that had already expired (notAfter
   2025-06-16), so the risk is nil -- but it is regenerable in one openssl
   call, so it is replaced by generate-cert.sh rather than excluded from the
   hook. The script says plainly that removing it from HEAD does NOT
   unpublish it: history is deliberately not rewritten, which is acceptable
   only because nothing ever trusted this key.

2. Four files with unresolved merge conflict markers committed, left over
   from the subtree merges. EARIN/.gitignore and .vscode/extensions.json are
   resolved as the union of both sides. The two Unity folder .meta files each
   had two candidate GUIDs; grepping showed neither is referenced anywhere
   (folder GUIDs rarely are), so either is safe and the HEAD side is kept --
   an arbitrary choice, but a checked one rather than a guess.

3. 62 shellcheck findings across 11 scripts, all fixed, no disables added.
   The interesting pattern was `cd X; cmd &; PID=$!; cd ..`, which trips both
   SC2164 and SC2103 and cannot use a plain subshell without losing the PID.
   `( cd X && exec cmd ) &` keeps the directory, the PID and the semantics.
   EOPSY lab1's submitted solution was verified by RUNNING it afterwards:
   a->A, B->b, foldera->FOLDERA, FOLDERB->folderb, exactly as before.

4. check-json failing on 11 files, which was the wrong parser rather than a
   defect -- tsconfig*.json and .vscode/*.json are JSONC, where TypeScript
   and VS Code both allow comments. Those two path classes are excluded and
   every other .json is still checked. Excluding them is what surfaced the
   merge conflict in (2) as the one genuine failure.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
2026-08-28 18:21:22 +02:00

67 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# Define variables (consider using a config file for flexibility)
DB_USER="postgres"
DB_PASSWORD="password"
DB_NAME="mydb"
DB_SCHEMA="public"
DB_PORT="5432"
# Detect Linux distribution
if [[ -f /etc/arch-release ]]; then
# Arch Linux
echo "Detected Arch Linux"
INSTALL_CMD="sudo pacman -S --noconfirm"
SERVICE_CMD="sudo systemctl"
CONFIG_DIR="/var/lib/postgres/data"
elif [[ -f /etc/debian_version ]]; then
# Debian-based (Debian, Ubuntu, etc.)
echo "Detected Debian-based Linux"
INSTALL_CMD="sudo apt-get install -y"
SERVICE_CMD="sudo systemctl"
CONFIG_DIR="/etc/postgresql"
else
echo "Unsupported Linux distribution. Exiting."
exit 1
fi
# Update package lists (important for Debian-based)
if [[ $INSTALL_CMD == *"apt-get"* ]]; then
sudo apt-get update -y
fi
# Install PostgreSQL
$INSTALL_CMD postgresql
# Initialize the database cluster (Arch only)
if [[ $INSTALL_CMD == *"pacman"* ]]; then
sudo -iu postgres initdb --locale "$LANG" -E UTF8 -D "$CONFIG_DIR"
fi
# Start and enable PostgreSQL service
$SERVICE_CMD start postgresql
$SERVICE_CMD enable postgresql
# Switch to the postgres user to set up the database and user
sudo -iu postgres psql <<EOF
ALTER USER $DB_USER WITH PASSWORD '$DB_PASSWORD';
CREATE DATABASE $DB_NAME;
EOF
# Modify configuration files to allow password authentication (Arch only)
if [[ $INSTALL_CMD == *"pacman"* ]]; then
sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = 'localhost'/g" "$CONFIG_DIR/postgresql.conf"
sudo sed -i "s/peer/md5/g" "$CONFIG_DIR/pg_hba.conf"
sudo sed -i "s/ident/md5/g" "$CONFIG_DIR/pg_hba.conf"
fi
# Restart PostgreSQL to apply changes
$SERVICE_CMD restart postgresql
# Export the DATABASE_URL
export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost:$DB_PORT/$DB_NAME?schema=$DB_SCHEMA"
# Print the DATABASE_URL to verify
echo "DATABASE_URL=$DATABASE_URL"
echo "PostgreSQL setup is complete. The database is accessible at the specified URL."